aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/eina/src
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/eina/src')
-rw-r--r--libraries/eina/src/Makefile.am17
-rw-r--r--libraries/eina/src/Makefile.in637
-rw-r--r--libraries/eina/src/examples/Makefile.am84
-rw-r--r--libraries/eina/src/examples/Makefile.in954
-rw-r--r--libraries/eina/src/examples/eina_accessor_01.c55
-rw-r--r--libraries/eina/src/examples/eina_array_01.c51
-rw-r--r--libraries/eina/src/examples/eina_array_02.c57
-rw-r--r--libraries/eina/src/examples/eina_error_01.c80
-rw-r--r--libraries/eina/src/examples/eina_file_01.c45
-rw-r--r--libraries/eina/src/examples/eina_hash_01.c195
-rw-r--r--libraries/eina/src/examples/eina_hash_02.c144
-rw-r--r--libraries/eina/src/examples/eina_hash_03.c195
-rw-r--r--libraries/eina/src/examples/eina_hash_04.c195
-rw-r--r--libraries/eina/src/examples/eina_hash_05.c198
-rw-r--r--libraries/eina/src/examples/eina_hash_06.c198
-rw-r--r--libraries/eina/src/examples/eina_hash_07.c219
-rw-r--r--libraries/eina/src/examples/eina_hash_08.c125
-rw-r--r--libraries/eina/src/examples/eina_inlist_01.c96
-rw-r--r--libraries/eina/src/examples/eina_inlist_02.c64
-rw-r--r--libraries/eina/src/examples/eina_inlist_03.c73
-rw-r--r--libraries/eina/src/examples/eina_iterator_01.c66
-rw-r--r--libraries/eina/src/examples/eina_list_01.c44
-rw-r--r--libraries/eina/src/examples/eina_list_02.c55
-rw-r--r--libraries/eina/src/examples/eina_list_03.c45
-rw-r--r--libraries/eina/src/examples/eina_list_04.c36
-rw-r--r--libraries/eina/src/examples/eina_log_01.c27
-rw-r--r--libraries/eina/src/examples/eina_log_02.c38
-rw-r--r--libraries/eina/src/examples/eina_log_03.c78
-rw-r--r--libraries/eina/src/examples/eina_str_01.c65
-rw-r--r--libraries/eina/src/examples/eina_strbuf_01.c41
-rw-r--r--libraries/eina/src/examples/eina_tiler_01.c316
-rw-r--r--libraries/eina/src/include/Eina.h194
-rw-r--r--libraries/eina/src/include/Makefile.am89
-rw-r--r--libraries/eina/src/include/Makefile.in560
-rw-r--r--libraries/eina/src/include/eina_accessor.h340
-rw-r--r--libraries/eina/src/include/eina_array.h449
-rw-r--r--libraries/eina/src/include/eina_benchmark.h453
-rw-r--r--libraries/eina/src/include/eina_binbuf.h217
-rw-r--r--libraries/eina/src/include/eina_binshare.h193
-rw-r--r--libraries/eina/src/include/eina_clist.h456
-rw-r--r--libraries/eina/src/include/eina_config.h67
-rw-r--r--libraries/eina/src/include/eina_config.h.in67
-rw-r--r--libraries/eina/src/include/eina_convert.h374
-rw-r--r--libraries/eina/src/include/eina_counter.h213
-rw-r--r--libraries/eina/src/include/eina_cpu.h39
-rw-r--r--libraries/eina/src/include/eina_error.h198
-rw-r--r--libraries/eina/src/include/eina_file.h392
-rw-r--r--libraries/eina/src/include/eina_fp.h111
-rw-r--r--libraries/eina/src/include/eina_hamster.h58
-rw-r--r--libraries/eina/src/include/eina_hash.h1040
-rw-r--r--libraries/eina/src/include/eina_inline_array.x164
-rw-r--r--libraries/eina/src/include/eina_inline_f16p16.x83
-rw-r--r--libraries/eina/src/include/eina_inline_f32p32.x110
-rw-r--r--libraries/eina/src/include/eina_inline_f8p24.x82
-rw-r--r--libraries/eina/src/include/eina_inline_fp.x153
-rw-r--r--libraries/eina/src/include/eina_inline_hash.x151
-rw-r--r--libraries/eina/src/include/eina_inline_list.x67
-rw-r--r--libraries/eina/src/include/eina_inline_lock_posix.x509
-rw-r--r--libraries/eina/src/include/eina_inline_lock_void.x247
-rw-r--r--libraries/eina/src/include/eina_inline_lock_win32.x466
-rw-r--r--libraries/eina/src/include/eina_inline_lock_wince.x178
-rw-r--r--libraries/eina/src/include/eina_inline_log.x197
-rw-r--r--libraries/eina/src/include/eina_inline_mempool.x127
-rw-r--r--libraries/eina/src/include/eina_inline_rbtree.x50
-rw-r--r--libraries/eina/src/include/eina_inline_rectangle.x254
-rw-r--r--libraries/eina/src/include/eina_inline_str.x76
-rw-r--r--libraries/eina/src/include/eina_inline_stringshare.x91
-rw-r--r--libraries/eina/src/include/eina_inline_tiler.x151
-rw-r--r--libraries/eina/src/include/eina_inline_trash.x90
-rw-r--r--libraries/eina/src/include/eina_inline_ustringshare.x93
-rw-r--r--libraries/eina/src/include/eina_inlist.h813
-rw-r--r--libraries/eina/src/include/eina_iterator.h337
-rw-r--r--libraries/eina/src/include/eina_lalloc.h60
-rw-r--r--libraries/eina/src/include/eina_list.h1631
-rw-r--r--libraries/eina/src/include/eina_lock.h125
-rw-r--r--libraries/eina/src/include/eina_log.h888
-rw-r--r--libraries/eina/src/include/eina_magic.h322
-rw-r--r--libraries/eina/src/include/eina_main.h162
-rw-r--r--libraries/eina/src/include/eina_matrixsparse.h399
-rw-r--r--libraries/eina/src/include/eina_mempool.h123
-rw-r--r--libraries/eina/src/include/eina_mmap.h59
-rw-r--r--libraries/eina/src/include/eina_module.h343
-rw-r--r--libraries/eina/src/include/eina_prefix.h228
-rw-r--r--libraries/eina/src/include/eina_quadtree.h53
-rw-r--r--libraries/eina/src/include/eina_rbtree.h271
-rw-r--r--libraries/eina/src/include/eina_rectangle.h239
-rw-r--r--libraries/eina/src/include/eina_refcount.h76
-rw-r--r--libraries/eina/src/include/eina_safety_checks.h254
-rw-r--r--libraries/eina/src/include/eina_sched.h39
-rw-r--r--libraries/eina/src/include/eina_simple_xml_parser.h386
-rw-r--r--libraries/eina/src/include/eina_str.h325
-rw-r--r--libraries/eina/src/include/eina_strbuf.h605
-rw-r--r--libraries/eina/src/include/eina_stringshare.h321
-rw-r--r--libraries/eina/src/include/eina_tiler.h310
-rw-r--r--libraries/eina/src/include/eina_trash.h100
-rw-r--r--libraries/eina/src/include/eina_types.h282
-rw-r--r--libraries/eina/src/include/eina_unicode.h177
-rw-r--r--libraries/eina/src/include/eina_ustrbuf.h446
-rw-r--r--libraries/eina/src/include/eina_ustringshare.h200
-rw-r--r--libraries/eina/src/include/eina_xattr.h168
-rw-r--r--libraries/eina/src/lib/Makefile.am171
-rw-r--r--libraries/eina/src/lib/Makefile.in1226
-rw-r--r--libraries/eina/src/lib/eina_accessor.c176
-rw-r--r--libraries/eina/src/lib/eina_array.c491
-rw-r--r--libraries/eina/src/lib/eina_benchmark.c372
-rw-r--r--libraries/eina/src/lib/eina_binbuf.c62
-rw-r--r--libraries/eina/src/lib/eina_binbuf_template_c.x144
-rw-r--r--libraries/eina/src/lib/eina_binshare.c127
-rw-r--r--libraries/eina/src/lib/eina_convert.c483
-rw-r--r--libraries/eina/src/lib/eina_counter.c362
-rw-r--r--libraries/eina/src/lib/eina_cpu.c207
-rw-r--r--libraries/eina/src/lib/eina_error.c279
-rw-r--r--libraries/eina/src/lib/eina_file.c1187
-rw-r--r--libraries/eina/src/lib/eina_file_win32.c1021
-rw-r--r--libraries/eina/src/lib/eina_fp.c532
-rw-r--r--libraries/eina/src/lib/eina_hamster.c113
-rw-r--r--libraries/eina/src/lib/eina_hash.c1375
-rw-r--r--libraries/eina/src/lib/eina_inlist.c909
-rw-r--r--libraries/eina/src/lib/eina_iterator.c172
-rw-r--r--libraries/eina/src/lib/eina_lalloc.c158
-rw-r--r--libraries/eina/src/lib/eina_list.c1490
-rw-r--r--libraries/eina/src/lib/eina_log.c1852
-rw-r--r--libraries/eina/src/lib/eina_magic.c320
-rw-r--r--libraries/eina/src/lib/eina_main.c431
-rw-r--r--libraries/eina/src/lib/eina_matrixsparse.c1421
-rw-r--r--libraries/eina/src/lib/eina_mempool.c387
-rw-r--r--libraries/eina/src/lib/eina_mmap.c185
-rw-r--r--libraries/eina/src/lib/eina_module.c599
-rw-r--r--libraries/eina/src/lib/eina_prefix.c727
-rw-r--r--libraries/eina/src/lib/eina_private.h140
-rw-r--r--libraries/eina/src/lib/eina_quadtree.c935
-rw-r--r--libraries/eina/src/lib/eina_rbtree.c518
-rw-r--r--libraries/eina/src/lib/eina_rectangle.c568
-rw-r--r--libraries/eina/src/lib/eina_safety_checks.c90
-rw-r--r--libraries/eina/src/lib/eina_sched.c94
-rw-r--r--libraries/eina/src/lib/eina_share_common.c977
-rw-r--r--libraries/eina/src/lib/eina_share_common.h103
-rw-r--r--libraries/eina/src/lib/eina_simple_xml_parser.c1070
-rw-r--r--libraries/eina/src/lib/eina_str.c462
-rw-r--r--libraries/eina/src/lib/eina_strbuf.c202
-rw-r--r--libraries/eina/src/lib/eina_strbuf_common.c874
-rw-r--r--libraries/eina/src/lib/eina_strbuf_common.h120
-rw-r--r--libraries/eina/src/lib/eina_strbuf_template_c.x97
-rw-r--r--libraries/eina/src/lib/eina_stringshare.c751
-rw-r--r--libraries/eina/src/lib/eina_tiler.c1276
-rw-r--r--libraries/eina/src/lib/eina_unicode.c405
-rw-r--r--libraries/eina/src/lib/eina_ustrbuf.c74
-rw-r--r--libraries/eina/src/lib/eina_ustringshare.c132
-rw-r--r--libraries/eina/src/lib/eina_value.c47
-rw-r--r--libraries/eina/src/lib/eina_xattr.c292
-rw-r--r--libraries/eina/src/modules/Makefile.am4
-rw-r--r--libraries/eina/src/modules/Makefile.in631
-rw-r--r--libraries/eina/src/modules/mp/Makefile.am45
-rw-r--r--libraries/eina/src/modules/mp/Makefile.in639
-rw-r--r--libraries/eina/src/modules/mp/buddy/Makefile.am29
-rw-r--r--libraries/eina/src/modules/mp/buddy/Makefile.in643
-rw-r--r--libraries/eina/src/modules/mp/buddy/eina_buddy.c292
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/Makefile.am30
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/Makefile.in644
-rw-r--r--libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c547
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am30
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in644
-rw-r--r--libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c176
-rw-r--r--libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am30
-rw-r--r--libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in644
-rw-r--r--libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c182
-rw-r--r--libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am29
-rw-r--r--libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in643
-rw-r--r--libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c270
-rw-r--r--libraries/eina/src/modules/mp/one_big/Makefile.am30
-rw-r--r--libraries/eina/src/modules/mp/one_big/Makefile.in644
-rw-r--r--libraries/eina/src/modules/mp/one_big/eina_one_big.c336
-rw-r--r--libraries/eina/src/modules/mp/pass_through/Makefile.am29
-rw-r--r--libraries/eina/src/modules/mp/pass_through/Makefile.in643
-rw-r--r--libraries/eina/src/modules/mp/pass_through/eina_pass_through.c90
-rw-r--r--libraries/eina/src/tests/Ecore_Data.h557
-rw-r--r--libraries/eina/src/tests/Evas_Data.h195
-rw-r--r--libraries/eina/src/tests/Makefile.am137
-rw-r--r--libraries/eina/src/tests/Makefile.in982
-rw-r--r--libraries/eina/src/tests/city.cc307
-rw-r--r--libraries/eina/src/tests/ecore_hash.c949
-rw-r--r--libraries/eina/src/tests/ecore_list.c2162
-rw-r--r--libraries/eina/src/tests/ecore_sheap.c467
-rw-r--r--libraries/eina/src/tests/ecore_strings.c160
-rw-r--r--libraries/eina/src/tests/eina_bench.c105
-rw-r--r--libraries/eina/src/tests/eina_bench.h36
-rw-r--r--libraries/eina/src/tests/eina_bench_array.c699
-rw-r--r--libraries/eina/src/tests/eina_bench_convert.c183
-rw-r--r--libraries/eina/src/tests/eina_bench_hash.c545
-rw-r--r--libraries/eina/src/tests/eina_bench_mempool.c188
-rw-r--r--libraries/eina/src/tests/eina_bench_quad.c318
-rw-r--r--libraries/eina/src/tests/eina_bench_rectangle_pool.c76
-rw-r--r--libraries/eina/src/tests/eina_bench_sort.c222
-rw-r--r--libraries/eina/src/tests/eina_bench_stringshare.c177
-rw-r--r--libraries/eina/src/tests/eina_bench_stringshare_e17.c118
-rw-r--r--libraries/eina/src/tests/eina_suite.c177
-rw-r--r--libraries/eina/src/tests/eina_suite.h58
-rw-r--r--libraries/eina/src/tests/eina_test_accessor.c243
-rw-r--r--libraries/eina/src/tests/eina_test_array.c191
-rw-r--r--libraries/eina/src/tests/eina_test_benchmark.c76
-rw-r--r--libraries/eina/src/tests/eina_test_binbuf.c235
-rw-r--r--libraries/eina/src/tests/eina_test_binshare.c199
-rw-r--r--libraries/eina/src/tests/eina_test_clist.c89
-rw-r--r--libraries/eina/src/tests/eina_test_convert.c165
-rw-r--r--libraries/eina/src/tests/eina_test_counter.c108
-rw-r--r--libraries/eina/src/tests/eina_test_error.c59
-rw-r--r--libraries/eina/src/tests/eina_test_file.c88
-rw-r--r--libraries/eina/src/tests/eina_test_fp.c93
-rw-r--r--libraries/eina/src/tests/eina_test_hash.c206
-rw-r--r--libraries/eina/src/tests/eina_test_inlist.c254
-rw-r--r--libraries/eina/src/tests/eina_test_iterator.c465
-rw-r--r--libraries/eina/src/tests/eina_test_lalloc.c89
-rw-r--r--libraries/eina/src/tests/eina_test_list.c347
-rw-r--r--libraries/eina/src/tests/eina_test_log.c235
-rw-r--r--libraries/eina/src/tests/eina_test_magic.c96
-rw-r--r--libraries/eina/src/tests/eina_test_main.c62
-rw-r--r--libraries/eina/src/tests/eina_test_matrixsparse.c489
-rw-r--r--libraries/eina/src/tests/eina_test_mempool.c187
-rw-r--r--libraries/eina/src/tests/eina_test_module.c70
-rw-r--r--libraries/eina/src/tests/eina_test_module_dummy.c22
-rw-r--r--libraries/eina/src/tests/eina_test_quadtree.c195
-rw-r--r--libraries/eina/src/tests/eina_test_rbtree.c452
-rw-r--r--libraries/eina/src/tests/eina_test_rectangle.c115
-rw-r--r--libraries/eina/src/tests/eina_test_sched.c85
-rw-r--r--libraries/eina/src/tests/eina_test_simple_xml_parser.c73
-rw-r--r--libraries/eina/src/tests/eina_test_str.c181
-rw-r--r--libraries/eina/src/tests/eina_test_strbuf.c449
-rw-r--r--libraries/eina/src/tests/eina_test_stringshare.c201
-rw-r--r--libraries/eina/src/tests/eina_test_tiler.c184
-rw-r--r--libraries/eina/src/tests/eina_test_ustr.c483
-rw-r--r--libraries/eina/src/tests/eina_test_ustringshare.c119
-rw-r--r--libraries/eina/src/tests/evas_hash.c536
-rw-r--r--libraries/eina/src/tests/evas_list.c1093
-rw-r--r--libraries/eina/src/tests/evas_mempool.c200
-rw-r--r--libraries/eina/src/tests/evas_mempool.h21
-rw-r--r--libraries/eina/src/tests/evas_object_list.c183
-rw-r--r--libraries/eina/src/tests/evas_stringshare.c275
-rw-r--r--libraries/eina/src/tests/strlog46999
238 files changed, 121944 insertions, 0 deletions
diff --git a/libraries/eina/src/Makefile.am b/libraries/eina/src/Makefile.am
new file mode 100644
index 0000000..7ae5ce9
--- /dev/null
+++ b/libraries/eina/src/Makefile.am
@@ -0,0 +1,17 @@
1SUBDIRS = lib include modules tests examples
2
3MAINTAINERCLEANFILES = Makefile.in
4
5.PHONY: benchmark
6
7if EFL_ENABLE_BENCHMARK
8
9benchmark: all
10 cd tests && make eina_bench
11
12else
13
14benchmark:
15 @echo "reconfigure with --enable-benchmark"
16
17endif
diff --git a/libraries/eina/src/Makefile.in b/libraries/eina/src/Makefile.in
new file mode 100644
index 0000000..c954fc5
--- /dev/null
+++ b/libraries/eina/src/Makefile.in
@@ -0,0 +1,637 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17VPATH = @srcdir@
18pkgdatadir = $(datadir)/@PACKAGE@
19pkgincludedir = $(includedir)/@PACKAGE@
20pkglibdir = $(libdir)/@PACKAGE@
21pkglibexecdir = $(libexecdir)/@PACKAGE@
22am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
23install_sh_DATA = $(install_sh) -c -m 644
24install_sh_PROGRAM = $(install_sh) -c
25install_sh_SCRIPT = $(install_sh) -c
26INSTALL_HEADER = $(INSTALL_DATA)
27transform = $(program_transform_name)
28NORMAL_INSTALL = :
29PRE_INSTALL = :
30POST_INSTALL = :
31NORMAL_UNINSTALL = :
32PRE_UNINSTALL = :
33POST_UNINSTALL = :
34build_triplet = @build@
35host_triplet = @host@
36subdir = src
37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
39am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
40 $(top_srcdir)/m4/efl_benchmark.m4 \
41 $(top_srcdir)/m4/efl_compiler_flag.m4 \
42 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
43 $(top_srcdir)/m4/efl_doxygen.m4 \
44 $(top_srcdir)/m4/efl_examples.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/efl_threads.m4 \
48 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
49 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59AM_V_GEN = $(am__v_GEN_$(V))
60am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
61am__v_GEN_0 = @echo " GEN " $@;
62AM_V_at = $(am__v_at_$(V))
63am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
64am__v_at_0 = @
65SOURCES =
66DIST_SOURCES =
67RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
68 html-recursive info-recursive install-data-recursive \
69 install-dvi-recursive install-exec-recursive \
70 install-html-recursive install-info-recursive \
71 install-pdf-recursive install-ps-recursive install-recursive \
72 installcheck-recursive installdirs-recursive pdf-recursive \
73 ps-recursive uninstall-recursive
74RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
75 distclean-recursive maintainer-clean-recursive
76AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
77 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
78 distdir
79ETAGS = etags
80CTAGS = ctags
81DIST_SUBDIRS = $(SUBDIRS)
82DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
83am__relativize = \
84 dir0=`pwd`; \
85 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
86 sed_rest='s,^[^/]*/*,,'; \
87 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
88 sed_butlast='s,/*[^/]*$$,,'; \
89 while test -n "$$dir1"; do \
90 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
91 if test "$$first" != "."; then \
92 if test "$$first" = ".."; then \
93 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
94 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
95 else \
96 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
97 if test "$$first2" = "$$first"; then \
98 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
99 else \
100 dir2="../$$dir2"; \
101 fi; \
102 dir0="$$dir0"/"$$first"; \
103 fi; \
104 fi; \
105 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
106 done; \
107 reldir="$$dir2"
108ACLOCAL = @ACLOCAL@
109ALLOCA = @ALLOCA@
110AMTAR = @AMTAR@
111AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
112AR = @AR@
113AS = @AS@
114AUTOCONF = @AUTOCONF@
115AUTOHEADER = @AUTOHEADER@
116AUTOMAKE = @AUTOMAKE@
117AWK = @AWK@
118CC = @CC@
119CCDEPMODE = @CCDEPMODE@
120CFLAGS = @CFLAGS@
121CHECK_CFLAGS = @CHECK_CFLAGS@
122CHECK_LIBS = @CHECK_LIBS@
123CPP = @CPP@
124CPPFLAGS = @CPPFLAGS@
125CXX = @CXX@
126CXXCPP = @CXXCPP@
127CXXDEPMODE = @CXXDEPMODE@
128CXXFLAGS = @CXXFLAGS@
129CYGPATH_W = @CYGPATH_W@
130DEFS = @DEFS@
131DEPDIR = @DEPDIR@
132DLLTOOL = @DLLTOOL@
133DSYMUTIL = @DSYMUTIL@
134DUMPBIN = @DUMPBIN@
135ECHO_C = @ECHO_C@
136ECHO_N = @ECHO_N@
137ECHO_T = @ECHO_T@
138ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
139ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
140EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
141EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
142EFL_EINA_BUILD = @EFL_EINA_BUILD@
143EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
144EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
145EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
146EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
147EGREP = @EGREP@
148EINA_CFLAGS = @EINA_CFLAGS@
149EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
150EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
151EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
152EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
153EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
154EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
155EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
156EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
157EINA_CPPFLAGS = @EINA_CPPFLAGS@
158EINA_LIBS = @EINA_LIBS@
159EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
160EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
161EMEMOA_LIBS = @EMEMOA_LIBS@
162ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
163ESCAPE_LIBS = @ESCAPE_LIBS@
164EVIL_CFLAGS = @EVIL_CFLAGS@
165EVIL_LIBS = @EVIL_LIBS@
166EXEEXT = @EXEEXT@
167FGREP = @FGREP@
168GLIB_CFLAGS = @GLIB_CFLAGS@
169GLIB_LIBS = @GLIB_LIBS@
170GREP = @GREP@
171INSTALL = @INSTALL@
172INSTALL_DATA = @INSTALL_DATA@
173INSTALL_PROGRAM = @INSTALL_PROGRAM@
174INSTALL_SCRIPT = @INSTALL_SCRIPT@
175INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
176LD = @LD@
177LDFLAGS = @LDFLAGS@
178LIBOBJS = @LIBOBJS@
179LIBS = @LIBS@
180LIBTOOL = @LIBTOOL@
181LIPO = @LIPO@
182LN_S = @LN_S@
183LTLIBOBJS = @LTLIBOBJS@
184MAKEINFO = @MAKEINFO@
185MKDIR_P = @MKDIR_P@
186MODULE_ARCH = @MODULE_ARCH@
187NM = @NM@
188NMEDIT = @NMEDIT@
189OBJDUMP = @OBJDUMP@
190OBJEXT = @OBJEXT@
191OTOOL = @OTOOL@
192OTOOL64 = @OTOOL64@
193PACKAGE = @PACKAGE@
194PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
195PACKAGE_NAME = @PACKAGE_NAME@
196PACKAGE_STRING = @PACKAGE_STRING@
197PACKAGE_TARNAME = @PACKAGE_TARNAME@
198PACKAGE_URL = @PACKAGE_URL@
199PACKAGE_VERSION = @PACKAGE_VERSION@
200PATH_SEPARATOR = @PATH_SEPARATOR@
201PKG_CONFIG = @PKG_CONFIG@
202PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
203PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
204RANLIB = @RANLIB@
205SED = @SED@
206SET_MAKE = @SET_MAKE@
207SHELL = @SHELL@
208STRIP = @STRIP@
209VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
210VALGRIND_LIBS = @VALGRIND_LIBS@
211VERSION = @VERSION@
212VMAJ = @VMAJ@
213abs_builddir = @abs_builddir@
214abs_srcdir = @abs_srcdir@
215abs_top_builddir = @abs_top_builddir@
216abs_top_srcdir = @abs_top_srcdir@
217ac_ct_CC = @ac_ct_CC@
218ac_ct_CXX = @ac_ct_CXX@
219ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
220am__include = @am__include@
221am__leading_dot = @am__leading_dot@
222am__quote = @am__quote@
223am__tar = @am__tar@
224am__untar = @am__untar@
225bindir = @bindir@
226build = @build@
227build_alias = @build_alias@
228build_cpu = @build_cpu@
229build_os = @build_os@
230build_vendor = @build_vendor@
231builddir = @builddir@
232datadir = @datadir@
233datarootdir = @datarootdir@
234dlopen_libs = @dlopen_libs@
235docdir = @docdir@
236dvidir = @dvidir@
237efl_doxygen = @efl_doxygen@
238efl_have_doxygen = @efl_have_doxygen@
239exec_prefix = @exec_prefix@
240have_lcov = @have_lcov@
241host = @host@
242host_alias = @host_alias@
243host_cpu = @host_cpu@
244host_os = @host_os@
245host_vendor = @host_vendor@
246htmldir = @htmldir@
247iconv_libs = @iconv_libs@
248includedir = @includedir@
249infodir = @infodir@
250install_sh = @install_sh@
251libdir = @libdir@
252libexecdir = @libexecdir@
253localedir = @localedir@
254localstatedir = @localstatedir@
255lt_ECHO = @lt_ECHO@
256lt_enable_auto_import = @lt_enable_auto_import@
257mandir = @mandir@
258mkdir_p = @mkdir_p@
259oldincludedir = @oldincludedir@
260pdfdir = @pdfdir@
261pkgconfig_requires_private = @pkgconfig_requires_private@
262prefix = @prefix@
263program_transform_name = @program_transform_name@
264psdir = @psdir@
265release_info = @release_info@
266requirement_eina = @requirement_eina@
267rt_libs = @rt_libs@
268sbindir = @sbindir@
269sharedstatedir = @sharedstatedir@
270srcdir = @srcdir@
271sysconfdir = @sysconfdir@
272target_alias = @target_alias@
273top_build_prefix = @top_build_prefix@
274top_builddir = @top_builddir@
275top_srcdir = @top_srcdir@
276version_info = @version_info@
277SUBDIRS = lib include modules tests examples
278MAINTAINERCLEANFILES = Makefile.in
279all: all-recursive
280
281.SUFFIXES:
282$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
283 @for dep in $?; do \
284 case '$(am__configure_deps)' in \
285 *$$dep*) \
286 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
287 && { if test -f $@; then exit 0; else break; fi; }; \
288 exit 1;; \
289 esac; \
290 done; \
291 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
292 $(am__cd) $(top_srcdir) && \
293 $(AUTOMAKE) --gnu src/Makefile
294.PRECIOUS: Makefile
295Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
296 @case '$?' in \
297 *config.status*) \
298 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
299 *) \
300 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
301 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
302 esac;
303
304$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
305 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
306
307$(top_srcdir)/configure: $(am__configure_deps)
308 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
309$(ACLOCAL_M4): $(am__aclocal_m4_deps)
310 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
311$(am__aclocal_m4_deps):
312
313mostlyclean-libtool:
314 -rm -f *.lo
315
316clean-libtool:
317 -rm -rf .libs _libs
318
319# This directory's subdirectories are mostly independent; you can cd
320# into them and run `make' without going through this Makefile.
321# To change the values of `make' variables: instead of editing Makefiles,
322# (1) if the variable is set in `config.status', edit `config.status'
323# (which will cause the Makefiles to be regenerated when you run `make');
324# (2) otherwise, pass the desired values on the `make' command line.
325$(RECURSIVE_TARGETS):
326 @fail= failcom='exit 1'; \
327 for f in x $$MAKEFLAGS; do \
328 case $$f in \
329 *=* | --[!k]*);; \
330 *k*) failcom='fail=yes';; \
331 esac; \
332 done; \
333 dot_seen=no; \
334 target=`echo $@ | sed s/-recursive//`; \
335 list='$(SUBDIRS)'; for subdir in $$list; do \
336 echo "Making $$target in $$subdir"; \
337 if test "$$subdir" = "."; then \
338 dot_seen=yes; \
339 local_target="$$target-am"; \
340 else \
341 local_target="$$target"; \
342 fi; \
343 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
344 || eval $$failcom; \
345 done; \
346 if test "$$dot_seen" = "no"; then \
347 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
348 fi; test -z "$$fail"
349
350$(RECURSIVE_CLEAN_TARGETS):
351 @fail= failcom='exit 1'; \
352 for f in x $$MAKEFLAGS; do \
353 case $$f in \
354 *=* | --[!k]*);; \
355 *k*) failcom='fail=yes';; \
356 esac; \
357 done; \
358 dot_seen=no; \
359 case "$@" in \
360 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
361 *) list='$(SUBDIRS)' ;; \
362 esac; \
363 rev=''; for subdir in $$list; do \
364 if test "$$subdir" = "."; then :; else \
365 rev="$$subdir $$rev"; \
366 fi; \
367 done; \
368 rev="$$rev ."; \
369 target=`echo $@ | sed s/-recursive//`; \
370 for subdir in $$rev; do \
371 echo "Making $$target in $$subdir"; \
372 if test "$$subdir" = "."; then \
373 local_target="$$target-am"; \
374 else \
375 local_target="$$target"; \
376 fi; \
377 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
378 || eval $$failcom; \
379 done && test -z "$$fail"
380tags-recursive:
381 list='$(SUBDIRS)'; for subdir in $$list; do \
382 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
383 done
384ctags-recursive:
385 list='$(SUBDIRS)'; for subdir in $$list; do \
386 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
387 done
388
389ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
390 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
391 unique=`for i in $$list; do \
392 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
393 done | \
394 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
395 END { if (nonempty) { for (i in files) print i; }; }'`; \
396 mkid -fID $$unique
397tags: TAGS
398
399TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
400 $(TAGS_FILES) $(LISP)
401 set x; \
402 here=`pwd`; \
403 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
404 include_option=--etags-include; \
405 empty_fix=.; \
406 else \
407 include_option=--include; \
408 empty_fix=; \
409 fi; \
410 list='$(SUBDIRS)'; for subdir in $$list; do \
411 if test "$$subdir" = .; then :; else \
412 test ! -f $$subdir/TAGS || \
413 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
414 fi; \
415 done; \
416 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
417 unique=`for i in $$list; do \
418 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
419 done | \
420 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
421 END { if (nonempty) { for (i in files) print i; }; }'`; \
422 shift; \
423 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
424 test -n "$$unique" || unique=$$empty_fix; \
425 if test $$# -gt 0; then \
426 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
427 "$$@" $$unique; \
428 else \
429 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
430 $$unique; \
431 fi; \
432 fi
433ctags: CTAGS
434CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
435 $(TAGS_FILES) $(LISP)
436 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
437 unique=`for i in $$list; do \
438 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
439 done | \
440 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
441 END { if (nonempty) { for (i in files) print i; }; }'`; \
442 test -z "$(CTAGS_ARGS)$$unique" \
443 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
444 $$unique
445
446GTAGS:
447 here=`$(am__cd) $(top_builddir) && pwd` \
448 && $(am__cd) $(top_srcdir) \
449 && gtags -i $(GTAGS_ARGS) "$$here"
450
451distclean-tags:
452 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
453
454distdir: $(DISTFILES)
455 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
456 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
457 list='$(DISTFILES)'; \
458 dist_files=`for file in $$list; do echo $$file; done | \
459 sed -e "s|^$$srcdirstrip/||;t" \
460 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
461 case $$dist_files in \
462 */*) $(MKDIR_P) `echo "$$dist_files" | \
463 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
464 sort -u` ;; \
465 esac; \
466 for file in $$dist_files; do \
467 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
468 if test -d $$d/$$file; then \
469 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
470 if test -d "$(distdir)/$$file"; then \
471 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
472 fi; \
473 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
474 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
475 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
476 fi; \
477 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
478 else \
479 test -f "$(distdir)/$$file" \
480 || cp -p $$d/$$file "$(distdir)/$$file" \
481 || exit 1; \
482 fi; \
483 done
484 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
485 if test "$$subdir" = .; then :; else \
486 test -d "$(distdir)/$$subdir" \
487 || $(MKDIR_P) "$(distdir)/$$subdir" \
488 || exit 1; \
489 fi; \
490 done
491 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
492 if test "$$subdir" = .; then :; else \
493 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
494 $(am__relativize); \
495 new_distdir=$$reldir; \
496 dir1=$$subdir; dir2="$(top_distdir)"; \
497 $(am__relativize); \
498 new_top_distdir=$$reldir; \
499 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
500 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
501 ($(am__cd) $$subdir && \
502 $(MAKE) $(AM_MAKEFLAGS) \
503 top_distdir="$$new_top_distdir" \
504 distdir="$$new_distdir" \
505 am__remove_distdir=: \
506 am__skip_length_check=: \
507 am__skip_mode_fix=: \
508 distdir) \
509 || exit 1; \
510 fi; \
511 done
512check-am: all-am
513check: check-recursive
514all-am: Makefile
515installdirs: installdirs-recursive
516installdirs-am:
517install: install-recursive
518install-exec: install-exec-recursive
519install-data: install-data-recursive
520uninstall: uninstall-recursive
521
522install-am: all-am
523 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
524
525installcheck: installcheck-recursive
526install-strip:
527 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
528 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
529 `test -z '$(STRIP)' || \
530 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
531mostlyclean-generic:
532
533clean-generic:
534
535distclean-generic:
536 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
537 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
538
539maintainer-clean-generic:
540 @echo "This command is intended for maintainers to use"
541 @echo "it deletes files that may require special tools to rebuild."
542 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
543clean: clean-recursive
544
545clean-am: clean-generic clean-libtool mostlyclean-am
546
547distclean: distclean-recursive
548 -rm -f Makefile
549distclean-am: clean-am distclean-generic distclean-tags
550
551dvi: dvi-recursive
552
553dvi-am:
554
555html: html-recursive
556
557html-am:
558
559info: info-recursive
560
561info-am:
562
563install-data-am:
564
565install-dvi: install-dvi-recursive
566
567install-dvi-am:
568
569install-exec-am:
570
571install-html: install-html-recursive
572
573install-html-am:
574
575install-info: install-info-recursive
576
577install-info-am:
578
579install-man:
580
581install-pdf: install-pdf-recursive
582
583install-pdf-am:
584
585install-ps: install-ps-recursive
586
587install-ps-am:
588
589installcheck-am:
590
591maintainer-clean: maintainer-clean-recursive
592 -rm -f Makefile
593maintainer-clean-am: distclean-am maintainer-clean-generic
594
595mostlyclean: mostlyclean-recursive
596
597mostlyclean-am: mostlyclean-generic mostlyclean-libtool
598
599pdf: pdf-recursive
600
601pdf-am:
602
603ps: ps-recursive
604
605ps-am:
606
607uninstall-am:
608
609.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
610 install-am install-strip tags-recursive
611
612.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
613 all all-am check check-am clean clean-generic clean-libtool \
614 ctags ctags-recursive distclean distclean-generic \
615 distclean-libtool distclean-tags distdir dvi dvi-am html \
616 html-am info info-am install install-am install-data \
617 install-data-am install-dvi install-dvi-am install-exec \
618 install-exec-am install-html install-html-am install-info \
619 install-info-am install-man install-pdf install-pdf-am \
620 install-ps install-ps-am install-strip installcheck \
621 installcheck-am installdirs installdirs-am maintainer-clean \
622 maintainer-clean-generic mostlyclean mostlyclean-generic \
623 mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
624 uninstall uninstall-am
625
626
627.PHONY: benchmark
628
629@EFL_ENABLE_BENCHMARK_TRUE@benchmark: all
630@EFL_ENABLE_BENCHMARK_TRUE@ cd tests && make eina_bench
631
632@EFL_ENABLE_BENCHMARK_FALSE@benchmark:
633@EFL_ENABLE_BENCHMARK_FALSE@ @echo "reconfigure with --enable-benchmark"
634
635# Tell versions [3.59,3.63) of GNU make to not export all variables.
636# Otherwise a system limit (for SysV at least) may be exceeded.
637.NOEXPORT:
diff --git a/libraries/eina/src/examples/Makefile.am b/libraries/eina/src/examples/Makefile.am
new file mode 100644
index 0000000..ea5ca6a
--- /dev/null
+++ b/libraries/eina/src/examples/Makefile.am
@@ -0,0 +1,84 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3pkglibdir = $(datadir)/$(PACKAGE)/examples
4
5AM_CPPFLAGS = \
6-I. \
7-I$(top_srcdir)/src/include \
8-I$(top_builddir)/src/include
9
10LDADD = \
11 $(top_builddir)/src/lib/libeina.la
12
13SRCS = \
14 eina_accessor_01.c \
15 eina_array_01.c \
16 eina_array_02.c \
17 eina_error_01.c \
18 eina_file_01.c \
19 eina_hash_01.c \
20 eina_hash_02.c \
21 eina_hash_03.c \
22 eina_hash_04.c \
23 eina_hash_05.c \
24 eina_hash_06.c \
25 eina_hash_07.c \
26 eina_hash_08.c \
27 eina_iterator_01.c \
28 eina_list_01.c \
29 eina_list_02.c \
30 eina_list_03.c \
31 eina_list_04.c \
32 eina_log_01.c \
33 eina_log_02.c \
34 eina_log_03.c \
35 eina_inlist_01.c \
36 eina_inlist_02.c \
37 eina_inlist_03.c \
38 eina_str_01.c \
39 eina_strbuf_01.c \
40 eina_tiler_01.c
41
42pkglib_PROGRAMS =
43
44if EFL_INSTALL_EXAMPLES
45filesdir = $(datadir)/$(PACKAGE)/examples
46files_DATA = $(SRCS)
47endif
48
49if EFL_BUILD_EXAMPLES
50pkglib_PROGRAMS += \
51 eina_accessor_01 \
52 eina_array_01 \
53 eina_array_02 \
54 eina_error_01 \
55 eina_file_01 \
56 eina_hash_01 \
57 eina_hash_02 \
58 eina_hash_03 \
59 eina_hash_04 \
60 eina_hash_05 \
61 eina_hash_06 \
62 eina_hash_07 \
63 eina_hash_08 \
64 eina_iterator_01 \
65 eina_list_01 \
66 eina_list_02 \
67 eina_list_03 \
68 eina_list_04 \
69 eina_log_01 \
70 eina_log_02 \
71 eina_log_03 \
72 eina_inlist_01 \
73 eina_inlist_02 \
74 eina_inlist_03 \
75 eina_str_01 \
76 eina_strbuf_01
77
78if BUILD_TILER_EXAMPLE
79AM_CPPFLAGS += @ECORE_EVAS_CFLAGS@
80pkglib_PROGRAMS += eina_tiler_01
81eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@
82endif
83
84endif
diff --git a/libraries/eina/src/examples/Makefile.in b/libraries/eina/src/examples/Makefile.in
new file mode 100644
index 0000000..3379e55
--- /dev/null
+++ b/libraries/eina/src/examples/Makefile.in
@@ -0,0 +1,954 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37pkglib_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
38@EFL_BUILD_EXAMPLES_TRUE@am__append_1 = \
39@EFL_BUILD_EXAMPLES_TRUE@ eina_accessor_01 \
40@EFL_BUILD_EXAMPLES_TRUE@ eina_array_01 \
41@EFL_BUILD_EXAMPLES_TRUE@ eina_array_02 \
42@EFL_BUILD_EXAMPLES_TRUE@ eina_error_01 \
43@EFL_BUILD_EXAMPLES_TRUE@ eina_file_01 \
44@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_01 \
45@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_02 \
46@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_03 \
47@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_04 \
48@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_05 \
49@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_06 \
50@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_07 \
51@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_08 \
52@EFL_BUILD_EXAMPLES_TRUE@ eina_iterator_01 \
53@EFL_BUILD_EXAMPLES_TRUE@ eina_list_01 \
54@EFL_BUILD_EXAMPLES_TRUE@ eina_list_02 \
55@EFL_BUILD_EXAMPLES_TRUE@ eina_list_03 \
56@EFL_BUILD_EXAMPLES_TRUE@ eina_list_04 \
57@EFL_BUILD_EXAMPLES_TRUE@ eina_log_01 \
58@EFL_BUILD_EXAMPLES_TRUE@ eina_log_02 \
59@EFL_BUILD_EXAMPLES_TRUE@ eina_log_03 \
60@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_01 \
61@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02 \
62@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03 \
63@EFL_BUILD_EXAMPLES_TRUE@ eina_str_01 \
64@EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01
65
66@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_2 = @ECORE_EVAS_CFLAGS@
67@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__append_3 = eina_tiler_01
68subdir = src/examples
69DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
70ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
71am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
72 $(top_srcdir)/m4/efl_benchmark.m4 \
73 $(top_srcdir)/m4/efl_compiler_flag.m4 \
74 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
75 $(top_srcdir)/m4/efl_doxygen.m4 \
76 $(top_srcdir)/m4/efl_examples.m4 \
77 $(top_srcdir)/m4/efl_fnmatch.m4 \
78 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
79 $(top_srcdir)/m4/efl_threads.m4 \
80 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
81 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
82 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
83 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
84 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
85am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
86 $(ACLOCAL_M4)
87mkinstalldirs = $(install_sh) -d
88CONFIG_HEADER = $(top_builddir)/config.h
89CONFIG_CLEAN_FILES =
90CONFIG_CLEAN_VPATH_FILES =
91@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_1 = eina_accessor_01$(EXEEXT) \
92@EFL_BUILD_EXAMPLES_TRUE@ eina_array_01$(EXEEXT) \
93@EFL_BUILD_EXAMPLES_TRUE@ eina_array_02$(EXEEXT) \
94@EFL_BUILD_EXAMPLES_TRUE@ eina_error_01$(EXEEXT) \
95@EFL_BUILD_EXAMPLES_TRUE@ eina_file_01$(EXEEXT) \
96@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_01$(EXEEXT) \
97@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_02$(EXEEXT) \
98@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_03$(EXEEXT) \
99@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_04$(EXEEXT) \
100@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_05$(EXEEXT) \
101@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_06$(EXEEXT) \
102@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_07$(EXEEXT) \
103@EFL_BUILD_EXAMPLES_TRUE@ eina_hash_08$(EXEEXT) \
104@EFL_BUILD_EXAMPLES_TRUE@ eina_iterator_01$(EXEEXT) \
105@EFL_BUILD_EXAMPLES_TRUE@ eina_list_01$(EXEEXT) \
106@EFL_BUILD_EXAMPLES_TRUE@ eina_list_02$(EXEEXT) \
107@EFL_BUILD_EXAMPLES_TRUE@ eina_list_03$(EXEEXT) \
108@EFL_BUILD_EXAMPLES_TRUE@ eina_list_04$(EXEEXT) \
109@EFL_BUILD_EXAMPLES_TRUE@ eina_log_01$(EXEEXT) \
110@EFL_BUILD_EXAMPLES_TRUE@ eina_log_02$(EXEEXT) \
111@EFL_BUILD_EXAMPLES_TRUE@ eina_log_03$(EXEEXT) \
112@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_01$(EXEEXT) \
113@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_02$(EXEEXT) \
114@EFL_BUILD_EXAMPLES_TRUE@ eina_inlist_03$(EXEEXT) \
115@EFL_BUILD_EXAMPLES_TRUE@ eina_str_01$(EXEEXT) \
116@EFL_BUILD_EXAMPLES_TRUE@ eina_strbuf_01$(EXEEXT)
117@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@am__EXEEXT_2 = eina_tiler_01$(EXEEXT)
118am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(filesdir)"
119PROGRAMS = $(pkglib_PROGRAMS)
120eina_accessor_01_SOURCES = eina_accessor_01.c
121eina_accessor_01_OBJECTS = eina_accessor_01.$(OBJEXT)
122eina_accessor_01_LDADD = $(LDADD)
123eina_accessor_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
124AM_V_lt = $(am__v_lt_$(V))
125am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
126am__v_lt_0 = --silent
127eina_array_01_SOURCES = eina_array_01.c
128eina_array_01_OBJECTS = eina_array_01.$(OBJEXT)
129eina_array_01_LDADD = $(LDADD)
130eina_array_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
131eina_array_02_SOURCES = eina_array_02.c
132eina_array_02_OBJECTS = eina_array_02.$(OBJEXT)
133eina_array_02_LDADD = $(LDADD)
134eina_array_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
135eina_error_01_SOURCES = eina_error_01.c
136eina_error_01_OBJECTS = eina_error_01.$(OBJEXT)
137eina_error_01_LDADD = $(LDADD)
138eina_error_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
139eina_file_01_SOURCES = eina_file_01.c
140eina_file_01_OBJECTS = eina_file_01.$(OBJEXT)
141eina_file_01_LDADD = $(LDADD)
142eina_file_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
143eina_hash_01_SOURCES = eina_hash_01.c
144eina_hash_01_OBJECTS = eina_hash_01.$(OBJEXT)
145eina_hash_01_LDADD = $(LDADD)
146eina_hash_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
147eina_hash_02_SOURCES = eina_hash_02.c
148eina_hash_02_OBJECTS = eina_hash_02.$(OBJEXT)
149eina_hash_02_LDADD = $(LDADD)
150eina_hash_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
151eina_hash_03_SOURCES = eina_hash_03.c
152eina_hash_03_OBJECTS = eina_hash_03.$(OBJEXT)
153eina_hash_03_LDADD = $(LDADD)
154eina_hash_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
155eina_hash_04_SOURCES = eina_hash_04.c
156eina_hash_04_OBJECTS = eina_hash_04.$(OBJEXT)
157eina_hash_04_LDADD = $(LDADD)
158eina_hash_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
159eina_hash_05_SOURCES = eina_hash_05.c
160eina_hash_05_OBJECTS = eina_hash_05.$(OBJEXT)
161eina_hash_05_LDADD = $(LDADD)
162eina_hash_05_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
163eina_hash_06_SOURCES = eina_hash_06.c
164eina_hash_06_OBJECTS = eina_hash_06.$(OBJEXT)
165eina_hash_06_LDADD = $(LDADD)
166eina_hash_06_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
167eina_hash_07_SOURCES = eina_hash_07.c
168eina_hash_07_OBJECTS = eina_hash_07.$(OBJEXT)
169eina_hash_07_LDADD = $(LDADD)
170eina_hash_07_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
171eina_hash_08_SOURCES = eina_hash_08.c
172eina_hash_08_OBJECTS = eina_hash_08.$(OBJEXT)
173eina_hash_08_LDADD = $(LDADD)
174eina_hash_08_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
175eina_inlist_01_SOURCES = eina_inlist_01.c
176eina_inlist_01_OBJECTS = eina_inlist_01.$(OBJEXT)
177eina_inlist_01_LDADD = $(LDADD)
178eina_inlist_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
179eina_inlist_02_SOURCES = eina_inlist_02.c
180eina_inlist_02_OBJECTS = eina_inlist_02.$(OBJEXT)
181eina_inlist_02_LDADD = $(LDADD)
182eina_inlist_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
183eina_inlist_03_SOURCES = eina_inlist_03.c
184eina_inlist_03_OBJECTS = eina_inlist_03.$(OBJEXT)
185eina_inlist_03_LDADD = $(LDADD)
186eina_inlist_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
187eina_iterator_01_SOURCES = eina_iterator_01.c
188eina_iterator_01_OBJECTS = eina_iterator_01.$(OBJEXT)
189eina_iterator_01_LDADD = $(LDADD)
190eina_iterator_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
191eina_list_01_SOURCES = eina_list_01.c
192eina_list_01_OBJECTS = eina_list_01.$(OBJEXT)
193eina_list_01_LDADD = $(LDADD)
194eina_list_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
195eina_list_02_SOURCES = eina_list_02.c
196eina_list_02_OBJECTS = eina_list_02.$(OBJEXT)
197eina_list_02_LDADD = $(LDADD)
198eina_list_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
199eina_list_03_SOURCES = eina_list_03.c
200eina_list_03_OBJECTS = eina_list_03.$(OBJEXT)
201eina_list_03_LDADD = $(LDADD)
202eina_list_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
203eina_list_04_SOURCES = eina_list_04.c
204eina_list_04_OBJECTS = eina_list_04.$(OBJEXT)
205eina_list_04_LDADD = $(LDADD)
206eina_list_04_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
207eina_log_01_SOURCES = eina_log_01.c
208eina_log_01_OBJECTS = eina_log_01.$(OBJEXT)
209eina_log_01_LDADD = $(LDADD)
210eina_log_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
211eina_log_02_SOURCES = eina_log_02.c
212eina_log_02_OBJECTS = eina_log_02.$(OBJEXT)
213eina_log_02_LDADD = $(LDADD)
214eina_log_02_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
215eina_log_03_SOURCES = eina_log_03.c
216eina_log_03_OBJECTS = eina_log_03.$(OBJEXT)
217eina_log_03_LDADD = $(LDADD)
218eina_log_03_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
219eina_str_01_SOURCES = eina_str_01.c
220eina_str_01_OBJECTS = eina_str_01.$(OBJEXT)
221eina_str_01_LDADD = $(LDADD)
222eina_str_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
223eina_strbuf_01_SOURCES = eina_strbuf_01.c
224eina_strbuf_01_OBJECTS = eina_strbuf_01.$(OBJEXT)
225eina_strbuf_01_LDADD = $(LDADD)
226eina_strbuf_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
227eina_tiler_01_SOURCES = eina_tiler_01.c
228eina_tiler_01_OBJECTS = eina_tiler_01.$(OBJEXT)
229@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
230DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
231depcomp = $(SHELL) $(top_srcdir)/depcomp
232am__depfiles_maybe = depfiles
233am__mv = mv -f
234COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
235 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
236LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
237 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
238 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
239 $(AM_CFLAGS) $(CFLAGS)
240AM_V_CC = $(am__v_CC_$(V))
241am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
242am__v_CC_0 = @echo " CC " $@;
243AM_V_at = $(am__v_at_$(V))
244am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
245am__v_at_0 = @
246CCLD = $(CC)
247LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
248 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
249 $(AM_LDFLAGS) $(LDFLAGS) -o $@
250AM_V_CCLD = $(am__v_CCLD_$(V))
251am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
252am__v_CCLD_0 = @echo " CCLD " $@;
253AM_V_GEN = $(am__v_GEN_$(V))
254am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
255am__v_GEN_0 = @echo " GEN " $@;
256SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \
257 eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \
258 eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \
259 eina_hash_07.c eina_hash_08.c eina_inlist_01.c \
260 eina_inlist_02.c eina_inlist_03.c eina_iterator_01.c \
261 eina_list_01.c eina_list_02.c eina_list_03.c eina_list_04.c \
262 eina_log_01.c eina_log_02.c eina_log_03.c eina_str_01.c \
263 eina_strbuf_01.c eina_tiler_01.c
264DIST_SOURCES = eina_accessor_01.c eina_array_01.c eina_array_02.c \
265 eina_error_01.c eina_file_01.c eina_hash_01.c eina_hash_02.c \
266 eina_hash_03.c eina_hash_04.c eina_hash_05.c eina_hash_06.c \
267 eina_hash_07.c eina_hash_08.c eina_inlist_01.c \
268 eina_inlist_02.c eina_inlist_03.c eina_iterator_01.c \
269 eina_list_01.c eina_list_02.c eina_list_03.c eina_list_04.c \
270 eina_log_01.c eina_log_02.c eina_log_03.c eina_str_01.c \
271 eina_strbuf_01.c eina_tiler_01.c
272am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
273am__vpath_adj = case $$p in \
274 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
275 *) f=$$p;; \
276 esac;
277am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
278am__install_max = 40
279am__nobase_strip_setup = \
280 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
281am__nobase_strip = \
282 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
283am__nobase_list = $(am__nobase_strip_setup); \
284 for p in $$list; do echo "$$p $$p"; done | \
285 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
286 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
287 if (++n[$$2] == $(am__install_max)) \
288 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
289 END { for (dir in files) print dir, files[dir] }'
290am__base_list = \
291 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
292 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
293DATA = $(files_DATA)
294ETAGS = etags
295CTAGS = ctags
296DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
297pkglibdir = $(datadir)/$(PACKAGE)/examples
298ACLOCAL = @ACLOCAL@
299ALLOCA = @ALLOCA@
300AMTAR = @AMTAR@
301AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
302AR = @AR@
303AS = @AS@
304AUTOCONF = @AUTOCONF@
305AUTOHEADER = @AUTOHEADER@
306AUTOMAKE = @AUTOMAKE@
307AWK = @AWK@
308CC = @CC@
309CCDEPMODE = @CCDEPMODE@
310CFLAGS = @CFLAGS@
311CHECK_CFLAGS = @CHECK_CFLAGS@
312CHECK_LIBS = @CHECK_LIBS@
313CPP = @CPP@
314CPPFLAGS = @CPPFLAGS@
315CXX = @CXX@
316CXXCPP = @CXXCPP@
317CXXDEPMODE = @CXXDEPMODE@
318CXXFLAGS = @CXXFLAGS@
319CYGPATH_W = @CYGPATH_W@
320DEFS = @DEFS@
321DEPDIR = @DEPDIR@
322DLLTOOL = @DLLTOOL@
323DSYMUTIL = @DSYMUTIL@
324DUMPBIN = @DUMPBIN@
325ECHO_C = @ECHO_C@
326ECHO_N = @ECHO_N@
327ECHO_T = @ECHO_T@
328ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
329ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
330EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
331EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
332EFL_EINA_BUILD = @EFL_EINA_BUILD@
333EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
334EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
335EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
336EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
337EGREP = @EGREP@
338EINA_CFLAGS = @EINA_CFLAGS@
339EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
340EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
341EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
342EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
343EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
344EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
345EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
346EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
347EINA_CPPFLAGS = @EINA_CPPFLAGS@
348EINA_LIBS = @EINA_LIBS@
349EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
350EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
351EMEMOA_LIBS = @EMEMOA_LIBS@
352ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
353ESCAPE_LIBS = @ESCAPE_LIBS@
354EVIL_CFLAGS = @EVIL_CFLAGS@
355EVIL_LIBS = @EVIL_LIBS@
356EXEEXT = @EXEEXT@
357FGREP = @FGREP@
358GLIB_CFLAGS = @GLIB_CFLAGS@
359GLIB_LIBS = @GLIB_LIBS@
360GREP = @GREP@
361INSTALL = @INSTALL@
362INSTALL_DATA = @INSTALL_DATA@
363INSTALL_PROGRAM = @INSTALL_PROGRAM@
364INSTALL_SCRIPT = @INSTALL_SCRIPT@
365INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
366LD = @LD@
367LDFLAGS = @LDFLAGS@
368LIBOBJS = @LIBOBJS@
369LIBS = @LIBS@
370LIBTOOL = @LIBTOOL@
371LIPO = @LIPO@
372LN_S = @LN_S@
373LTLIBOBJS = @LTLIBOBJS@
374MAKEINFO = @MAKEINFO@
375MKDIR_P = @MKDIR_P@
376MODULE_ARCH = @MODULE_ARCH@
377NM = @NM@
378NMEDIT = @NMEDIT@
379OBJDUMP = @OBJDUMP@
380OBJEXT = @OBJEXT@
381OTOOL = @OTOOL@
382OTOOL64 = @OTOOL64@
383PACKAGE = @PACKAGE@
384PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
385PACKAGE_NAME = @PACKAGE_NAME@
386PACKAGE_STRING = @PACKAGE_STRING@
387PACKAGE_TARNAME = @PACKAGE_TARNAME@
388PACKAGE_URL = @PACKAGE_URL@
389PACKAGE_VERSION = @PACKAGE_VERSION@
390PATH_SEPARATOR = @PATH_SEPARATOR@
391PKG_CONFIG = @PKG_CONFIG@
392PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
393PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
394RANLIB = @RANLIB@
395SED = @SED@
396SET_MAKE = @SET_MAKE@
397SHELL = @SHELL@
398STRIP = @STRIP@
399VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
400VALGRIND_LIBS = @VALGRIND_LIBS@
401VERSION = @VERSION@
402VMAJ = @VMAJ@
403abs_builddir = @abs_builddir@
404abs_srcdir = @abs_srcdir@
405abs_top_builddir = @abs_top_builddir@
406abs_top_srcdir = @abs_top_srcdir@
407ac_ct_CC = @ac_ct_CC@
408ac_ct_CXX = @ac_ct_CXX@
409ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
410am__include = @am__include@
411am__leading_dot = @am__leading_dot@
412am__quote = @am__quote@
413am__tar = @am__tar@
414am__untar = @am__untar@
415bindir = @bindir@
416build = @build@
417build_alias = @build_alias@
418build_cpu = @build_cpu@
419build_os = @build_os@
420build_vendor = @build_vendor@
421builddir = @builddir@
422datadir = @datadir@
423datarootdir = @datarootdir@
424dlopen_libs = @dlopen_libs@
425docdir = @docdir@
426dvidir = @dvidir@
427efl_doxygen = @efl_doxygen@
428efl_have_doxygen = @efl_have_doxygen@
429exec_prefix = @exec_prefix@
430have_lcov = @have_lcov@
431host = @host@
432host_alias = @host_alias@
433host_cpu = @host_cpu@
434host_os = @host_os@
435host_vendor = @host_vendor@
436htmldir = @htmldir@
437iconv_libs = @iconv_libs@
438includedir = @includedir@
439infodir = @infodir@
440install_sh = @install_sh@
441libdir = @libdir@
442libexecdir = @libexecdir@
443localedir = @localedir@
444localstatedir = @localstatedir@
445lt_ECHO = @lt_ECHO@
446lt_enable_auto_import = @lt_enable_auto_import@
447mandir = @mandir@
448mkdir_p = @mkdir_p@
449oldincludedir = @oldincludedir@
450pdfdir = @pdfdir@
451pkgconfig_requires_private = @pkgconfig_requires_private@
452prefix = @prefix@
453program_transform_name = @program_transform_name@
454psdir = @psdir@
455release_info = @release_info@
456requirement_eina = @requirement_eina@
457rt_libs = @rt_libs@
458sbindir = @sbindir@
459sharedstatedir = @sharedstatedir@
460srcdir = @srcdir@
461sysconfdir = @sysconfdir@
462target_alias = @target_alias@
463top_build_prefix = @top_build_prefix@
464top_builddir = @top_builddir@
465top_srcdir = @top_srcdir@
466version_info = @version_info@
467MAINTAINERCLEANFILES = Makefile.in
468AM_CPPFLAGS = -I. -I$(top_srcdir)/src/include \
469 -I$(top_builddir)/src/include $(am__append_2)
470LDADD = \
471 $(top_builddir)/src/lib/libeina.la
472
473SRCS = \
474 eina_accessor_01.c \
475 eina_array_01.c \
476 eina_array_02.c \
477 eina_error_01.c \
478 eina_file_01.c \
479 eina_hash_01.c \
480 eina_hash_02.c \
481 eina_hash_03.c \
482 eina_hash_04.c \
483 eina_hash_05.c \
484 eina_hash_06.c \
485 eina_hash_07.c \
486 eina_hash_08.c \
487 eina_iterator_01.c \
488 eina_list_01.c \
489 eina_list_02.c \
490 eina_list_03.c \
491 eina_list_04.c \
492 eina_log_01.c \
493 eina_log_02.c \
494 eina_log_03.c \
495 eina_inlist_01.c \
496 eina_inlist_02.c \
497 eina_inlist_03.c \
498 eina_str_01.c \
499 eina_strbuf_01.c \
500 eina_tiler_01.c
501
502@EFL_INSTALL_EXAMPLES_TRUE@filesdir = $(datadir)/$(PACKAGE)/examples
503@EFL_INSTALL_EXAMPLES_TRUE@files_DATA = $(SRCS)
504@BUILD_TILER_EXAMPLE_TRUE@@EFL_BUILD_EXAMPLES_TRUE@eina_tiler_01_LDADD = $(top_builddir)/src/lib/libeina.la @ECORE_EVAS_LIBS@
505all: all-am
506
507.SUFFIXES:
508.SUFFIXES: .c .lo .o .obj
509$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
510 @for dep in $?; do \
511 case '$(am__configure_deps)' in \
512 *$$dep*) \
513 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
514 && { if test -f $@; then exit 0; else break; fi; }; \
515 exit 1;; \
516 esac; \
517 done; \
518 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
519 $(am__cd) $(top_srcdir) && \
520 $(AUTOMAKE) --gnu src/examples/Makefile
521.PRECIOUS: Makefile
522Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
523 @case '$?' in \
524 *config.status*) \
525 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
526 *) \
527 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
528 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
529 esac;
530
531$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
532 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
533
534$(top_srcdir)/configure: $(am__configure_deps)
535 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
536$(ACLOCAL_M4): $(am__aclocal_m4_deps)
537 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
538$(am__aclocal_m4_deps):
539install-pkglibPROGRAMS: $(pkglib_PROGRAMS)
540 @$(NORMAL_INSTALL)
541 test -z "$(pkglibdir)" || $(MKDIR_P) "$(DESTDIR)$(pkglibdir)"
542 @list='$(pkglib_PROGRAMS)'; test -n "$(pkglibdir)" || list=; \
543 for p in $$list; do echo "$$p $$p"; done | \
544 sed 's/$(EXEEXT)$$//' | \
545 while read p p1; do if test -f $$p || test -f $$p1; \
546 then echo "$$p"; echo "$$p"; else :; fi; \
547 done | \
548 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
549 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
550 sed 'N;N;N;s,\n, ,g' | \
551 $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
552 { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
553 if ($$2 == $$4) files[d] = files[d] " " $$1; \
554 else { print "f", $$3 "/" $$4, $$1; } } \
555 END { for (d in files) print "f", d, files[d] }' | \
556 while read type dir files; do \
557 if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
558 test -z "$$files" || { \
559 echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(pkglibdir)$$dir'"; \
560 $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(pkglibdir)$$dir" || exit $$?; \
561 } \
562 ; done
563
564uninstall-pkglibPROGRAMS:
565 @$(NORMAL_UNINSTALL)
566 @list='$(pkglib_PROGRAMS)'; test -n "$(pkglibdir)" || list=; \
567 files=`for p in $$list; do echo "$$p"; done | \
568 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
569 -e 's/$$/$(EXEEXT)/' `; \
570 test -n "$$list" || exit 0; \
571 echo " ( cd '$(DESTDIR)$(pkglibdir)' && rm -f" $$files ")"; \
572 cd "$(DESTDIR)$(pkglibdir)" && rm -f $$files
573
574clean-pkglibPROGRAMS:
575 @list='$(pkglib_PROGRAMS)'; test -n "$$list" || exit 0; \
576 echo " rm -f" $$list; \
577 rm -f $$list || exit $$?; \
578 test -n "$(EXEEXT)" || exit 0; \
579 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
580 echo " rm -f" $$list; \
581 rm -f $$list
582eina_accessor_01$(EXEEXT): $(eina_accessor_01_OBJECTS) $(eina_accessor_01_DEPENDENCIES)
583 @rm -f eina_accessor_01$(EXEEXT)
584 $(AM_V_CCLD)$(LINK) $(eina_accessor_01_OBJECTS) $(eina_accessor_01_LDADD) $(LIBS)
585eina_array_01$(EXEEXT): $(eina_array_01_OBJECTS) $(eina_array_01_DEPENDENCIES)
586 @rm -f eina_array_01$(EXEEXT)
587 $(AM_V_CCLD)$(LINK) $(eina_array_01_OBJECTS) $(eina_array_01_LDADD) $(LIBS)
588eina_array_02$(EXEEXT): $(eina_array_02_OBJECTS) $(eina_array_02_DEPENDENCIES)
589 @rm -f eina_array_02$(EXEEXT)
590 $(AM_V_CCLD)$(LINK) $(eina_array_02_OBJECTS) $(eina_array_02_LDADD) $(LIBS)
591eina_error_01$(EXEEXT): $(eina_error_01_OBJECTS) $(eina_error_01_DEPENDENCIES)
592 @rm -f eina_error_01$(EXEEXT)
593 $(AM_V_CCLD)$(LINK) $(eina_error_01_OBJECTS) $(eina_error_01_LDADD) $(LIBS)
594eina_file_01$(EXEEXT): $(eina_file_01_OBJECTS) $(eina_file_01_DEPENDENCIES)
595 @rm -f eina_file_01$(EXEEXT)
596 $(AM_V_CCLD)$(LINK) $(eina_file_01_OBJECTS) $(eina_file_01_LDADD) $(LIBS)
597eina_hash_01$(EXEEXT): $(eina_hash_01_OBJECTS) $(eina_hash_01_DEPENDENCIES)
598 @rm -f eina_hash_01$(EXEEXT)
599 $(AM_V_CCLD)$(LINK) $(eina_hash_01_OBJECTS) $(eina_hash_01_LDADD) $(LIBS)
600eina_hash_02$(EXEEXT): $(eina_hash_02_OBJECTS) $(eina_hash_02_DEPENDENCIES)
601 @rm -f eina_hash_02$(EXEEXT)
602 $(AM_V_CCLD)$(LINK) $(eina_hash_02_OBJECTS) $(eina_hash_02_LDADD) $(LIBS)
603eina_hash_03$(EXEEXT): $(eina_hash_03_OBJECTS) $(eina_hash_03_DEPENDENCIES)
604 @rm -f eina_hash_03$(EXEEXT)
605 $(AM_V_CCLD)$(LINK) $(eina_hash_03_OBJECTS) $(eina_hash_03_LDADD) $(LIBS)
606eina_hash_04$(EXEEXT): $(eina_hash_04_OBJECTS) $(eina_hash_04_DEPENDENCIES)
607 @rm -f eina_hash_04$(EXEEXT)
608 $(AM_V_CCLD)$(LINK) $(eina_hash_04_OBJECTS) $(eina_hash_04_LDADD) $(LIBS)
609eina_hash_05$(EXEEXT): $(eina_hash_05_OBJECTS) $(eina_hash_05_DEPENDENCIES)
610 @rm -f eina_hash_05$(EXEEXT)
611 $(AM_V_CCLD)$(LINK) $(eina_hash_05_OBJECTS) $(eina_hash_05_LDADD) $(LIBS)
612eina_hash_06$(EXEEXT): $(eina_hash_06_OBJECTS) $(eina_hash_06_DEPENDENCIES)
613 @rm -f eina_hash_06$(EXEEXT)
614 $(AM_V_CCLD)$(LINK) $(eina_hash_06_OBJECTS) $(eina_hash_06_LDADD) $(LIBS)
615eina_hash_07$(EXEEXT): $(eina_hash_07_OBJECTS) $(eina_hash_07_DEPENDENCIES)
616 @rm -f eina_hash_07$(EXEEXT)
617 $(AM_V_CCLD)$(LINK) $(eina_hash_07_OBJECTS) $(eina_hash_07_LDADD) $(LIBS)
618eina_hash_08$(EXEEXT): $(eina_hash_08_OBJECTS) $(eina_hash_08_DEPENDENCIES)
619 @rm -f eina_hash_08$(EXEEXT)
620 $(AM_V_CCLD)$(LINK) $(eina_hash_08_OBJECTS) $(eina_hash_08_LDADD) $(LIBS)
621eina_inlist_01$(EXEEXT): $(eina_inlist_01_OBJECTS) $(eina_inlist_01_DEPENDENCIES)
622 @rm -f eina_inlist_01$(EXEEXT)
623 $(AM_V_CCLD)$(LINK) $(eina_inlist_01_OBJECTS) $(eina_inlist_01_LDADD) $(LIBS)
624eina_inlist_02$(EXEEXT): $(eina_inlist_02_OBJECTS) $(eina_inlist_02_DEPENDENCIES)
625 @rm -f eina_inlist_02$(EXEEXT)
626 $(AM_V_CCLD)$(LINK) $(eina_inlist_02_OBJECTS) $(eina_inlist_02_LDADD) $(LIBS)
627eina_inlist_03$(EXEEXT): $(eina_inlist_03_OBJECTS) $(eina_inlist_03_DEPENDENCIES)
628 @rm -f eina_inlist_03$(EXEEXT)
629 $(AM_V_CCLD)$(LINK) $(eina_inlist_03_OBJECTS) $(eina_inlist_03_LDADD) $(LIBS)
630eina_iterator_01$(EXEEXT): $(eina_iterator_01_OBJECTS) $(eina_iterator_01_DEPENDENCIES)
631 @rm -f eina_iterator_01$(EXEEXT)
632 $(AM_V_CCLD)$(LINK) $(eina_iterator_01_OBJECTS) $(eina_iterator_01_LDADD) $(LIBS)
633eina_list_01$(EXEEXT): $(eina_list_01_OBJECTS) $(eina_list_01_DEPENDENCIES)
634 @rm -f eina_list_01$(EXEEXT)
635 $(AM_V_CCLD)$(LINK) $(eina_list_01_OBJECTS) $(eina_list_01_LDADD) $(LIBS)
636eina_list_02$(EXEEXT): $(eina_list_02_OBJECTS) $(eina_list_02_DEPENDENCIES)
637 @rm -f eina_list_02$(EXEEXT)
638 $(AM_V_CCLD)$(LINK) $(eina_list_02_OBJECTS) $(eina_list_02_LDADD) $(LIBS)
639eina_list_03$(EXEEXT): $(eina_list_03_OBJECTS) $(eina_list_03_DEPENDENCIES)
640 @rm -f eina_list_03$(EXEEXT)
641 $(AM_V_CCLD)$(LINK) $(eina_list_03_OBJECTS) $(eina_list_03_LDADD) $(LIBS)
642eina_list_04$(EXEEXT): $(eina_list_04_OBJECTS) $(eina_list_04_DEPENDENCIES)
643 @rm -f eina_list_04$(EXEEXT)
644 $(AM_V_CCLD)$(LINK) $(eina_list_04_OBJECTS) $(eina_list_04_LDADD) $(LIBS)
645eina_log_01$(EXEEXT): $(eina_log_01_OBJECTS) $(eina_log_01_DEPENDENCIES)
646 @rm -f eina_log_01$(EXEEXT)
647 $(AM_V_CCLD)$(LINK) $(eina_log_01_OBJECTS) $(eina_log_01_LDADD) $(LIBS)
648eina_log_02$(EXEEXT): $(eina_log_02_OBJECTS) $(eina_log_02_DEPENDENCIES)
649 @rm -f eina_log_02$(EXEEXT)
650 $(AM_V_CCLD)$(LINK) $(eina_log_02_OBJECTS) $(eina_log_02_LDADD) $(LIBS)
651eina_log_03$(EXEEXT): $(eina_log_03_OBJECTS) $(eina_log_03_DEPENDENCIES)
652 @rm -f eina_log_03$(EXEEXT)
653 $(AM_V_CCLD)$(LINK) $(eina_log_03_OBJECTS) $(eina_log_03_LDADD) $(LIBS)
654eina_str_01$(EXEEXT): $(eina_str_01_OBJECTS) $(eina_str_01_DEPENDENCIES)
655 @rm -f eina_str_01$(EXEEXT)
656 $(AM_V_CCLD)$(LINK) $(eina_str_01_OBJECTS) $(eina_str_01_LDADD) $(LIBS)
657eina_strbuf_01$(EXEEXT): $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_DEPENDENCIES)
658 @rm -f eina_strbuf_01$(EXEEXT)
659 $(AM_V_CCLD)$(LINK) $(eina_strbuf_01_OBJECTS) $(eina_strbuf_01_LDADD) $(LIBS)
660eina_tiler_01$(EXEEXT): $(eina_tiler_01_OBJECTS) $(eina_tiler_01_DEPENDENCIES)
661 @rm -f eina_tiler_01$(EXEEXT)
662 $(AM_V_CCLD)$(LINK) $(eina_tiler_01_OBJECTS) $(eina_tiler_01_LDADD) $(LIBS)
663
664mostlyclean-compile:
665 -rm -f *.$(OBJEXT)
666
667distclean-compile:
668 -rm -f *.tab.c
669
670@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_accessor_01.Po@am__quote@
671@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_array_01.Po@am__quote@
672@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_array_02.Po@am__quote@
673@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_error_01.Po@am__quote@
674@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_file_01.Po@am__quote@
675@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_01.Po@am__quote@
676@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_02.Po@am__quote@
677@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_03.Po@am__quote@
678@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_04.Po@am__quote@
679@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_05.Po@am__quote@
680@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_06.Po@am__quote@
681@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_07.Po@am__quote@
682@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_hash_08.Po@am__quote@
683@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_01.Po@am__quote@
684@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_02.Po@am__quote@
685@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_inlist_03.Po@am__quote@
686@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_iterator_01.Po@am__quote@
687@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_01.Po@am__quote@
688@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_02.Po@am__quote@
689@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_03.Po@am__quote@
690@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_list_04.Po@am__quote@
691@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_01.Po@am__quote@
692@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_02.Po@am__quote@
693@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_log_03.Po@am__quote@
694@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_str_01.Po@am__quote@
695@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_strbuf_01.Po@am__quote@
696@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_tiler_01.Po@am__quote@
697
698.c.o:
699@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
700@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
701@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
702@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
703@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
704@am__fastdepCC_FALSE@ $(COMPILE) -c $<
705
706.c.obj:
707@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
708@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
709@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
710@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
711@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
712@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
713
714.c.lo:
715@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
716@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
717@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
718@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
719@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
720@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
721
722mostlyclean-libtool:
723 -rm -f *.lo
724
725clean-libtool:
726 -rm -rf .libs _libs
727install-filesDATA: $(files_DATA)
728 @$(NORMAL_INSTALL)
729 test -z "$(filesdir)" || $(MKDIR_P) "$(DESTDIR)$(filesdir)"
730 @list='$(files_DATA)'; test -n "$(filesdir)" || list=; \
731 for p in $$list; do \
732 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
733 echo "$$d$$p"; \
734 done | $(am__base_list) | \
735 while read files; do \
736 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(filesdir)'"; \
737 $(INSTALL_DATA) $$files "$(DESTDIR)$(filesdir)" || exit $$?; \
738 done
739
740uninstall-filesDATA:
741 @$(NORMAL_UNINSTALL)
742 @list='$(files_DATA)'; test -n "$(filesdir)" || list=; \
743 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
744 test -n "$$files" || exit 0; \
745 echo " ( cd '$(DESTDIR)$(filesdir)' && rm -f" $$files ")"; \
746 cd "$(DESTDIR)$(filesdir)" && rm -f $$files
747
748ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
749 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
750 unique=`for i in $$list; do \
751 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
752 done | \
753 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
754 END { if (nonempty) { for (i in files) print i; }; }'`; \
755 mkid -fID $$unique
756tags: TAGS
757
758TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
759 $(TAGS_FILES) $(LISP)
760 set x; \
761 here=`pwd`; \
762 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
763 unique=`for i in $$list; do \
764 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
765 done | \
766 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
767 END { if (nonempty) { for (i in files) print i; }; }'`; \
768 shift; \
769 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
770 test -n "$$unique" || unique=$$empty_fix; \
771 if test $$# -gt 0; then \
772 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
773 "$$@" $$unique; \
774 else \
775 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
776 $$unique; \
777 fi; \
778 fi
779ctags: CTAGS
780CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
781 $(TAGS_FILES) $(LISP)
782 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
783 unique=`for i in $$list; do \
784 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
785 done | \
786 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
787 END { if (nonempty) { for (i in files) print i; }; }'`; \
788 test -z "$(CTAGS_ARGS)$$unique" \
789 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
790 $$unique
791
792GTAGS:
793 here=`$(am__cd) $(top_builddir) && pwd` \
794 && $(am__cd) $(top_srcdir) \
795 && gtags -i $(GTAGS_ARGS) "$$here"
796
797distclean-tags:
798 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
799
800distdir: $(DISTFILES)
801 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
802 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
803 list='$(DISTFILES)'; \
804 dist_files=`for file in $$list; do echo $$file; done | \
805 sed -e "s|^$$srcdirstrip/||;t" \
806 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
807 case $$dist_files in \
808 */*) $(MKDIR_P) `echo "$$dist_files" | \
809 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
810 sort -u` ;; \
811 esac; \
812 for file in $$dist_files; do \
813 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
814 if test -d $$d/$$file; then \
815 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
816 if test -d "$(distdir)/$$file"; then \
817 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
818 fi; \
819 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
820 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
821 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
822 fi; \
823 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
824 else \
825 test -f "$(distdir)/$$file" \
826 || cp -p $$d/$$file "$(distdir)/$$file" \
827 || exit 1; \
828 fi; \
829 done
830check-am: all-am
831check: check-am
832all-am: Makefile $(PROGRAMS) $(DATA)
833installdirs:
834 for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(filesdir)"; do \
835 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
836 done
837install: install-am
838install-exec: install-exec-am
839install-data: install-data-am
840uninstall: uninstall-am
841
842install-am: all-am
843 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
844
845installcheck: installcheck-am
846install-strip:
847 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
848 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
849 `test -z '$(STRIP)' || \
850 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
851mostlyclean-generic:
852
853clean-generic:
854
855distclean-generic:
856 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
857 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
858
859maintainer-clean-generic:
860 @echo "This command is intended for maintainers to use"
861 @echo "it deletes files that may require special tools to rebuild."
862 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
863clean: clean-am
864
865clean-am: clean-generic clean-libtool clean-pkglibPROGRAMS \
866 mostlyclean-am
867
868distclean: distclean-am
869 -rm -rf ./$(DEPDIR)
870 -rm -f Makefile
871distclean-am: clean-am distclean-compile distclean-generic \
872 distclean-tags
873
874dvi: dvi-am
875
876dvi-am:
877
878html: html-am
879
880html-am:
881
882info: info-am
883
884info-am:
885
886install-data-am: install-filesDATA
887
888install-dvi: install-dvi-am
889
890install-dvi-am:
891
892install-exec-am: install-pkglibPROGRAMS
893
894install-html: install-html-am
895
896install-html-am:
897
898install-info: install-info-am
899
900install-info-am:
901
902install-man:
903
904install-pdf: install-pdf-am
905
906install-pdf-am:
907
908install-ps: install-ps-am
909
910install-ps-am:
911
912installcheck-am:
913
914maintainer-clean: maintainer-clean-am
915 -rm -rf ./$(DEPDIR)
916 -rm -f Makefile
917maintainer-clean-am: distclean-am maintainer-clean-generic
918
919mostlyclean: mostlyclean-am
920
921mostlyclean-am: mostlyclean-compile mostlyclean-generic \
922 mostlyclean-libtool
923
924pdf: pdf-am
925
926pdf-am:
927
928ps: ps-am
929
930ps-am:
931
932uninstall-am: uninstall-filesDATA uninstall-pkglibPROGRAMS
933
934.MAKE: install-am install-strip
935
936.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
937 clean-libtool clean-pkglibPROGRAMS ctags distclean \
938 distclean-compile distclean-generic distclean-libtool \
939 distclean-tags distdir dvi dvi-am html html-am info info-am \
940 install install-am install-data install-data-am install-dvi \
941 install-dvi-am install-exec install-exec-am install-filesDATA \
942 install-html install-html-am install-info install-info-am \
943 install-man install-pdf install-pdf-am install-pkglibPROGRAMS \
944 install-ps install-ps-am install-strip installcheck \
945 installcheck-am installdirs maintainer-clean \
946 maintainer-clean-generic mostlyclean mostlyclean-compile \
947 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
948 tags uninstall uninstall-am uninstall-filesDATA \
949 uninstall-pkglibPROGRAMS
950
951
952# Tell versions [3.59,3.63) of GNU make to not export all variables.
953# Otherwise a system limit (for SysV at least) may be exceeded.
954.NOEXPORT:
diff --git a/libraries/eina/src/examples/eina_accessor_01.c b/libraries/eina/src/examples/eina_accessor_01.c
new file mode 100644
index 0000000..c48fdc6
--- /dev/null
+++ b/libraries/eina/src/examples/eina_accessor_01.c
@@ -0,0 +1,55 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_accessor_01.c -o eina_accessor_01
3
4#include <stdio.h>
5
6#include <Eina.h>
7
8int
9main(int argc, char **argv)
10{
11 const char *strings[] = {
12 "even", "odd", "even", "odd", "even", "odd", "even", "odd", "even", "odd"
13 };
14 const char *more_strings[] = {
15 "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
16 };
17 Eina_Array *array;
18 Eina_List *list = NULL;
19 Eina_Accessor *acc;
20 unsigned short int i;
21 void *data;
22
23 eina_init();
24
25 array = eina_array_new(10);
26
27 for (i = 0; i < 10; i++)
28 {
29 eina_array_push(array, strings[i]);
30 list = eina_list_append(list, more_strings[i]);
31 }
32
33 acc = eina_array_accessor_new(array);
34 for(i = 1; i < 10; i += 2)
35 {
36 eina_accessor_data_get(acc, i, &data);
37 printf("%s\n", (const char *)data);
38 }
39 eina_accessor_free(acc);
40 eina_array_free(array);
41
42 acc = eina_list_accessor_new(list);
43 for(i = 1; i < 10; i += 2)
44 {
45 eina_accessor_data_get(acc, i, &data);
46 printf("%s\n", (const char *)data);
47 }
48
49 eina_list_free(eina_accessor_container_get(acc));
50 eina_accessor_free(acc);
51
52 eina_shutdown();
53
54 return 0;
55}
diff --git a/libraries/eina/src/examples/eina_array_01.c b/libraries/eina/src/examples/eina_array_01.c
new file mode 100644
index 0000000..25e0944
--- /dev/null
+++ b/libraries/eina/src/examples/eina_array_01.c
@@ -0,0 +1,51 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_array_01.c -o eina_array_01
3
4#include <stdio.h>
5#include <string.h>
6
7#include <Eina.h>
8
9static Eina_Bool
10_print(const void *container, void *data, void *fdata)
11{
12 printf("%s\n", data);
13 return EINA_TRUE;
14}
15
16int
17main(int argc, char **argv)
18{
19 const char* strings[] = {
20 "helo", "hera", "starbuck", "kat", "boomer",
21 "hotdog", "longshot", "jammer", "crashdown", "hardball",
22 "duck", "racetrack", "apolo", "husker", "freaker",
23 "skulls", "bulldog", "flat top", "hammerhead", "gonzo"
24 };
25 Eina_Array *array;
26 Eina_Array_Iterator iterator;
27 char *item;
28 unsigned int i;
29
30 eina_init();
31
32 array = eina_array_new(10);
33 eina_array_step_set(array, sizeof(*array), 20);
34
35 for (i = 0; i < 20; i++)
36 eina_array_push(array, strdup(strings[i]));
37
38 printf("array count: %d\n", eina_array_count_get(array));
39 eina_array_foreach(array, _print, NULL);
40
41 printf("Top gun: %s\n", (char*)eina_array_data_get(array, 2));
42
43 while (eina_array_count_get(array))
44 free(eina_array_pop(array));
45
46 eina_array_free(array);
47
48 eina_shutdown();
49
50 return 0;
51}
diff --git a/libraries/eina/src/examples/eina_array_02.c b/libraries/eina/src/examples/eina_array_02.c
new file mode 100644
index 0000000..e897321
--- /dev/null
+++ b/libraries/eina/src/examples/eina_array_02.c
@@ -0,0 +1,57 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_array_02.c -o eina_array_02
3
4#include <stdio.h>
5#include <string.h>
6
7#include <Eina.h>
8
9Eina_Bool keep(void *data, void *gdata)
10{
11 if (strlen((const char*)data) <= 5)
12 return EINA_TRUE;
13 return EINA_FALSE;
14}
15
16int
17main(int argc, char **argv)
18{
19 const char* strs[] = {
20 "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
21 "ten", "eleven", "twelve", "thirteen", "fourtenn", "fifteen", "sixteen",
22 "seventeen", "eighteen", "nineteen", "twenty"
23 };
24 const char* strings[] = {
25 "helo", "hera", "starbuck", "kat", "boomer",
26 "hotdog", "longshot", "jammer", "crashdown", "hardball",
27 "duck", "racetrack", "apolo", "husker", "freaker",
28 "skulls", "bulldog", "flat top", "hammerhead", "gonzo"
29 };
30 Eina_Array *array;
31 Eina_Array_Iterator iterator;
32 const char *item;
33 unsigned int i;
34
35 eina_init();
36
37 array = eina_array_new(10);
38
39 for (i = 0; i < 20; i++)
40 eina_array_push(array, strs[i]);
41
42 eina_array_clean(array);
43 for (i = 0; i < 20; i++)
44 eina_array_push(array, strings[i]);
45
46 eina_array_data_set(array, 17, "flattop");
47
48 eina_array_remove(array, keep, NULL);
49 EINA_ARRAY_ITER_NEXT(array, i, item, iterator)
50 printf("item #%d: %s\n", i, item);
51
52 eina_array_free(array);
53
54 eina_shutdown();
55
56 return 0;
57}
diff --git a/libraries/eina/src/examples/eina_error_01.c b/libraries/eina/src/examples/eina_error_01.c
new file mode 100644
index 0000000..90e845d
--- /dev/null
+++ b/libraries/eina/src/examples/eina_error_01.c
@@ -0,0 +1,80 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_error_01.c -o eina_error_01
3
4#include <stdlib.h>
5#include <stdio.h>
6
7#include <eina_error.h>
8
9Eina_Error MY_ERROR_NEGATIVE;
10Eina_Error MY_ERROR_NULL;
11
12void *data_new()
13{
14 eina_error_set(0);
15
16 eina_error_set(MY_ERROR_NULL);
17 return NULL;
18}
19
20int test(int n)
21{
22 eina_error_set(0);
23
24 if (n < 0)
25 {
26 eina_error_set(MY_ERROR_NEGATIVE);
27 return 0;
28 }
29
30 return 1;
31}
32
33int main(void)
34{
35 void *data;
36
37 if (!eina_init())
38 {
39 printf ("Error during the initialization of eina_error module\n");
40 return EXIT_FAILURE;
41 }
42
43 MY_ERROR_NEGATIVE = eina_error_msg_static_register("Negative number");
44 MY_ERROR_NULL = eina_error_msg_static_register("NULL pointer");
45
46 data = data_new();
47 if (!data)
48 {
49 Eina_Error err;
50
51 err = eina_error_get();
52 if (err)
53 printf("Error during memory allocation: %s\n",
54 eina_error_msg_get(err));
55 }
56
57 if (!test(0))
58 {
59 Eina_Error err;
60
61 err = eina_error_get();
62 if (err)
63 printf("Error during test function: %s\n",
64 eina_error_msg_get(err));
65 }
66
67 if (!test(-1))
68 {
69 Eina_Error err;
70
71 err = eina_error_get();
72 if (err)
73 printf("Error during test function: %s\n",
74 eina_error_msg_get(err));
75 }
76
77 eina_shutdown();
78
79 return EXIT_SUCCESS;
80} \ No newline at end of file
diff --git a/libraries/eina/src/examples/eina_file_01.c b/libraries/eina/src/examples/eina_file_01.c
new file mode 100644
index 0000000..6490b62
--- /dev/null
+++ b/libraries/eina/src/examples/eina_file_01.c
@@ -0,0 +1,45 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_file_01.c -o eina_file_01
3
4#include <stdio.h>
5#include <Eina.h>
6
7static void
8_print_cb(const char *name, const char *path, void *data)
9{
10 printf("file %s in %s\n", name, path);
11}
12
13int
14main(int argc, char **argv)
15{
16 Eina_Iterator *it;
17 const char *f_name;
18 const Eina_File_Direct_Info *f_info;
19
20 eina_init();
21
22 eina_file_dir_list("/home/", EINA_FALSE, _print_cb, NULL);
23
24 it = eina_file_ls("/home/");
25 EINA_ITERATOR_FOREACH(it, f_name)
26 {
27 printf("%s\n", f_name);
28 eina_stringshare_del(f_name);
29 }
30 eina_iterator_free(it);
31
32 it = eina_file_stat_ls("/home/");
33 EINA_ITERATOR_FOREACH(it, f_info)
34 printf("%s if of type %d\n", f_info->path, f_info->type);
35 eina_iterator_free(it);
36
37 it = eina_file_direct_ls("/home/");
38 EINA_ITERATOR_FOREACH(it, f_info)
39 printf("%s if of type %d\n", f_info->path, f_info->type);
40 eina_iterator_free(it);
41
42 eina_shutdown();
43
44 return 0;
45}
diff --git a/libraries/eina/src/examples/eina_hash_01.c b/libraries/eina/src/examples/eina_hash_01.c
new file mode 100644
index 0000000..549ca80
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_01.c
@@ -0,0 +1,195 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 const char *name; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
24 { "Ludwig van Beethoven", "+12 34 567-89101" },
25 { "Richard Georg Strauss", "+23 45 678-91012" },
26 { "Heitor Villa-Lobos", "+34 56 789-10123" },
27 { NULL, NULL }
28}; // _start_entries
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static Eina_Bool
37_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
38 void *data, void *fdata)
39{
40 const char *name = key;
41 const char *number = data;
42 printf("%s: %s\n", name, number);
43
44 // Return EINA_FALSE to stop this callback from being called
45 return EINA_TRUE;
46}
47
48int
49main(int argc, const char *argv[])
50{
51 Eina_Hash *phone_book = NULL;
52 int i;
53 const char *entry_name = "Heitor Villa-Lobos";
54 char *phone = NULL;
55 Eina_Bool r;
56 Eina_Iterator *it;
57 void *data;
58
59 eina_init();
60
61 phone_book = eina_hash_string_superfast_new(_phone_entry_free_cb);
62
63 // Add initial entries to our hash
64 for (i = 0; _start_entries[i].name != NULL; i++)
65 {
66 eina_hash_add(phone_book, _start_entries[i].name,
67 strdup(_start_entries[i].number));
68 }
69
70 // Look for a specific entry and get its phone number
71 phone = eina_hash_find(phone_book, entry_name);
72 if (phone)
73 {
74 printf("Printing entry.\n");
75 printf("Name: %s\n", entry_name);
76 printf("Number: %s\n\n", phone);
77 }
78
79 // Delete this entry
80 r = eina_hash_del(phone_book, entry_name, NULL);
81 printf("Hash entry successfully deleted? %d\n\n", r);
82
83 // Modify the pointer data of an entry and free the old one
84 phone = eina_hash_modify(phone_book, "Richard Georg Strauss",
85 strdup("+23 45 111-11111"));
86 free(phone);
87
88 // Modify or add an entry to the hash with eina_hash_set
89 // Let's first add a new entry
90 eina_error_set(0);
91 phone = eina_hash_set(phone_book, "Raul Seixas",
92 strdup("+55 01 234-56789"));
93 if (!phone)
94 {
95 Eina_Error err = eina_error_get();
96 if (!err)
97 {
98 printf("No previous phone found for Raul Seixas. ");
99 printf("Creating new entry.\n");
100 }
101 else
102 printf("Error when setting phone for Raul Seixas\n");
103 }
104 else
105 {
106 printf("Old phone for Raul Seixas was %s\n", phone);
107 free(phone);
108 }
109
110 printf("\n");
111
112 // Now change the phone number
113 eina_error_set(0);
114 phone = eina_hash_set(phone_book, "Raul Seixas",
115 strdup("+55 02 222-22222"));
116 if (phone)
117 {
118 printf("Changing phone for Raul Seixas to +55 02 222-22222. ");
119 printf("Old phone was %s\n", phone);
120 free(phone);
121 }
122 else
123 {
124 Eina_Error err = eina_error_get();
125 if (err)
126 printf("Error when changing phone for Raul Seixas\n");
127 else
128 {
129 printf("No previous phone found for Raul Seixas. ");
130 printf("Creating new entry.\n");
131 }
132 }
133
134 // There are many ways to iterate over our Phone book.
135 // First, iterate showing the names and associated numbers.
136 printf("List of phones:\n");
137 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
138 printf("\n");
139
140 // Now iterate using an iterator
141 printf("List of phones:\n");
142 it = eina_hash_iterator_tuple_new(phone_book);
143 while (eina_iterator_next(it, &data))
144 {
145 Eina_Hash_Tuple *t = data;
146 const char *name = t->key;
147 const char *number = t->data;
148 printf("%s: %s\n", name, number);
149 }
150 eina_iterator_free(it); // Always free the iterator after its use
151 printf("\n");
152
153 // Just iterate over the keys (names)
154 printf("List of names in the phone book:\n");
155 it = eina_hash_iterator_key_new(phone_book);
156 while (eina_iterator_next(it, &data))
157 {
158 const char *name = data;
159 printf("%s\n", name);
160 }
161 eina_iterator_free(it);
162 printf("\n");
163
164 // Just iterate over the data (numbers)
165 printf("List of numbers in the phone book:\n");
166 it = eina_hash_iterator_data_new(phone_book);
167 while (eina_iterator_next(it, &data))
168 {
169 const char *number = data;
170 printf("%s\n", number);
171 }
172 eina_iterator_free(it);
173 printf("\n");
174
175 // Check how many items are in the phone book
176 printf("There are %d items in the hash.\n\n",
177 eina_hash_population(phone_book));
178
179 // Change the name (key) on an entry
180 eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca");
181 printf("List of phones after change:\n");
182 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
183 printf("\n");
184
185 // Empty the phone book, but don't destroy it
186 eina_hash_free_buckets(phone_book);
187 printf("There are %d items in the hash.\n\n",
188 eina_hash_population(phone_book));
189
190 // Phone book could still be used, but we are freeing it since we are
191 // done for now
192 eina_hash_free(phone_book);
193
194 eina_shutdown();
195}
diff --git a/libraries/eina/src/examples/eina_hash_02.c b/libraries/eina/src/examples/eina_hash_02.c
new file mode 100644
index 0000000..d43d7a3
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_02.c
@@ -0,0 +1,144 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - Two more types of hash
7 *
8 * This example demonstrate two other types of hash in action - using
9 * eina_hash_stringshared_new and eina_hash_new.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with string
12 * keys, exactly the same as the other example.
13 */
14
15struct _Phone_Entry {
16 const char *name; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
24 { "Ludwig van Beethoven", "+12 34 567-89101" },
25 { "Richard Georg Strauss", "+23 45 678-91012" },
26 { "Heitor Villa-Lobos", "+34 56 789-10123" },
27 { NULL, NULL }
28};
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static void
37_phone_book_stringshared_free_cb(void *data)
38{
39 Phone_Entry *e = data;
40 eina_stringshare_del(e->name);
41 eina_stringshare_del(e->number);
42 free(e);
43}
44
45static Eina_Bool
46_phone_book_stringshared_foreach_cb(const Eina_Hash *phone_book,
47 const void *key, void *data, void *fdata)
48{
49 Phone_Entry *e = data;
50 const char *name = e->name; // e->name == key
51 const char *number = e->number;
52 printf("%s: %s\n", name, number);
53
54 return EINA_TRUE;
55}
56
57static void
58example_hash_stringshared(void)
59{
60 Eina_Hash *phone_book = NULL;
61 int i;
62
63 // Create the hash as before
64 phone_book = eina_hash_stringshared_new(_phone_book_stringshared_free_cb);
65
66 // Add initial entries to our hash, using direct_add
67 for (i = 0; _start_entries[i].name != NULL; i++)
68 {
69 Phone_Entry *e = malloc(sizeof(Phone_Entry));
70 e->name = eina_stringshare_add(_start_entries[i].name);
71 e->number = eina_stringshare_add(_start_entries[i].number);
72 // Since we are storing the key (name) in our struct, we can use
73 // eina_hash_direct_add. It could be used in the previous example
74 // too, since each key is already stored in the _start_entries
75 // static array, but we started it with the default add function.
76 eina_hash_direct_add(phone_book, e->name, e);
77 }
78
79 // Iterate over the elements
80 printf("List of phones:\n");
81 eina_hash_foreach(phone_book, _phone_book_stringshared_foreach_cb, NULL);
82 printf("\n");
83
84 eina_hash_free(phone_book);
85}
86
87static unsigned int
88_phone_book_string_key_length(const char *key)
89{
90 if (!key)
91 return 0;
92
93 return (int)strlen(key) + 1;
94}
95
96static int
97_phone_book_string_key_cmp(const char *key1, int key1_length,
98 const char *key2, int key2_length)
99{
100 return strcmp(key1, key2);
101}
102
103static void
104example_hash_big(void)
105{
106 Eina_Hash *phone_book = NULL;
107 int i;
108 const char *phone;
109
110 // Create the same hash as used in eina_hash_01.c, but
111 // use 1024 (2 ^ 10) buckets.
112 phone_book = eina_hash_new(EINA_KEY_LENGTH(_phone_book_string_key_length),
113 EINA_KEY_CMP(_phone_book_string_key_cmp),
114 EINA_KEY_HASH(eina_hash_superfast),
115 _phone_entry_free_cb,
116 10);
117 for (i = 0; _start_entries[i].name != NULL; i++)
118 {
119 eina_hash_add(phone_book, _start_entries[i].name,
120 strdup(_start_entries[i].number));
121 }
122
123 // Look for a specific entry and get its phone number
124 phone = eina_hash_find(phone_book, "Heitor Villa-Lobos");
125 if (phone)
126 {
127 printf("Printing entry.\n");
128 printf("Name: Heitor Villa-Lobos\n");
129 printf("Number: %s\n\n", phone);
130 }
131
132 eina_hash_free(phone_book);
133}
134
135int
136main(int argc, const char *argv[])
137{
138 eina_init();
139
140 example_hash_stringshared();
141 example_hash_big();
142
143 eina_shutdown();
144}
diff --git a/libraries/eina/src/examples/eina_hash_03.c b/libraries/eina/src/examples/eina_hash_03.c
new file mode 100644
index 0000000..719d0d7
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_03.c
@@ -0,0 +1,195 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 const char *name; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
24 { "Ludwig van Beethoven", "+12 34 567-89101" },
25 { "Richard Georg Strauss", "+23 45 678-91012" },
26 { "Heitor Villa-Lobos", "+34 56 789-10123" },
27 { NULL, NULL }
28}; // _start_entries
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static Eina_Bool
37_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
38 void *data, void *fdata)
39{
40 const char *name = key;
41 const char *number = data;
42 printf("%s: %s\n", name, number);
43
44 // Return EINA_FALSE to stop this callback from being called
45 return EINA_TRUE;
46}
47
48int
49main(int argc, const char *argv[])
50{
51 Eina_Hash *phone_book = NULL;
52 int i;
53 const char *entry_name = "Heitor Villa-Lobos";
54 char *phone = NULL;
55 Eina_Bool r;
56 Eina_Iterator *it;
57 void *data;
58
59 eina_init();
60
61 phone_book = eina_hash_string_small_new(_phone_entry_free_cb);
62
63 // Add initial entries to our hash
64 for (i = 0; _start_entries[i].name != NULL; i++)
65 {
66 eina_hash_add(phone_book, _start_entries[i].name,
67 strdup(_start_entries[i].number));
68 }
69
70 // Look for a specific entry and get its phone number
71 phone = eina_hash_find(phone_book, entry_name);
72 if (phone)
73 {
74 printf("Printing entry.\n");
75 printf("Name: %s\n", entry_name);
76 printf("Number: %s\n\n", phone);
77 }
78
79 // Delete this entry
80 r = eina_hash_del(phone_book, entry_name, NULL);
81 printf("Hash entry successfully deleted? %d\n\n", r);
82
83 // Modify the pointer data of an entry and free the old one
84 phone = eina_hash_modify(phone_book, "Richard Georg Strauss",
85 strdup("+23 45 111-11111"));
86 free(phone);
87
88 // Modify or add an entry to the hash with eina_hash_set
89 // Let's first add a new entry
90 eina_error_set(0);
91 phone = eina_hash_set(phone_book, "Raul Seixas",
92 strdup("+55 01 234-56789"));
93 if (!phone)
94 {
95 Eina_Error err = eina_error_get();
96 if (!err)
97 {
98 printf("No previous phone found for Raul Seixas. ");
99 printf("Creating new entry.\n");
100 }
101 else
102 printf("Error when setting phone for Raul Seixas\n");
103 }
104 else
105 {
106 printf("Old phone for Raul Seixas was %s\n", phone);
107 free(phone);
108 }
109
110 printf("\n");
111
112 // Now change the phone number
113 eina_error_set(0);
114 phone = eina_hash_set(phone_book, "Raul Seixas",
115 strdup("+55 02 222-22222"));
116 if (phone)
117 {
118 printf("Changing phone for Raul Seixas to +55 02 222-22222. ");
119 printf("Old phone was %s\n", phone);
120 free(phone);
121 }
122 else
123 {
124 Eina_Error err = eina_error_get();
125 if (err)
126 printf("Error when changing phone for Raul Seixas\n");
127 else
128 {
129 printf("No previous phone found for Raul Seixas. ");
130 printf("Creating new entry.\n");
131 }
132 }
133
134 // There are many ways to iterate over our Phone book.
135 // First, iterate showing the names and associated numbers.
136 printf("List of phones:\n");
137 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
138 printf("\n");
139
140 // Now iterate using an iterator
141 printf("List of phones:\n");
142 it = eina_hash_iterator_tuple_new(phone_book);
143 while (eina_iterator_next(it, &data))
144 {
145 Eina_Hash_Tuple *t = data;
146 const char *name = t->key;
147 const char *number = t->data;
148 printf("%s: %s\n", name, number);
149 }
150 eina_iterator_free(it); // Always free the iterator after its use
151 printf("\n");
152
153 // Just iterate over the keys (names)
154 printf("List of names in the phone book:\n");
155 it = eina_hash_iterator_key_new(phone_book);
156 while (eina_iterator_next(it, &data))
157 {
158 const char *name = data;
159 printf("%s\n", name);
160 }
161 eina_iterator_free(it);
162 printf("\n");
163
164 // Just iterate over the data (numbers)
165 printf("List of numbers in the phone book:\n");
166 it = eina_hash_iterator_data_new(phone_book);
167 while (eina_iterator_next(it, &data))
168 {
169 const char *number = data;
170 printf("%s\n", number);
171 }
172 eina_iterator_free(it);
173 printf("\n");
174
175 // Check how many items are in the phone book
176 printf("There are %d items in the hash.\n\n",
177 eina_hash_population(phone_book));
178
179 // Change the name (key) on an entry
180 eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca");
181 printf("List of phones after change:\n");
182 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
183 printf("\n");
184
185 // Empty the phone book, but don't destroy it
186 eina_hash_free_buckets(phone_book);
187 printf("There are %d items in the hash.\n\n",
188 eina_hash_population(phone_book));
189
190 // Phone book could still be used, but we are freeing it since we are
191 // done for now
192 eina_hash_free(phone_book);
193
194 eina_shutdown();
195}
diff --git a/libraries/eina/src/examples/eina_hash_04.c b/libraries/eina/src/examples/eina_hash_04.c
new file mode 100644
index 0000000..e900475
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_04.c
@@ -0,0 +1,195 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 const char *name; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
24 { "Ludwig van Beethoven", "+12 34 567-89101" },
25 { "Richard Georg Strauss", "+23 45 678-91012" },
26 { "Heitor Villa-Lobos", "+34 56 789-10123" },
27 { NULL, NULL }
28}; // _start_entries
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static Eina_Bool
37_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
38 void *data, void *fdata)
39{
40 const char *name = key;
41 const char *number = data;
42 printf("%s: %s\n", name, number);
43
44 // Return EINA_FALSE to stop this callback from being called
45 return EINA_TRUE;
46}
47
48int
49main(int argc, const char *argv[])
50{
51 Eina_Hash *phone_book = NULL;
52 int i;
53 const char *entry_name = "Heitor Villa-Lobos";
54 char *phone = NULL;
55 Eina_Bool r;
56 Eina_Iterator *it;
57 void *data;
58
59 eina_init();
60
61 phone_book = eina_hash_string_djb2_new(_phone_entry_free_cb);
62
63 // Add initial entries to our hash
64 for (i = 0; _start_entries[i].name != NULL; i++)
65 {
66 eina_hash_add(phone_book, _start_entries[i].name,
67 strdup(_start_entries[i].number));
68 }
69
70 // Look for a specific entry and get its phone number
71 phone = eina_hash_find(phone_book, entry_name);
72 if (phone)
73 {
74 printf("Printing entry.\n");
75 printf("Name: %s\n", entry_name);
76 printf("Number: %s\n\n", phone);
77 }
78
79 // Delete this entry
80 r = eina_hash_del(phone_book, entry_name, NULL);
81 printf("Hash entry successfully deleted? %d\n\n", r);
82
83 // Modify the pointer data of an entry and free the old one
84 phone = eina_hash_modify(phone_book, "Richard Georg Strauss",
85 strdup("+23 45 111-11111"));
86 free(phone);
87
88 // Modify or add an entry to the hash with eina_hash_set
89 // Let's first add a new entry
90 eina_error_set(0);
91 phone = eina_hash_set(phone_book, "Raul Seixas",
92 strdup("+55 01 234-56789"));
93 if (!phone)
94 {
95 Eina_Error err = eina_error_get();
96 if (!err)
97 {
98 printf("No previous phone found for Raul Seixas. ");
99 printf("Creating new entry.\n");
100 }
101 else
102 printf("Error when setting phone for Raul Seixas\n");
103 }
104 else
105 {
106 printf("Old phone for Raul Seixas was %s\n", phone);
107 free(phone);
108 }
109
110 printf("\n");
111
112 // Now change the phone number
113 eina_error_set(0);
114 phone = eina_hash_set(phone_book, "Raul Seixas",
115 strdup("+55 02 222-22222"));
116 if (phone)
117 {
118 printf("Changing phone for Raul Seixas to +55 02 222-22222. ");
119 printf("Old phone was %s\n", phone);
120 free(phone);
121 }
122 else
123 {
124 Eina_Error err = eina_error_get();
125 if (err)
126 printf("Error when changing phone for Raul Seixas\n");
127 else
128 {
129 printf("No previous phone found for Raul Seixas. ");
130 printf("Creating new entry.\n");
131 }
132 }
133
134 // There are many ways to iterate over our Phone book.
135 // First, iterate showing the names and associated numbers.
136 printf("List of phones:\n");
137 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
138 printf("\n");
139
140 // Now iterate using an iterator
141 printf("List of phones:\n");
142 it = eina_hash_iterator_tuple_new(phone_book);
143 while (eina_iterator_next(it, &data))
144 {
145 Eina_Hash_Tuple *t = data;
146 const char *name = t->key;
147 const char *number = t->data;
148 printf("%s: %s\n", name, number);
149 }
150 eina_iterator_free(it); // Always free the iterator after its use
151 printf("\n");
152
153 // Just iterate over the keys (names)
154 printf("List of names in the phone book:\n");
155 it = eina_hash_iterator_key_new(phone_book);
156 while (eina_iterator_next(it, &data))
157 {
158 const char *name = data;
159 printf("%s\n", name);
160 }
161 eina_iterator_free(it);
162 printf("\n");
163
164 // Just iterate over the data (numbers)
165 printf("List of numbers in the phone book:\n");
166 it = eina_hash_iterator_data_new(phone_book);
167 while (eina_iterator_next(it, &data))
168 {
169 const char *number = data;
170 printf("%s\n", number);
171 }
172 eina_iterator_free(it);
173 printf("\n");
174
175 // Check how many items are in the phone book
176 printf("There are %d items in the hash.\n\n",
177 eina_hash_population(phone_book));
178
179 // Change the name (key) on an entry
180 eina_hash_move(phone_book, "Raul Seixas", "Alceu Valenca");
181 printf("List of phones after change:\n");
182 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
183 printf("\n");
184
185 // Empty the phone book, but don't destroy it
186 eina_hash_free_buckets(phone_book);
187 printf("There are %d items in the hash.\n\n",
188 eina_hash_population(phone_book));
189
190 // Phone book could still be used, but we are freeing it since we are
191 // done for now
192 eina_hash_free(phone_book);
193
194 eina_shutdown();
195}
diff --git a/libraries/eina/src/examples/eina_hash_05.c b/libraries/eina/src/examples/eina_hash_05.c
new file mode 100644
index 0000000..f8dbf78
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_05.c
@@ -0,0 +1,198 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 int32_t id; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { 1, "+01 23 456-78910" },
24 { 2, "+12 34 567-89101" },
25 { 3, "+23 45 678-91012" },
26 { 4, "+34 56 789-10123" },
27 { -1, NULL }
28}; // _start_entries
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static Eina_Bool
37_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
38 void *data, void *fdata)
39{
40 const int32_t *id = key;
41 const char *number = data;
42 printf("%d: %s\n", *id, number);
43
44 // Return EINA_FALSE to stop this callback from being called
45 return EINA_TRUE;
46}
47
48int
49main(int argc, const char *argv[])
50{
51 Eina_Hash *phone_book = NULL;
52 int i;
53 int32_t entry_id = 4;
54 char *phone = NULL;
55 Eina_Bool r;
56 Eina_Iterator *it;
57 void *data;
58
59 eina_init();
60
61 phone_book = eina_hash_int32_new(_phone_entry_free_cb);
62
63 // Add initial entries to our hash
64 for (i = 0; _start_entries[i].id != -1; i++)
65 {
66 eina_hash_add(phone_book, &_start_entries[i].id,
67 strdup(_start_entries[i].number));
68 }
69
70 // Look for a specific entry and get its phone number
71 phone = eina_hash_find(phone_book, &entry_id);
72 if (phone)
73 {
74 printf("Printing entry.\n");
75 printf("Id: %d\n", entry_id);
76 printf("Number: %s\n\n", phone);
77 }
78
79 // Delete this entry
80 r = eina_hash_del(phone_book, &entry_id, NULL);
81 printf("Hash entry successfully deleted? %d\n\n", r);
82
83 // Modify the pointer data of an entry and free the old one
84 int32_t id3 = 3;
85 phone = eina_hash_modify(phone_book, &id3,
86 strdup("+23 45 111-11111"));
87 free(phone);
88
89 // Modify or add an entry to the hash with eina_hash_set
90 // Let's first add a new entry
91 int32_t id5 = 5;
92 eina_error_set(0);
93 phone = eina_hash_set(phone_book, &id5,
94 strdup("+55 01 234-56789"));
95 if (!phone)
96 {
97 Eina_Error err = eina_error_get();
98 if (!err)
99 {
100 printf("No previous phone found for id5. ");
101 printf("Creating new entry.\n");
102 }
103 else
104 printf("Error when setting phone for Raul Seixas\n");
105 }
106 else
107 {
108 printf("Old phone for id5 was %s\n", phone);
109 free(phone);
110 }
111
112 printf("\n");
113
114 // Now change the phone number
115 eina_error_set(0);
116 phone = eina_hash_set(phone_book, &id5,
117 strdup("+55 02 222-22222"));
118 if (phone)
119 {
120 printf("Changing phone for id5 to +55 02 222-22222. ");
121 printf("Old phone was %s\n", phone);
122 free(phone);
123 }
124 else
125 {
126 Eina_Error err = eina_error_get();
127 if (err)
128 printf("Error when changing phone for id5\n");
129 else
130 {
131 printf("No previous phone found for id5. ");
132 printf("Creating new entry.\n");
133 }
134 }
135
136 // There are many ways to iterate over our Phone book.
137 // First, iterate showing the names and associated numbers.
138 printf("List of phones:\n");
139 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
140 printf("\n");
141
142 // Now iterate using an iterator
143 printf("List of phones:\n");
144 it = eina_hash_iterator_tuple_new(phone_book);
145 while (eina_iterator_next(it, &data))
146 {
147 Eina_Hash_Tuple *t = data;
148 const int32_t *id = t->key;
149 const char *number = t->data;
150 printf("%d: %s\n", *id, number);
151 }
152 eina_iterator_free(it); // Always free the iterator after its use
153 printf("\n");
154
155 // Just iterate over the keys (names)
156 printf("List of ids in the phone book:\n");
157 it = eina_hash_iterator_key_new(phone_book);
158 while (eina_iterator_next(it, &data))
159 {
160 const int32_t *id = data;
161 printf("%d\n", *id);
162 }
163 eina_iterator_free(it);
164 printf("\n");
165
166 // Just iterate over the data (numbers)
167 printf("List of numbers in the phone book:\n");
168 it = eina_hash_iterator_data_new(phone_book);
169 while (eina_iterator_next(it, &data))
170 {
171 const char *number = data;
172 printf("%s\n", number);
173 }
174 eina_iterator_free(it);
175 printf("\n");
176
177 // Check how many items are in the phone book
178 printf("There are %d items in the hash.\n\n",
179 eina_hash_population(phone_book));
180
181 // Change the name (key) on an entry
182 int32_t id6 = 6;
183 eina_hash_move(phone_book, &id5, &id6);
184 printf("List of phones after change:\n");
185 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
186 printf("\n");
187
188 // Empty the phone book, but don't destroy it
189 eina_hash_free_buckets(phone_book);
190 printf("There are %d items in the hash.\n\n",
191 eina_hash_population(phone_book));
192
193 // Phone book could still be used, but we are freeing it since we are
194 // done for now
195 eina_hash_free(phone_book);
196
197 eina_shutdown();
198}
diff --git a/libraries/eina/src/examples/eina_hash_06.c b/libraries/eina/src/examples/eina_hash_06.c
new file mode 100644
index 0000000..99a2bd7
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_06.c
@@ -0,0 +1,198 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 int64_t id; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { 1, "+01 23 456-78910" },
24 { 2, "+12 34 567-89101" },
25 { 3, "+23 45 678-91012" },
26 { 4, "+34 56 789-10123" },
27 { -1, NULL }
28}; // _start_entries
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static Eina_Bool
37_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
38 void *data, void *fdata)
39{
40 const int64_t *id = key;
41 const char *number = data;
42 printf("%ld: %s\n", *id, number);
43
44 // Return EINA_FALSE to stop this callback from being called
45 return EINA_TRUE;
46}
47
48int
49main(int argc, const char *argv[])
50{
51 Eina_Hash *phone_book = NULL;
52 int i;
53 int64_t entry_id = 4;
54 char *phone = NULL;
55 Eina_Bool r;
56 Eina_Iterator *it;
57 void *data;
58
59 eina_init();
60
61 phone_book = eina_hash_int64_new(_phone_entry_free_cb);
62
63 // Add initial entries to our hash
64 for (i = 0; _start_entries[i].id != -1; i++)
65 {
66 eina_hash_add(phone_book, &_start_entries[i].id,
67 strdup(_start_entries[i].number));
68 }
69
70 // Look for a specific entry and get its phone number
71 phone = eina_hash_find(phone_book, &entry_id);
72 if (phone)
73 {
74 printf("Printing entry.\n");
75 printf("Id: %ld\n", entry_id);
76 printf("Number: %s\n\n", phone);
77 }
78
79 // Delete this entry
80 r = eina_hash_del(phone_book, &entry_id, NULL);
81 printf("Hash entry successfully deleted? %d\n\n", r);
82
83 // Modify the pointer data of an entry and free the old one
84 int64_t id3 = 3;
85 phone = eina_hash_modify(phone_book, &id3,
86 strdup("+23 45 111-11111"));
87 free(phone);
88
89 // Modify or add an entry to the hash with eina_hash_set
90 // Let's first add a new entry
91 int64_t id5 = 5;
92 eina_error_set(0);
93 phone = eina_hash_set(phone_book, &id5,
94 strdup("+55 01 234-56789"));
95 if (!phone)
96 {
97 Eina_Error err = eina_error_get();
98 if (!err)
99 {
100 printf("No previous phone found for id5. ");
101 printf("Creating new entry.\n");
102 }
103 else
104 printf("Error when setting phone for Raul Seixas\n");
105 }
106 else
107 {
108 printf("Old phone for id5 was %s\n", phone);
109 free(phone);
110 }
111
112 printf("\n");
113
114 // Now change the phone number
115 eina_error_set(0);
116 phone = eina_hash_set(phone_book, &id5,
117 strdup("+55 02 222-22222"));
118 if (phone)
119 {
120 printf("Changing phone for id5 to +55 02 222-22222. ");
121 printf("Old phone was %s\n", phone);
122 free(phone);
123 }
124 else
125 {
126 Eina_Error err = eina_error_get();
127 if (err)
128 printf("Error when changing phone for id5\n");
129 else
130 {
131 printf("No previous phone found for id5. ");
132 printf("Creating new entry.\n");
133 }
134 }
135
136 // There are many ways to iterate over our Phone book.
137 // First, iterate showing the names and associated numbers.
138 printf("List of phones:\n");
139 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
140 printf("\n");
141
142 // Now iterate using an iterator
143 printf("List of phones:\n");
144 it = eina_hash_iterator_tuple_new(phone_book);
145 while (eina_iterator_next(it, &data))
146 {
147 Eina_Hash_Tuple *t = data;
148 const int64_t *id = t->key;
149 const char *number = t->data;
150 printf("%ld: %s\n", *id, number);
151 }
152 eina_iterator_free(it); // Always free the iterator after its use
153 printf("\n");
154
155 // Just iterate over the keys (names)
156 printf("List of ids in the phone book:\n");
157 it = eina_hash_iterator_key_new(phone_book);
158 while (eina_iterator_next(it, &data))
159 {
160 const int64_t *id = data;
161 printf("%ld\n", *id);
162 }
163 eina_iterator_free(it);
164 printf("\n");
165
166 // Just iterate over the data (numbers)
167 printf("List of numbers in the phone book:\n");
168 it = eina_hash_iterator_data_new(phone_book);
169 while (eina_iterator_next(it, &data))
170 {
171 const char *number = data;
172 printf("%s\n", number);
173 }
174 eina_iterator_free(it);
175 printf("\n");
176
177 // Check how many items are in the phone book
178 printf("There are %d items in the hash.\n\n",
179 eina_hash_population(phone_book));
180
181 // Change the name (key) on an entry
182 int64_t id6 = 6;
183 eina_hash_move(phone_book, &id5, &id6);
184 printf("List of phones after change:\n");
185 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
186 printf("\n");
187
188 // Empty the phone book, but don't destroy it
189 eina_hash_free_buckets(phone_book);
190 printf("There are %d items in the hash.\n\n",
191 eina_hash_population(phone_book));
192
193 // Phone book could still be used, but we are freeing it since we are
194 // done for now
195 eina_hash_free(phone_book);
196
197 eina_shutdown();
198}
diff --git a/libraries/eina/src/examples/eina_hash_07.c b/libraries/eina/src/examples/eina_hash_07.c
new file mode 100644
index 0000000..b3e486a
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_07.c
@@ -0,0 +1,219 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 const char *name; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
24 { "Ludwig van Beethoven", "+12 34 567-89101" },
25 { "Richard Georg Strauss", "+23 45 678-91012" },
26 { "Heitor Villa-Lobos", "+34 56 789-10123" },
27 { NULL, NULL }
28}; // _start_entries
29
30static const char *_nicknames[] = {
31 "mozzart",
32 "betho",
33 "george",
34 "hector",
35 NULL
36};
37
38static void
39_phone_entry_free_cb(void *data)
40{
41 free(data);
42}
43
44static Eina_Bool
45_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
46 void *data, void *fdata)
47{
48 Phone_Entry **pe = (Phone_Entry **)key;
49 const char *nick = data;
50 printf("%s: %s, nick=%s\n", (*pe)->name, (*pe)->number, nick);
51
52 // Return EINA_FALSE to stop this callback from being called
53 return EINA_TRUE;
54}
55
56int
57main(int argc, const char *argv[])
58{
59 Eina_Hash *phone_book = NULL;
60 int i;
61 Phone_Entry *entry_vl = &_start_entries[3];
62 Phone_Entry *p = NULL;
63 char *nick = NULL;
64 Eina_Bool r;
65 Eina_Iterator *it;
66 void *data;
67
68 eina_init();
69
70 phone_book = eina_hash_pointer_new(_phone_entry_free_cb);
71
72 // Add initial entries to our hash
73 for (i = 0; _start_entries[i].name != NULL; i++)
74 {
75 p = &_start_entries[i];
76 eina_hash_add(phone_book, &p,
77 strdup(_nicknames[i]));
78 }
79 printf("Phonebook:\n");
80 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
81 printf("\n");
82
83 // Look for a specific entry and get its nickname
84 nick = eina_hash_find(phone_book, &entry_vl);
85 if (nick)
86 {
87 printf("Printing entry.\n");
88 printf("Name: %s\n", entry_vl->name);
89 printf("Number: %s\n", entry_vl->number);
90 printf("Nick: %s\n\n", nick);
91 }
92
93 // Delete this entry
94 r = eina_hash_del(phone_book, &entry_vl, NULL);
95 printf("Hash entry successfully deleted? %d\n\n", r);
96
97 // Modify the pointer data of an entry and free the old one
98 p = &_start_entries[2];
99 nick = eina_hash_modify(phone_book, &p,
100 strdup("el jorge"));
101 free(nick);
102
103 // Modify or add an entry to the hash with eina_hash_set
104 // Let's first add a new entry
105 eina_error_set(0);
106 Phone_Entry *p1 = malloc(sizeof(*p1));
107 p1->name = "Raul Seixas";
108 p1->number = "+55 01 234-56789";
109 nick = eina_hash_set(phone_book, &p1,
110 strdup("raulzito"));
111 if (!nick)
112 {
113 Eina_Error err = eina_error_get();
114 if (!err)
115 {
116 printf("No previous nick found for Raul Seixas. ");
117 printf("Creating new entry.\n");
118 }
119 else
120 printf("Error when setting nick for Raul Seixas\n");
121 }
122 else
123 {
124 printf("Old nick for Raul Seixas was %s\n", nick);
125 free(nick);
126 }
127
128 printf("\n");
129
130 // Now change the nick
131 eina_error_set(0);
132 nick = eina_hash_set(phone_book, &p1,
133 strdup("raulzao"));
134 if (nick)
135 {
136 printf("Changing nick for Raul Seixas to raulzao. ");
137 printf("Old nick was %s\n", nick);
138 free(nick);
139 }
140 else
141 {
142 Eina_Error err = eina_error_get();
143 if (err)
144 printf("Error when changing nick for Raul Seixas\n");
145 else
146 {
147 printf("No previous nick found for Raul Seixas. ");
148 printf("Creating new entry.\n");
149 }
150 }
151
152 // There are many ways to iterate over our Phone book.
153 // First, iterate showing the names, phones and associated nicks.
154 printf("Phonebook:\n");
155 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
156 printf("\n");
157
158 // Now iterate using an iterator
159 printf("Phonebook:\n");
160 it = eina_hash_iterator_tuple_new(phone_book);
161 while (eina_iterator_next(it, &data))
162 {
163 Eina_Hash_Tuple *t = data;
164 Phone_Entry **pe = (Phone_Entry **)t->key;
165 nick = t->data;
166 printf("%s: %s, nick=%s\n", (*pe)->name, (*pe)->number, nick);
167 }
168 eina_iterator_free(it); // Always free the iterator after its use
169 printf("\n");
170
171 // Just iterate over the keys (names)
172 printf("List of names/numbers in the phone book:\n");
173 it = eina_hash_iterator_key_new(phone_book);
174 while (eina_iterator_next(it, &data))
175 {
176 Phone_Entry **pe = (Phone_Entry **)data;
177 printf("%s: %s\n", (*pe)->name, (*pe)->number);
178 }
179 eina_iterator_free(it);
180 printf("\n");
181
182 // Just iterate over the data (nicks)
183 printf("List of nicks in the phone book:\n");
184 it = eina_hash_iterator_data_new(phone_book);
185 while (eina_iterator_next(it, &data))
186 {
187 nick = data;
188 printf("%s\n", nick);
189 }
190 eina_iterator_free(it);
191 printf("\n");
192
193 // Check how many items are in the phone book
194 printf("There are %d items in the hash.\n\n",
195 eina_hash_population(phone_book));
196
197 // Change the name (key) on an entry
198 Phone_Entry *p2 = malloc(sizeof(*p2));
199 p2->name = "Alceu Valenca";
200 p2->number = "000000000000";
201 eina_hash_move(phone_book, p1, p2);
202 printf("List of phones after change:\n");
203 eina_hash_foreach(phone_book, _phone_book_foreach_cb, NULL);
204 printf("\n");
205
206 // Empty the phone book, but don't destroy it
207 eina_hash_free_buckets(phone_book);
208 printf("There are %d items in the hash.\n\n",
209 eina_hash_population(phone_book));
210
211 // Phone book could still be used, but we are freeing it since we are
212 // done for now
213 eina_hash_free(phone_book);
214
215 free(p1);
216 free(p2);
217
218 eina_shutdown();
219}
diff --git a/libraries/eina/src/examples/eina_hash_08.c b/libraries/eina/src/examples/eina_hash_08.c
new file mode 100644
index 0000000..368a2fb
--- /dev/null
+++ b/libraries/eina/src/examples/eina_hash_08.c
@@ -0,0 +1,125 @@
1#include <stdio.h>
2#include <string.h>
3#include <Eina.h>
4
5/*
6 * Eina Hash - phonebook
7 *
8 * This example demonstrate the use of Eina Hash by implementing a phonebook
9 * that stores its contact data into the hash.
10 *
11 * It indexes the phone numbers by Contact Full Name, so it's a hash with
12 * string keys.
13 */
14
15struct _Phone_Entry {
16 const char *name; // Full name.
17 const char *number; // Phone number.
18};
19
20typedef struct _Phone_Entry Phone_Entry;
21
22static Phone_Entry _start_entries[] = {
23 { "Wolfgang Amadeus Mozart", "+01 23 456-78910" },
24 { "Ludwig van Beethoven", "+12 34 567-89101" },
25 { "Richard Georg Strauss", "+23 45 678-91012" },
26 { "Heitor Villa-Lobos", "+34 56 789-10123" },
27 { NULL, NULL }
28}; // _start_entries
29
30static void
31_phone_entry_free_cb(void *data)
32{
33 free(data);
34}
35
36static Eina_Bool
37_phone_book_foreach_cb(const Eina_Hash *phone_book, const void *key,
38 void *data, void *fdata)
39{
40 const char *name = key;
41 const char *number = data;
42 printf("%s: %s\n", name, number);
43
44 // Return EINA_FALSE to stop this callback from being called
45 return EINA_TRUE;
46}
47
48int
49main(int argc, const char *argv[])
50{
51 Eina_Hash *phone_book = NULL;
52 int i;
53 const char *entry_name = "Heitor Villa-Lobos";
54 int entry_size;
55 const char *saved_entry_name = "Alceu Valenca";
56 int saved_entry_size = sizeof("Alceu Valenca");
57 const char *phone = NULL;
58 Eina_Bool r;
59 Eina_Iterator *it;
60 void *data;
61
62 eina_init();
63
64 phone_book = eina_hash_string_superfast_new(_phone_entry_free_cb);
65
66 // Add initial entries to our hash
67 for (i = 0; _start_entries[i].name != NULL; i++)
68 {
69 eina_hash_add(phone_book, _start_entries[i].name,
70 strdup(_start_entries[i].number));
71 }
72
73 // Delete entries
74 r = eina_hash_del(phone_book, entry_name, NULL);
75 printf("Hash entry successfully deleted? %d\n\n", r);
76
77 int hash = eina_hash_superfast("Ludwig van Beethoven",
78 sizeof("Ludwig van Beethoven"));
79
80 r = eina_hash_del_by_key_hash(phone_book, "Ludwig van Beethoven",
81 sizeof("Ludwig van Beethoven"), hash);
82 printf("Hash entry successfully deleted? %d\n\n", r);
83
84 r = eina_hash_del_by_key(phone_book, "Richard Georg Strauss");
85 printf("Hash entry successfully deleted? %d\n\n", r);
86
87 // add entry by hash
88 entry_name = "Raul_Seixas";
89 entry_size = sizeof("Raul Seixas");
90 phone = strdup("+33 33 333-33333");
91 hash = eina_hash_superfast(entry_name, entry_size);
92 eina_hash_add_by_hash(phone_book, entry_name, entry_size, hash, phone);
93
94 // don't need to free 'phone' after the next del:
95 r = eina_hash_del_by_data(phone_book, phone);
96 printf("Hash entry successfully deleted? %d\n\n", r);
97
98 // add entry by hash directly - no copy of the key will be done
99 hash = eina_hash_superfast(saved_entry_name, saved_entry_size);
100 phone = strdup("+44 44 444-44444");
101 eina_hash_direct_add_by_hash(phone_book, saved_entry_name,
102 saved_entry_size, hash, phone);
103
104 // find the added entry by its hash:
105 phone = eina_hash_find_by_hash(phone_book, saved_entry_name,
106 saved_entry_size, hash);
107 if (phone)
108 {
109 char *newphone = strdup("+55 55 555-55555");
110 phone = eina_hash_modify_by_hash(phone_book, saved_entry_name,
111 saved_entry_size, hash, newphone);
112 if (phone)
113 printf("changing phone to %s, old one was %s\n", newphone, phone);
114 else
115 printf("couldn't modify entry identified by %d\n", hash);
116 }
117 else
118 {
119 printf("couldn't find entry identified by %d\n", hash);
120 }
121
122 eina_hash_free(phone_book);
123
124 eina_shutdown();
125}
diff --git a/libraries/eina/src/examples/eina_inlist_01.c b/libraries/eina/src/examples/eina_inlist_01.c
new file mode 100644
index 0000000..fa51553
--- /dev/null
+++ b/libraries/eina/src/examples/eina_inlist_01.c
@@ -0,0 +1,96 @@
1// Compile with:
2// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01
3#include <Eina.h>
4#include <stdio.h>
5
6struct my_struct {
7 EINA_INLIST;
8 int a, b;
9};
10
11int
12sort_cb(const void *d1, const void *d2)
13{
14 const Eina_Inlist *l1, *l2;
15 const struct my_struct *x1, *x2;
16
17 l1 = d1;
18 l2 = d2;
19
20 x1 = EINA_INLIST_CONTAINER_GET(l1, struct my_struct);
21 x2 = EINA_INLIST_CONTAINER_GET(l2, struct my_struct);
22
23 return x1->a - x2->a;
24}
25
26int
27main(void)
28{
29 struct my_struct *d, *cur;
30 Eina_Inlist *list, *itr, *tmp;
31
32 eina_init();
33
34 d = malloc(sizeof(*d));
35 d->a = 1;
36 d->b = 10;
37 list = eina_inlist_append(NULL, EINA_INLIST_GET(d));
38
39 d = malloc(sizeof(*d));
40 d->a = 2;
41 d->b = 20;
42 list = eina_inlist_append(list, EINA_INLIST_GET(d));
43
44 d = malloc(sizeof(*d));
45 d->a = 3;
46 d->b = 30;
47 list = eina_inlist_prepend(list, EINA_INLIST_GET(d));
48
49 printf("list=%p\n", list);
50 EINA_INLIST_FOREACH(list, cur)
51 printf("\ta=%d, b=%d\n", cur->a, cur->b);
52
53 list = eina_inlist_promote(list, EINA_INLIST_GET(d));
54
55 d = malloc(sizeof(*d));
56 d->a = 4;
57 d->b = 40;
58 list = eina_inlist_append_relative(list, EINA_INLIST_GET(d), list);
59
60 list = eina_inlist_demote(list, EINA_INLIST_GET(d));
61
62 list = eina_inlist_sort(list, sort_cb);
63
64 printf("list after sort=%p\n", list);
65 EINA_INLIST_FOREACH(list, cur)
66 printf("\ta=%d, b=%d\n", cur->a, cur->b);
67
68 tmp = eina_inlist_find(list, EINA_INLIST_GET(d));
69 if (tmp)
70 cur = EINA_INLIST_CONTAINER_GET(tmp, struct my_struct);
71 else
72 cur = NULL;
73
74 if (d != cur)
75 printf("wrong node! cur=%p\n", cur);
76
77 list = eina_inlist_remove(list, EINA_INLIST_GET(d));
78 free(d);
79 printf("list=%p\n", list);
80 for (itr = list; itr != NULL; itr = itr->next)
81 {
82 cur = EINA_INLIST_CONTAINER_GET(itr, struct my_struct);
83 printf("\ta=%d, b=%d\n", cur->a, cur->b);
84 }
85
86 while (list)
87 {
88 Eina_Inlist *aux = list;
89 list = eina_inlist_remove(list, list);
90 free(aux);
91 }
92
93 eina_shutdown();
94
95 return 0;
96}
diff --git a/libraries/eina/src/examples/eina_inlist_02.c b/libraries/eina/src/examples/eina_inlist_02.c
new file mode 100644
index 0000000..7d23f13
--- /dev/null
+++ b/libraries/eina/src/examples/eina_inlist_02.c
@@ -0,0 +1,64 @@
1// Compile with:
2// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01
3#include <Eina.h>
4#include <stdio.h>
5
6struct my_struct {
7 EINA_INLIST;
8 int a, b;
9};
10
11int
12main(void)
13{
14 struct my_struct *d, *cur;
15 int i;
16
17 Eina_Inlist *inlist = NULL;
18 Eina_List *list = NULL, *l_itr, *l_next;
19
20 eina_init();
21
22 for (i = 0; i < 100; i++)
23 {
24 d = malloc(sizeof(*d));
25 d->a = i;
26 d->b = i * 10;
27 inlist = eina_inlist_append(inlist, EINA_INLIST_GET(d));
28 if ((i % 2) == 0)
29 list = eina_list_prepend(list, d);
30 }
31
32 printf("inlist=%p\n", inlist);
33 EINA_INLIST_FOREACH(inlist, cur)
34 printf("\ta=%d, b=%d\n", cur->a, cur->b);
35
36 printf("list=%p\n", list);
37 EINA_LIST_FOREACH(list, l_itr, cur)
38 printf("\ta=%d, b=%d\n", cur->a, cur->b);
39
40 printf("inlist count=%d\n", eina_inlist_count(inlist));
41 printf("list count=%d\n\n", eina_list_count(list));
42
43 EINA_LIST_FOREACH_SAFE(list, l_itr, l_next, cur)
44 {
45 if ((cur->a % 3) == 0)
46 list = eina_list_remove_list(list, l_itr);
47 }
48
49 printf("inlist count=%d\n", eina_inlist_count(inlist));
50 printf("list count=%d\n\n", eina_list_count(list));
51
52 eina_list_free(list);
53
54 while (inlist)
55 {
56 Eina_Inlist *aux = inlist;
57 inlist = eina_inlist_remove(inlist, inlist);
58 free(aux);
59 }
60
61 eina_shutdown();
62
63 return 0;
64}
diff --git a/libraries/eina/src/examples/eina_inlist_03.c b/libraries/eina/src/examples/eina_inlist_03.c
new file mode 100644
index 0000000..a39a784
--- /dev/null
+++ b/libraries/eina/src/examples/eina_inlist_03.c
@@ -0,0 +1,73 @@
1// Compile with:
2// gcc -g `pkg-config --cflags --libs eina` eina_inlist_01.c -o eina_inlist_01
3#include <Eina.h>
4#include <stdio.h>
5
6struct my_struct {
7 EINA_INLIST;
8 Eina_Inlist even;
9 int a, b;
10};
11
12#define EVEN_INLIST_GET(Inlist) (& ((Inlist)->even))
13
14#define EVEN_INLIST_CONTAINER_GET(ptr, type) \
15 ((type *)((char *)ptr - offsetof(type, even)))
16
17int
18main(void)
19{
20 struct my_struct *d, *cur;
21 int i;
22
23 Eina_Inlist *list = NULL, *list_even = NULL, *itr;
24
25 eina_init();
26
27 for (i = 0; i < 100; i++)
28 {
29 d = malloc(sizeof(*d));
30 d->a = i;
31 d->b = i * 10;
32 list = eina_inlist_append(list, EINA_INLIST_GET(d));
33 if ((i % 2) == 0)
34 list_even = eina_inlist_prepend(list_even, EVEN_INLIST_GET(d));
35 }
36
37 printf("list=%p\n", list);
38 EINA_INLIST_FOREACH(list, cur)
39 printf("\ta=%d, b=%d\n", cur->a, cur->b);
40
41 printf("list_even=%p\n", list_even);
42 for (itr = list_even; itr != NULL; itr = itr->next)
43 {
44 cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct);
45 printf("\ta=%d, b=%d\n", cur->a, cur->b);
46 }
47
48 printf("list count=%d\n", eina_inlist_count(list));
49 printf("list_even count=%d\n\n", eina_inlist_count(list_even));
50
51 itr = list_even;
52 while (itr)
53 {
54 Eina_Inlist *next = itr->next;
55 cur = EVEN_INLIST_CONTAINER_GET(itr, struct my_struct);
56 if ((cur->a % 3) == 0)
57 list_even = eina_inlist_remove(list_even, itr);
58 itr = next;
59 }
60 printf("list count=%d\n", eina_inlist_count(list));
61 printf("list_even count=%d\n\n", eina_inlist_count(list_even));
62
63 while (list)
64 {
65 Eina_Inlist *aux = list;
66 list = eina_inlist_remove(list, list);
67 free(aux);
68 }
69
70 eina_shutdown();
71
72 return 0;
73}
diff --git a/libraries/eina/src/examples/eina_iterator_01.c b/libraries/eina/src/examples/eina_iterator_01.c
new file mode 100644
index 0000000..f467f90
--- /dev/null
+++ b/libraries/eina/src/examples/eina_iterator_01.c
@@ -0,0 +1,66 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_iterator_01.c -o eina_iterator_01
3
4#include <stdio.h>
5
6#include <Eina.h>
7
8static Eina_Bool
9print_one(const void *container, void *data, void *fdata)
10{
11 printf("%s\n", (char*)data);
12 return EINA_TRUE;
13}
14
15static void
16print_eina_container(Eina_Iterator *it)
17{
18 eina_iterator_foreach(it, print_one, NULL);
19 printf("\n");
20}
21
22int
23main(int argc, char **argv)
24{
25 const char *strings[] = {
26 "unintersting string", "husker", "starbuck", "husker"
27 };
28 const char *more_strings[] = {
29 "very unintersting string",
30 "what do your hear?",
31 "nothing but the rain",
32 "then grab your gun and bring the cat in"
33 };
34 Eina_Array *array;
35 Eina_List *list = NULL;
36 Eina_Iterator *it;
37 unsigned short int i;
38 char *uninteresting;
39
40 eina_init();
41
42 array = eina_array_new(4);
43
44 for (i = 0; i < 4; i++)
45 {
46 eina_array_push(array, strings[i]);
47 list = eina_list_append(list, more_strings[i]);
48 }
49
50 it = eina_array_iterator_new(array);
51 eina_iterator_next(it, &uninteresting);
52 print_eina_container(it);
53 eina_array_free(eina_iterator_container_get(it));
54 eina_iterator_free(it);
55
56 it = eina_list_iterator_new(list);
57 eina_iterator_next(it, &uninteresting);
58 print_eina_container(it);
59 eina_iterator_free(it);
60
61 eina_list_free(list);
62
63 eina_shutdown();
64
65 return 0;
66}
diff --git a/libraries/eina/src/examples/eina_list_01.c b/libraries/eina/src/examples/eina_list_01.c
new file mode 100644
index 0000000..7807791
--- /dev/null
+++ b/libraries/eina/src/examples/eina_list_01.c
@@ -0,0 +1,44 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_list_01.c -o eina_list_01
3
4#include <stdio.h>
5#include <Eina.h>
6
7int
8main(int argc, char **argv)
9{
10 Eina_List *list = NULL;
11 Eina_List *l;
12 void *list_data;
13
14 eina_init();
15
16 list = eina_list_append(list, "tigh");
17 list = eina_list_append(list, "adar");
18 list = eina_list_append(list, "baltar");
19 list = eina_list_append(list, "roslin");
20
21 EINA_LIST_FOREACH(list, l, list_data)
22 printf("%s\n", (char*)list_data);
23 printf("\n");
24
25 l = eina_list_nth_list(list, 1);
26 list = eina_list_append_relative_list(list, "cain", l);
27
28 list = eina_list_append_relative(list, "zarek", "cain");
29
30 list = eina_list_prepend(list, "adama");
31
32 list = eina_list_prepend_relative(list, "gaeta", "cain");
33
34 list = eina_list_prepend_relative_list(list, "lampkin", l);
35
36 EINA_LIST_FOREACH(list, l, list_data)
37 printf("%s\n", (char*)list_data);
38
39 eina_list_free(list);
40
41 eina_shutdown();
42
43 return 0;
44}
diff --git a/libraries/eina/src/examples/eina_list_02.c b/libraries/eina/src/examples/eina_list_02.c
new file mode 100644
index 0000000..7def475
--- /dev/null
+++ b/libraries/eina/src/examples/eina_list_02.c
@@ -0,0 +1,55 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_list_02.c -o eina_list_02
3
4#include <stdio.h>
5#include <string.h>
6#include <Eina.h>
7
8int
9main(int argc, char **argv)
10{
11 Eina_List *list = NULL, *other_list = NULL;
12 Eina_List *l;
13 void *data;
14 int cmp_result;
15 Eina_Compare_Cb cmp_func = (Eina_Compare_Cb)strcmp;
16
17 eina_init();
18
19 list = eina_list_append(list, "starbuck");
20 list = eina_list_append(list, "appolo");
21 list = eina_list_append(list, "boomer");
22
23 data = eina_list_search_unsorted(list, cmp_func, "boomer");
24 l = eina_list_search_unsorted_list(list, cmp_func, "boomer");
25 if (l->data != data)
26 return 1;
27
28 list = eina_list_sort(list, 0, cmp_func);
29
30 data = eina_list_search_sorted(list, cmp_func, "starbuck");
31 l = eina_list_search_sorted_list(list, cmp_func, "starbuck");
32 if (l->data != data)
33 return 1;
34
35 list = eina_list_sorted_insert(list, cmp_func, "helo");
36
37 l = eina_list_search_sorted_near_list(list, cmp_func, "hera", &cmp_result);
38 if (cmp_result > 0)
39 list = eina_list_prepend_relative_list(list, "hera", l);
40 else if (cmp_result < 0)
41 list = eina_list_append_relative_list(list, "hera", l);
42
43 l = eina_list_search_sorted_list(list, cmp_func, "boomer");
44 list = eina_list_split_list(list, l, &other_list);
45
46 other_list = eina_list_sort(other_list, 0, cmp_func);
47
48 list = eina_list_sorted_merge(list, other_list, cmp_func);
49
50 eina_list_free(list);
51
52 eina_shutdown();
53
54 return 0;
55}
diff --git a/libraries/eina/src/examples/eina_list_03.c b/libraries/eina/src/examples/eina_list_03.c
new file mode 100644
index 0000000..8e15b91
--- /dev/null
+++ b/libraries/eina/src/examples/eina_list_03.c
@@ -0,0 +1,45 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_list_03.c -o eina_list_03
3
4#include <stdio.h>
5#include <Eina.h>
6
7int
8main(int argc, char **argv)
9{
10 Eina_List *list = NULL, *r_list;
11 Eina_List *l;
12 Eina_Iterator *itr;
13 void *list_data;
14
15 eina_init();
16
17 list = eina_list_append(list, "caprica");
18 list = eina_list_append(list, "sagitarius");
19 list = eina_list_append(list, "aerilon");
20 list = eina_list_append(list, "gemenon");
21
22 list = eina_list_promote_list(list, eina_list_nth_list(list, 2));
23 list = eina_list_demote_list(list, eina_list_nth_list(list, 2));
24
25 list = eina_list_remove(list, "sagitarius");
26
27 l = eina_list_data_find_list(list, "aerilon");
28 eina_list_data_set(l, "aquarius");
29
30 printf("size: %d\n", eina_list_count(list));
31
32 r_list = eina_list_reverse_clone(list);
33
34 itr = eina_list_iterator_new(r_list);
35 EINA_ITERATOR_FOREACH(itr, list_data)
36 printf("%s\n", (char*)list_data);
37 eina_iterator_free(itr);
38
39 eina_list_free(list);
40 eina_list_free(r_list);
41
42 eina_shutdown();
43
44 return 0;
45}
diff --git a/libraries/eina/src/examples/eina_list_04.c b/libraries/eina/src/examples/eina_list_04.c
new file mode 100644
index 0000000..c153c06
--- /dev/null
+++ b/libraries/eina/src/examples/eina_list_04.c
@@ -0,0 +1,36 @@
1//Compile with:
2//gcc -g `pkg-config --cflags --libs eina` eina_list_04.c -o eina_list_04
3
4#include <stdio.h>
5#include <Eina.h>
6
7int
8main(int argc, char **argv)
9{
10 Eina_List *list = NULL;
11 Eina_List *l;
12 void *list_data;
13
14 eina_init();
15
16 list = eina_list_append(list, eina_stringshare_add("calvin"));
17 list = eina_list_append(list, eina_stringshare_add("Leoben"));
18 list = eina_list_append(list, eina_stringshare_add("D'Anna"));
19 list = eina_list_append(list, eina_stringshare_add("Simon"));
20 list = eina_list_append(list, eina_stringshare_add("Doral"));
21 list = eina_list_append(list, eina_stringshare_add("Six"));
22 list = eina_list_append(list, eina_stringshare_add("Sharon"));
23
24 for(l = list; l; l = eina_list_next(l))
25 printf("%s\n", (char*)l->data);
26
27 for(l = eina_list_last(list); l; l = eina_list_prev(l))
28 printf("%s\n", (char*)eina_list_data_get(l));
29
30 EINA_LIST_FREE(list, list_data)
31 eina_stringshare_del(list_data);
32
33 eina_shutdown();
34
35 return 0;
36}
diff --git a/libraries/eina/src/examples/eina_log_01.c b/libraries/eina/src/examples/eina_log_01.c
new file mode 100644
index 0000000..7a20ca9
--- /dev/null
+++ b/libraries/eina/src/examples/eina_log_01.c
@@ -0,0 +1,27 @@
1//Compile with:
2//gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina`
3
4#include <stdlib.h>
5#include <stdio.h>
6
7#include <Eina.h>
8
9void test_warn(void)
10{
11 EINA_LOG_WARN("Here is a warning message");
12}
13
14int main(void)
15{
16 if (!eina_init())
17 {
18 printf("log during the initialization of Eina_Log module\n");
19 return EXIT_FAILURE;
20 }
21
22 test_warn();
23
24 eina_shutdown();
25
26 return EXIT_SUCCESS;
27}
diff --git a/libraries/eina/src/examples/eina_log_02.c b/libraries/eina/src/examples/eina_log_02.c
new file mode 100644
index 0000000..a056729
--- /dev/null
+++ b/libraries/eina/src/examples/eina_log_02.c
@@ -0,0 +1,38 @@
1//Compile with:
2//gcc -Wall -o eina_log_02 eina_log_02.c `pkg-config --cflags --libs eina`
3
4#include <stdlib.h>
5#include <stdio.h>
6
7#include <Eina.h>
8
9void test(int i)
10{
11 EINA_LOG_DBG("Entering test");
12
13 if (i < 0)
14 {
15 EINA_LOG_ERR("Argument is negative");
16 return;
17 }
18
19 EINA_LOG_INFO("argument non negative");
20
21 EINA_LOG_DBG("Exiting test");
22}
23
24int main(void)
25{
26 if (!eina_init())
27 {
28 printf("log during the initialization of Eina_Log module\n");
29 return EXIT_FAILURE;
30 }
31
32 test(-1);
33 test(0);
34
35 eina_shutdown();
36
37 return EXIT_SUCCESS;
38}
diff --git a/libraries/eina/src/examples/eina_log_03.c b/libraries/eina/src/examples/eina_log_03.c
new file mode 100644
index 0000000..8dbe19e
--- /dev/null
+++ b/libraries/eina/src/examples/eina_log_03.c
@@ -0,0 +1,78 @@
1//Compile with:
2//gcc -Wall -o eina_log_03 eina_log_03.c `pkg-config --cflags --libs eina`
3
4#include <stdlib.h>
5#include <stdio.h>
6
7#include <Eina.h>
8
9#define log(fmt, ...) \
10 eina_log_print(EINA_LOG_LEVEL_ERR, __FILE__, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
11
12typedef struct _Data Data;
13
14struct _Data
15{
16 int to_stderr;
17};
18
19void print_cb(const Eina_Log_Domain *domain,
20 Eina_Log_Level level,
21 const char *file,
22 const char *fnc,
23 int line,
24 const char *fmt,
25 void *data,
26 va_list args)
27{
28 Data *d;
29 FILE *output;
30 char *str;
31
32 d = (Data*)data;
33 if (d->to_stderr)
34 {
35 output = stderr;
36 str = "stderr";
37 }
38 else
39 {
40 output = stdout;
41 str = "stdout";
42 }
43
44 fprintf(output, "%s:%s:%s (%d) %s: ",
45 domain->domain_str, file, fnc, line, str);
46 vfprintf(output, fmt, args);
47 putc('\n', output);
48}
49
50void test(Data *data, int i)
51{
52 if (i < 0)
53 data->to_stderr = 0;
54 else
55 data->to_stderr = 1;
56
57 EINA_LOG_INFO("Log message...");
58}
59
60int main(void)
61{
62 Data data;
63
64 if (!eina_init())
65 {
66 printf("log during the initialization of Eina_Log module\n");
67 return EXIT_FAILURE;
68 }
69
70 eina_log_print_cb_set(print_cb, &data);
71
72 test(&data, -1);
73 test(&data, 0);
74
75 eina_shutdown();
76
77 return EXIT_SUCCESS;
78}
diff --git a/libraries/eina/src/examples/eina_str_01.c b/libraries/eina/src/examples/eina_str_01.c
new file mode 100644
index 0000000..089a766
--- /dev/null
+++ b/libraries/eina/src/examples/eina_str_01.c
@@ -0,0 +1,65 @@
1//Compile with:
2//gcc -Wall -o eina_str_01 eina_str_01.c `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <Eina.h>
6
7int main(int argc, char **argv)
8{
9 char *names = "Calvin;Leoben;D'anna;Simon;Doral;Six;Daniel;Sharon";
10 char *str;
11 char *tmp;
12 char *prologue;
13 char *part1 = "The Cylons were created by man. They evolved. They rebelled.";
14 char *part2 = "There are many copies. And they have a plan.";
15 char **arr;
16 int i;
17
18 eina_init();
19
20 arr = eina_str_split(names, ";", 0);
21 for (i = 0; arr[i]; i++)
22 printf("%s\n", arr[i]);
23
24 free(arr[0]);
25 free(arr);
26
27 str = malloc(sizeof(char) * 4);
28 strcpy(str, "bsd");
29
30 eina_str_toupper((char **)&str);
31 printf("%s\n", str);
32 eina_str_tolower(&str);
33 printf("%s\n", str);
34
35 if (eina_str_has_prefix(names, "Calvin"))
36 printf("Starts with 'Calvin'\n");
37 if (eina_str_has_suffix(names, "sharon"))
38 printf("Ends with 'sharon'\n");
39 if (eina_str_has_extension(names, "sharon"))
40 printf("Has extension 'sharon'\n");
41
42 tmp = eina_str_escape("They'll start going ripe on us pretty soon.");
43 printf("%s\n", tmp);
44 free(tmp);
45
46 prologue = malloc(sizeof(char) * 106);
47 eina_str_join_len(prologue, 106, ' ', part1, strlen(part1), part2, strlen(part2));
48 printf("%s\n", prologue);
49
50 eina_strlcpy(str, prologue, 4);
51 printf("%s\n", str);
52
53 free(prologue);
54 free(str);
55
56 str = malloc(sizeof(char) * 14);
57 sprintf(str, "%s", "cylons+");
58 eina_strlcat(str, "humans", 14);
59 printf("%s\n", str);
60 free(str);
61
62 eina_shutdown();
63
64 return 0;
65}
diff --git a/libraries/eina/src/examples/eina_strbuf_01.c b/libraries/eina/src/examples/eina_strbuf_01.c
new file mode 100644
index 0000000..eddfccf
--- /dev/null
+++ b/libraries/eina/src/examples/eina_strbuf_01.c
@@ -0,0 +1,41 @@
1//Compile with:
2//gcc -Wall -o eina_strbuf_01 eina_strbuf_01.c `pkg-config --cflags --libs eina`
3
4#include <stdio.h>
5#include <Eina.h>
6
7int main(int argc, char **argv)
8{
9 Eina_Strbuf *buf;
10
11 eina_init();
12
13 buf = eina_strbuf_new();
14
15 eina_strbuf_append_length(buf, "buffe", 5);
16 eina_strbuf_append_char(buf, 'r');
17 printf("%s\n", eina_strbuf_string_get(buf));
18
19 eina_strbuf_insert_escaped(buf, "my ", 0);
20 printf("%s\n", eina_strbuf_string_get(buf));
21 eina_strbuf_reset(buf);
22
23 eina_strbuf_append_escaped(buf, "my buffer");
24 printf("%s\n", eina_strbuf_string_get(buf));
25 eina_strbuf_reset(buf);
26
27 eina_strbuf_append_printf(buf, "%s%c", "buffe", 'r');
28 eina_strbuf_insert_printf(buf, " %s: %d", 6, "length", eina_strbuf_length_get(buf));
29 printf("%s\n", eina_strbuf_string_get(buf));
30
31 eina_strbuf_remove(buf, 0, 7);
32 printf("%s\n", eina_strbuf_string_get(buf));
33
34 eina_strbuf_replace_all(buf, "length", "size");
35 printf("%s\n", eina_strbuf_string_get(buf));
36
37 eina_strbuf_free(buf);
38 eina_shutdown();
39
40 return 0;
41}
diff --git a/libraries/eina/src/examples/eina_tiler_01.c b/libraries/eina/src/examples/eina_tiler_01.c
new file mode 100644
index 0000000..b2ff8be
--- /dev/null
+++ b/libraries/eina/src/examples/eina_tiler_01.c
@@ -0,0 +1,316 @@
1//Compile with:
2//gcc `pkg-config --cflags --libs ecore-evas ecore evas` eina_tiler_01.c -o eina_tiler_01
3
4#include <Ecore_Evas.h>
5#include <Ecore.h>
6#include <Evas.h>
7#include <Eina.h>
8
9#define WINDOW_PAD (20)
10
11static Eina_Tiler *tiler;
12static Eina_Rectangle *input_rects;
13static unsigned int input_count;
14static unsigned int input_idx = 0, input_color_idx = 0, output_color_idx = 0;
15static Eina_List *output_objs = NULL;
16static Evas_Coord maxw, maxh, winw, winh;
17static Evas *evas;
18
19static const struct color {
20 unsigned char r, g, b;
21} colors[] = {
22 {255, 0, 0},
23 {0, 255, 0},
24 {0, 0, 255},
25
26 {255, 128, 0},
27 {0, 255, 128},
28 {128, 0, 255},
29
30 {255, 255, 0},
31 {0, 255, 255},
32 {255, 0, 255},
33
34 {255, 0, 128},
35 {128, 255, 0},
36 {0, 128, 255},
37
38 {128, 128, 0},
39 {0, 128, 128},
40 {128, 0, 128},
41
42 {128, 0, 0},
43 {0, 128, 0},
44 {0, 0, 128},
45
46 {255, 128, 0},
47 {0, 255, 128},
48 {128, 0, 255},
49
50 {64, 64, 0},
51 {0, 64, 64},
52 {64, 0, 64},
53
54 {128, 128, 0},
55 {0, 128, 128},
56 {128, 0, 128},
57
58 {255, 0, 128},
59 {128, 255, 0},
60 {0, 128, 255},
61
62 {128, 64, 0},
63 {0, 128, 64},
64 {64, 0, 128},
65
66 {128, 0, 64},
67 {64, 128, 0},
68 {0, 64, 128}
69};
70
71#define MAX_COLORS (sizeof(colors) / sizeof(colors[0]))
72
73static void
74add_text(const char *text, int x, int y, int w)
75{
76 Evas_Object *o = evas_object_text_add(evas);
77 evas_object_color_set(o, 0, 0, 0, 255);
78 evas_object_move(o, x, y);
79 evas_object_resize(o, w, WINDOW_PAD);
80 evas_object_text_font_set(o, "Sans", 10);
81 evas_object_text_text_set(o, text);
82 evas_object_show(o);
83}
84
85static void
86output_rects_reset(void)
87{
88 Evas_Object *o;
89 EINA_LIST_FREE(output_objs, o)
90 evas_object_del(o);
91 output_color_idx = 0;
92}
93
94static void
95add_input_rect(const Eina_Rectangle *r)
96{
97 Evas_Object *o;
98 Evas_Coord bx, by;
99
100 bx = WINDOW_PAD;
101 by = WINDOW_PAD;
102
103 o = evas_object_rectangle_add(evas);
104#define C(comp) (((int)colors[input_color_idx].comp * 128) / 255)
105 evas_object_color_set(o, C(r), C(g), C(b), 128);
106#undef C
107 evas_object_move(o, r->x + bx, r->y + by);
108 evas_object_resize(o, r->w, r->h);
109 evas_object_show(o);
110
111 input_color_idx = (input_color_idx + 1) % MAX_COLORS;
112
113 bx += maxw + WINDOW_PAD;
114
115 o = evas_object_rectangle_add(evas);
116 evas_object_color_set(o, 32, 32, 32, 128);
117 evas_object_move(o, r->x + bx, r->y + by);
118 evas_object_resize(o, r->w, 1);
119 evas_object_layer_set(o, EVAS_LAYER_MAX);
120 evas_object_show(o);
121
122 o = evas_object_rectangle_add(evas);
123 evas_object_color_set(o, 32, 32, 32, 128);
124 evas_object_move(o, r->x + bx, r->y + by);
125 evas_object_resize(o, 1, r->h);
126 evas_object_layer_set(o, EVAS_LAYER_MAX);
127 evas_object_show(o);
128
129 o = evas_object_rectangle_add(evas);
130 evas_object_color_set(o, 32, 32, 32, 128);
131 evas_object_move(o, r->x + bx, r->y + by + r->h);
132 evas_object_resize(o, r->w, 1);
133 evas_object_layer_set(o, EVAS_LAYER_MAX);
134 evas_object_show(o);
135
136 o = evas_object_rectangle_add(evas);
137 evas_object_color_set(o, 32, 32, 32, 128);
138 evas_object_move(o, r->x + bx + r->w, r->y + by);
139 evas_object_resize(o, 1, r->h);
140 evas_object_layer_set(o, EVAS_LAYER_MAX);
141 evas_object_show(o);
142}
143
144static void
145add_output_rect(const Eina_Rectangle *r)
146{
147 Evas_Object *o = evas_object_rectangle_add(evas);
148#define C(comp) (((int)colors[output_color_idx].comp * 128) / 255)
149 evas_object_color_set(o, C(r), C(g), C(b), 128);
150#undef C
151 evas_object_move(o, r->x + maxw + 2 * WINDOW_PAD, r->y + WINDOW_PAD);
152 evas_object_resize(o, r->w, r->h);
153 evas_object_show(o);
154
155 output_color_idx = (output_color_idx + 1) % MAX_COLORS;
156
157 output_objs = eina_list_append(output_objs, o);
158}
159
160static Eina_Bool
161process_input(void *data)
162{
163 Eina_Iterator *itr;
164 Eina_Rectangle r, *r1;
165 unsigned int out = 0;
166
167 if (input_idx == input_count)
168 {
169 add_text("Done. Close the window to exit",
170 WINDOW_PAD, winh - WINDOW_PAD, winw - 2 * WINDOW_PAD);
171 return EINA_FALSE;
172 }
173
174 output_rects_reset();
175
176 r = input_rects[input_idx];
177 printf("Iteration #%u: %dx%d%+d%+d\n", input_idx, r.w, r.h, r.x, r.y);
178 input_idx++;
179 add_input_rect(&r);
180
181 eina_tiler_rect_add(tiler, &r);
182 itr = eina_tiler_iterator_new(tiler);
183 EINA_ITERATOR_FOREACH(itr, r1)
184 {
185 printf("\tOutput #%u: %dx%d%+d%+d\n", out, r1->w, r1->h, r1->x, r1->y);
186 add_output_rect(r1);
187 out++;
188 }
189 eina_iterator_free(itr);
190
191 return EINA_TRUE;
192}
193
194static void
195usage(const char *progname)
196{
197 fprintf(stderr,
198 "Usage:\n\n"
199 "\t%s <rect1> ... <rectN>\n\n"
200 "with rectangles being in the format:\n"
201 "\tWIDTHxHEIGHT<+->X<+->Y\n"
202 "examples:\n"
203 "\t100x100+10+10 - width=100, height=100 at x=10, y=10\n"
204 "\t150x50+5+6 - width=150, height=50 at x=5, y=6\n",
205 progname);
206}
207
208int
209main(int argc, char *argv[])
210{
211 Ecore_Evas *ee;
212 Evas_Object *o;
213 int i;
214
215 if (argc < 2)
216 {
217 usage(argv[0]);
218 return -2;
219 }
220
221 input_rects = calloc(argc - 1, sizeof(Eina_Rectangle));
222 input_count = 0;
223 maxw = 0;
224 maxh = 0;
225 for (i = 1; i < argc; i++)
226 {
227 Eina_Rectangle *r = input_rects + input_count;
228 char sx, sy;
229
230 if (sscanf(argv[i], "%dx%d%c%d%c%d",
231 &(r->w), &(r->h), &sx, &(r->x), &sy, &(r->y)) == 6)
232 {
233 if (sx == '-') r->x *= -1;
234 if (sy == '-') r->y *= -1;
235
236 if (maxw < r->x + r->w) maxw = r->x + r->w;
237 if (maxh < r->y + r->h) maxh = r->y + r->h;
238 input_count++;
239 }
240 else
241 fprintf(stderr, "ERROR: invalid rectangle ignored: %s\n", argv[i]);
242 }
243
244 if (input_count == 0)
245 {
246 fputs("ERROR: Could not find any valid rectangle. Exit!\n", stderr);
247 usage(argv[0]);
248 free(input_rects);
249 return -3;
250 }
251
252 if ((maxw == 0) || (maxh == 0))
253 {
254 fputs("ERROR: All rectangles with size 0x0. Exit!\n", stderr);
255 usage(argv[0]);
256 free(input_rects);
257 return -3;
258 }
259
260 ecore_evas_init();
261 ecore_init();
262 evas_init();
263 eina_init();
264
265 winw = 2 * maxw + 3 * WINDOW_PAD;
266 winh = maxh + 2 * WINDOW_PAD;
267
268 ee = ecore_evas_new(NULL, 0, 0, winw, winh, NULL);
269 if (!ee)
270 {
271 fputs("ERROR: Could not create window. Check ecore-evas install.\n",
272 stderr);
273 goto end;
274 }
275
276 evas = ecore_evas_get(ee);
277
278 o = evas_object_rectangle_add(evas);
279 evas_object_color_set(o, 255, 255, 255, 255);
280 evas_object_resize(o, winw, winh);
281 evas_object_show(o);
282
283 add_text("Input", WINDOW_PAD, 0, maxw);
284 o = evas_object_rectangle_add(evas);
285 evas_object_color_set(o, 200, 200, 200, 255);
286 evas_object_move(o, WINDOW_PAD, WINDOW_PAD);
287 evas_object_resize(o, maxw, maxh);
288 evas_object_show(o);
289
290 add_text("Output", maxw + 2 * WINDOW_PAD, 0, maxw);
291 o = evas_object_rectangle_add(evas);
292 evas_object_color_set(o, 200, 200, 200, 255);
293 evas_object_move(o, maxw + 2 * WINDOW_PAD, WINDOW_PAD);
294 evas_object_resize(o, maxw, maxh);
295 evas_object_show(o);
296
297 tiler = eina_tiler_new(maxw, maxh);
298 ecore_timer_add(2.0, process_input, NULL);
299
300 ecore_evas_show(ee);
301 ecore_main_loop_begin();
302
303 eina_list_free(output_objs);
304 eina_tiler_free(tiler);
305 ecore_evas_free(ee);
306
307 end:
308 free(input_rects);
309
310 eina_shutdown();
311 evas_shutdown();
312 ecore_shutdown();
313 ecore_evas_shutdown();
314
315 return 0;
316}
diff --git a/libraries/eina/src/include/Eina.h b/libraries/eina/src/include/Eina.h
new file mode 100644
index 0000000..68c41f5
--- /dev/null
+++ b/libraries/eina/src/include/Eina.h
@@ -0,0 +1,194 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008-2011 Enlightenment Developers:
3 * Albin "Lutin" Tonnerre <albin.tonnerre@gmail.com>
4 * Alexandre "diaxen" Becoulet <diaxen@free.fr>
5 * Andre Dieb <andre.dieb@gmail.com>
6 * Arnaud de Turckheim "quarium" <quarium@gmail.com>
7 * Carsten Haitzler <raster@rasterman.com>
8 * Cedric Bail <cedric.bail@free.fr>
9 * Corey "atmos" Donohoe <atmos@atmos.org>
10 * Fabiano Fidêncio <fidencio@profusion.mobi>
11 * Gustavo Chaves <glima@profusion.mobi>
12 * Gustavo Sverzut Barbieri <barbieri@gmail.com>
13 * Jorge Luis "turran" Zapata <jorgeluis.zapata@gmail.com>
14 * Peter "pfritz" Wehrfritz <peter.wehrfritz@web.de>
15 * Raphael Kubo da Costa <kubo@profusion.mobi>
16 * Tilman Sauerbeck <tilman@code-monkey.de>
17 * Vincent "caro" Torri <vtorri at univ-evry dot fr>
18 * Tom Hacohen <tom@stosb.com>
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This library is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library;
32 * if not, see <http://www.gnu.org/licenses/>.
33 */
34
35#ifndef EINA_H_
36#define EINA_H_
37
38/**
39 * @file
40 * @brief Eina Utility library
41 *
42 * These routines are used for Eina.
43 */
44
45/**
46 * @mainpage Eina
47 *
48 * @version 1.1
49 * @date 2008-2011
50 *
51 * @section eina_intro_sec Introduction
52 *
53 * The Eina library is a library that implements an API for data types
54 * in an efficient way. It also provides some useful tools like
55 * opening shared libraries, errors management, type conversion,
56 * time accounting and memory pool.
57 *
58 * This library is cross-platform and can be compiled and used on
59 * Linux, BSD, Opensolaris and Windows (XP and CE).
60 *
61 * The data types that are available are (see @ref Eina_Data_Types_Group):
62 * @li @ref Eina_Array_Group standard array of @c void* data.
63 * @li @ref Eina_Hash_Group standard hash of @c void* data.
64 * @li @ref Eina_Inline_List_Group list with nodes inlined into user type.
65 * @li @ref Eina_CList_Group compact inlined list.
66 * @li @ref Eina_List_Group standard list of @c void* data.
67 * @li @ref Eina_Iterator_Group Iterator functions.
68 * @li @ref Eina_Matrixsparse_Group sparse matrix of @c void* data.
69 * @li @ref Eina_Rbtree_Group red-black tree with nodes inlined into user type.
70 * @li @ref Eina_String_Buffer_Group mutable string to prepend, insert or append strings to a buffer.
71 * @li @ref Eina_Stringshare_Group saves memory by sharing read-only string references.
72 * @li @ref Eina_Tiler_Group split, merge and navigates into 2D tiled regions.
73 * @li @ref Eina_Trash_Group container of unused but allocated data.
74 *
75 * The tools that are available are (see @ref Eina_Tools_Group):
76 * @li @ref Eina_Benchmark_Group helper to write benchmarks.
77 * @li @ref Eina_Convert_Group faster conversion from strings to integers, double, etc.
78 * @li @ref Eina_Counter_Group measures number of calls and their time.
79 * @li @ref Eina_Error_Group error identifiers.
80 * @li @ref Eina_File_Group simple file list and path split.
81 * @li @ref Eina_Lalloc_Group simple lazy allocator.
82 * @li @ref Eina_Log_Group full-featured logging system.
83 * @li @ref Eina_Magic_Group provides runtime type checking.
84 * @li @ref Eina_Memory_Pool_Group abstraction for various memory allocators.
85 * @li @ref Eina_Module_Group lists, loads and share modules using Eina_Module standard.
86 * @li @ref Eina_Rectangle_Group rectangle structure and standard manipulation methods.
87 * @li @ref Eina_Safety_Checks_Group extra checks that will report unexpected conditions and can be disabled at compile time.
88 * @li @ref Eina_String_Group a set of functions that manages C strings.
89 *
90 * Please see the @ref authors page for contact details.
91 *
92 * @defgroup Eina_Data_Types_Group Data types
93 *
94 * Eina provide easy to use and optimized data types and structures.
95 *
96 *
97 * @defgroup Eina_Containers_Group Containers
98 *
99 * Containers are data types that hold data and allow iteration over
100 * their elements with an @ref Eina_Iterator_Group, or eventually an
101 * @ref Eina_Accessor_Group.
102 *
103 *
104 * @defgroup Eina_Tools_Group Tools
105 *
106 * Eina tools aims to help application development, providing ways to
107 * make it safer, log errors, manage memory more efficiently and more.
108 *
109 */
110
111/**
112 *
113 * @page authors Authors
114 *
115 * @author Albin "Lutin" Tonnerre <albin.tonnerre@@gmail.com>
116 * @author Alexandre "diaxen" Becoulet <diaxen@@free.fr>
117 * @author Andre Dieb <andre.dieb@@gmail.com>
118 * @author Arnaud de Turckheim "quarium" <quarium@@gmail.com>
119 * @author Carsten Haitzler <raster@@rasterman.com>
120 * @author Cedric Bail <cedric.bail@@free.fr>
121 * @author Corey "atmos" Donohoe <atmos@@atmos.org>
122 * @author Fabiano Fidêncio <fidencio@@profusion.mobi>
123 * @author Gustavo Chaves <glima@@profusion.mobi>
124 * @author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi>
125 * @author Jorge Luis "turran" Zapata <jorgeluis.zapata@@gmail.com>
126 * @author Peter "pfritz" Wehrfritz <peter.wehrfritz@@web.de>
127 * @author Raphael Kubo da Costa <kubo@@profusion.mobi>
128 * @author Tilman Sauerbeck <tilman@@code-monkey.de>
129 * @author Vincent "caro" Torri <vtorri at univ-evry dot fr>
130 * @author Tom Hacohen <tom@@stosb.com>
131 *
132 * Please contact <enlightenment-devel@lists.sourceforge.net> to get in
133 * contact with the developers and maintainers.
134 *
135 */
136
137#ifdef _WIN32
138# include <Evil.h>
139#endif
140
141#ifdef __cplusplus
142extern "C" {
143#endif
144
145#include "eina_config.h"
146#include "eina_types.h"
147#include "eina_main.h"
148#include "eina_fp.h"
149#include "eina_rectangle.h"
150#include "eina_clist.h"
151#include "eina_inlist.h"
152#include "eina_file.h"
153#include "eina_list.h"
154#include "eina_hash.h"
155#include "eina_trash.h"
156#include "eina_lalloc.h"
157#include "eina_module.h"
158#include "eina_mempool.h"
159#include "eina_error.h"
160#include "eina_log.h"
161#include "eina_array.h"
162#include "eina_binshare.h"
163#include "eina_stringshare.h"
164#include "eina_ustringshare.h"
165#include "eina_magic.h"
166#include "eina_counter.h"
167#include "eina_rbtree.h"
168#include "eina_accessor.h"
169#include "eina_iterator.h"
170#include "eina_benchmark.h"
171#include "eina_convert.h"
172#include "eina_cpu.h"
173#include "eina_sched.h"
174#include "eina_tiler.h"
175#include "eina_hamster.h"
176#include "eina_matrixsparse.h"
177#include "eina_str.h"
178#include "eina_strbuf.h"
179#include "eina_binbuf.h"
180#include "eina_ustrbuf.h"
181#include "eina_unicode.h"
182#include "eina_quadtree.h"
183#include "eina_simple_xml_parser.h"
184#include "eina_lock.h"
185#include "eina_prefix.h"
186#include "eina_refcount.h"
187#include "eina_mmap.h"
188#include "eina_xattr.h"
189
190#ifdef __cplusplus
191}
192#endif
193
194#endif /* EINA_H */
diff --git a/libraries/eina/src/include/Makefile.am b/libraries/eina/src/include/Makefile.am
new file mode 100644
index 0000000..41a37cb
--- /dev/null
+++ b/libraries/eina/src/include/Makefile.am
@@ -0,0 +1,89 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3EINAHEADERS = \
4eina_safety_checks.h \
5eina_error.h \
6eina_log.h \
7eina_inline_log.x \
8eina_fp.h \
9eina_inline_f32p32.x \
10eina_inline_f16p16.x \
11eina_inline_f8p24.x \
12eina_inline_fp.x \
13eina_hash.h \
14eina_inline_hash.x \
15eina_lalloc.h \
16eina_clist.h \
17eina_inlist.h \
18eina_list.h \
19eina_file.h \
20eina_mempool.h \
21eina_module.h \
22eina_rectangle.h \
23eina_types.h \
24eina_array.h \
25eina_counter.h \
26eina_inline_array.x \
27eina_magic.h \
28eina_stringshare.h \
29eina_binshare.h \
30eina_binbuf.h \
31eina_ustringshare.h \
32eina_inline_stringshare.x \
33eina_inline_ustringshare.x \
34eina_inline_list.x \
35eina_accessor.h \
36eina_convert.h \
37eina_rbtree.h \
38eina_benchmark.h \
39eina_inline_rbtree.x \
40eina_inline_mempool.x \
41eina_inline_rectangle.x \
42eina_inline_trash.x \
43eina_trash.h \
44eina_iterator.h \
45eina_main.h \
46eina_cpu.h \
47eina_sched.h \
48eina_tiler.h \
49eina_hamster.h \
50eina_matrixsparse.h \
51eina_inline_tiler.x \
52eina_str.h \
53eina_inline_str.x \
54eina_strbuf.h \
55eina_ustrbuf.h \
56eina_unicode.h \
57eina_quadtree.h \
58eina_simple_xml_parser.h \
59eina_lock.h \
60eina_prefix.h \
61eina_refcount.h \
62eina_mmap.h \
63eina_xattr.h
64
65# Will be back for developper after 1.1.
66# eina_object.h
67
68if EINA_HAVE_THREADS
69if EINA_HAVE_WINCE
70EINAHEADERS += eina_inline_lock_wince.x
71else
72if EINA_HAVE_WIN32
73EINAHEADERS += eina_inline_lock_win32.x
74else
75EINAHEADERS += eina_inline_lock_posix.x
76endif
77endif
78else
79EINAHEADERS += eina_inline_lock_void.x
80endif
81
82installed_mainheaderdir = $(includedir)/eina-@VMAJ@
83dist_installed_mainheader_DATA = Eina.h eina_config.h
84
85installed_headersdir = $(includedir)/eina-@VMAJ@/eina
86dist_installed_headers_DATA = $(EINAHEADERS)
87
88EXTRA_DIST = \
89eina_config.h.in
diff --git a/libraries/eina/src/include/Makefile.in b/libraries/eina/src/include/Makefile.in
new file mode 100644
index 0000000..f6e0074
--- /dev/null
+++ b/libraries/eina/src/include/Makefile.in
@@ -0,0 +1,560 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37
38# Will be back for developper after 1.1.
39# eina_object.h
40@EINA_HAVE_THREADS_TRUE@@EINA_HAVE_WINCE_TRUE@am__append_1 = eina_inline_lock_wince.x
41@EINA_HAVE_THREADS_TRUE@@EINA_HAVE_WIN32_TRUE@@EINA_HAVE_WINCE_FALSE@am__append_2 = eina_inline_lock_win32.x
42@EINA_HAVE_THREADS_TRUE@@EINA_HAVE_WIN32_FALSE@@EINA_HAVE_WINCE_FALSE@am__append_3 = eina_inline_lock_posix.x
43@EINA_HAVE_THREADS_FALSE@am__append_4 = eina_inline_lock_void.x
44subdir = src/include
45DIST_COMMON = $(am__dist_installed_headers_DATA_DIST) \
46 $(dist_installed_mainheader_DATA) $(srcdir)/Makefile.am \
47 $(srcdir)/Makefile.in $(srcdir)/eina_config.h.in
48ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
49am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
50 $(top_srcdir)/m4/efl_benchmark.m4 \
51 $(top_srcdir)/m4/efl_compiler_flag.m4 \
52 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
53 $(top_srcdir)/m4/efl_doxygen.m4 \
54 $(top_srcdir)/m4/efl_examples.m4 \
55 $(top_srcdir)/m4/efl_fnmatch.m4 \
56 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
57 $(top_srcdir)/m4/efl_threads.m4 \
58 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
59 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
60 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
61 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
62 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
63am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
64 $(ACLOCAL_M4)
65mkinstalldirs = $(install_sh) -d
66CONFIG_HEADER = $(top_builddir)/config.h
67CONFIG_CLEAN_FILES = eina_config.h
68CONFIG_CLEAN_VPATH_FILES =
69AM_V_GEN = $(am__v_GEN_$(V))
70am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
71am__v_GEN_0 = @echo " GEN " $@;
72AM_V_at = $(am__v_at_$(V))
73am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
74am__v_at_0 = @
75SOURCES =
76DIST_SOURCES =
77am__dist_installed_headers_DATA_DIST = eina_safety_checks.h \
78 eina_error.h eina_log.h eina_inline_log.x eina_fp.h \
79 eina_inline_f32p32.x eina_inline_f16p16.x eina_inline_f8p24.x \
80 eina_inline_fp.x eina_hash.h eina_inline_hash.x eina_lalloc.h \
81 eina_clist.h eina_inlist.h eina_list.h eina_file.h \
82 eina_mempool.h eina_module.h eina_rectangle.h eina_types.h \
83 eina_array.h eina_counter.h eina_inline_array.x eina_magic.h \
84 eina_stringshare.h eina_binshare.h eina_binbuf.h \
85 eina_ustringshare.h eina_inline_stringshare.x \
86 eina_inline_ustringshare.x eina_inline_list.x eina_accessor.h \
87 eina_convert.h eina_rbtree.h eina_benchmark.h \
88 eina_inline_rbtree.x eina_inline_mempool.x \
89 eina_inline_rectangle.x eina_inline_trash.x eina_trash.h \
90 eina_iterator.h eina_main.h eina_cpu.h eina_sched.h \
91 eina_tiler.h eina_hamster.h eina_matrixsparse.h \
92 eina_inline_tiler.x eina_str.h eina_inline_str.x eina_strbuf.h \
93 eina_ustrbuf.h eina_unicode.h eina_quadtree.h \
94 eina_simple_xml_parser.h eina_lock.h eina_prefix.h \
95 eina_refcount.h eina_mmap.h eina_xattr.h \
96 eina_inline_lock_wince.x eina_inline_lock_win32.x \
97 eina_inline_lock_posix.x eina_inline_lock_void.x
98am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
99am__vpath_adj = case $$p in \
100 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
101 *) f=$$p;; \
102 esac;
103am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
104am__install_max = 40
105am__nobase_strip_setup = \
106 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
107am__nobase_strip = \
108 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
109am__nobase_list = $(am__nobase_strip_setup); \
110 for p in $$list; do echo "$$p $$p"; done | \
111 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
112 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
113 if (++n[$$2] == $(am__install_max)) \
114 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
115 END { for (dir in files) print dir, files[dir] }'
116am__base_list = \
117 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
118 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
119am__installdirs = "$(DESTDIR)$(installed_headersdir)" \
120 "$(DESTDIR)$(installed_mainheaderdir)"
121DATA = $(dist_installed_headers_DATA) \
122 $(dist_installed_mainheader_DATA)
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294EINAHEADERS = eina_safety_checks.h eina_error.h eina_log.h \
295 eina_inline_log.x eina_fp.h eina_inline_f32p32.x \
296 eina_inline_f16p16.x eina_inline_f8p24.x eina_inline_fp.x \
297 eina_hash.h eina_inline_hash.x eina_lalloc.h eina_clist.h \
298 eina_inlist.h eina_list.h eina_file.h eina_mempool.h \
299 eina_module.h eina_rectangle.h eina_types.h eina_array.h \
300 eina_counter.h eina_inline_array.x eina_magic.h \
301 eina_stringshare.h eina_binshare.h eina_binbuf.h \
302 eina_ustringshare.h eina_inline_stringshare.x \
303 eina_inline_ustringshare.x eina_inline_list.x eina_accessor.h \
304 eina_convert.h eina_rbtree.h eina_benchmark.h \
305 eina_inline_rbtree.x eina_inline_mempool.x \
306 eina_inline_rectangle.x eina_inline_trash.x eina_trash.h \
307 eina_iterator.h eina_main.h eina_cpu.h eina_sched.h \
308 eina_tiler.h eina_hamster.h eina_matrixsparse.h \
309 eina_inline_tiler.x eina_str.h eina_inline_str.x eina_strbuf.h \
310 eina_ustrbuf.h eina_unicode.h eina_quadtree.h \
311 eina_simple_xml_parser.h eina_lock.h eina_prefix.h \
312 eina_refcount.h eina_mmap.h eina_xattr.h $(am__append_1) \
313 $(am__append_2) $(am__append_3) $(am__append_4)
314installed_mainheaderdir = $(includedir)/eina-@VMAJ@
315dist_installed_mainheader_DATA = Eina.h eina_config.h
316installed_headersdir = $(includedir)/eina-@VMAJ@/eina
317dist_installed_headers_DATA = $(EINAHEADERS)
318EXTRA_DIST = \
319eina_config.h.in
320
321all: all-am
322
323.SUFFIXES:
324$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
325 @for dep in $?; do \
326 case '$(am__configure_deps)' in \
327 *$$dep*) \
328 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
329 && { if test -f $@; then exit 0; else break; fi; }; \
330 exit 1;; \
331 esac; \
332 done; \
333 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/include/Makefile'; \
334 $(am__cd) $(top_srcdir) && \
335 $(AUTOMAKE) --gnu src/include/Makefile
336.PRECIOUS: Makefile
337Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
338 @case '$?' in \
339 *config.status*) \
340 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
341 *) \
342 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
343 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
344 esac;
345
346$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
347 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
348
349$(top_srcdir)/configure: $(am__configure_deps)
350 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
351$(ACLOCAL_M4): $(am__aclocal_m4_deps)
352 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
353$(am__aclocal_m4_deps):
354eina_config.h: $(top_builddir)/config.status $(srcdir)/eina_config.h.in
355 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
356
357mostlyclean-libtool:
358 -rm -f *.lo
359
360clean-libtool:
361 -rm -rf .libs _libs
362install-dist_installed_headersDATA: $(dist_installed_headers_DATA)
363 @$(NORMAL_INSTALL)
364 test -z "$(installed_headersdir)" || $(MKDIR_P) "$(DESTDIR)$(installed_headersdir)"
365 @list='$(dist_installed_headers_DATA)'; test -n "$(installed_headersdir)" || list=; \
366 for p in $$list; do \
367 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
368 echo "$$d$$p"; \
369 done | $(am__base_list) | \
370 while read files; do \
371 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_headersdir)'"; \
372 $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_headersdir)" || exit $$?; \
373 done
374
375uninstall-dist_installed_headersDATA:
376 @$(NORMAL_UNINSTALL)
377 @list='$(dist_installed_headers_DATA)'; test -n "$(installed_headersdir)" || list=; \
378 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
379 test -n "$$files" || exit 0; \
380 echo " ( cd '$(DESTDIR)$(installed_headersdir)' && rm -f" $$files ")"; \
381 cd "$(DESTDIR)$(installed_headersdir)" && rm -f $$files
382install-dist_installed_mainheaderDATA: $(dist_installed_mainheader_DATA)
383 @$(NORMAL_INSTALL)
384 test -z "$(installed_mainheaderdir)" || $(MKDIR_P) "$(DESTDIR)$(installed_mainheaderdir)"
385 @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \
386 for p in $$list; do \
387 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
388 echo "$$d$$p"; \
389 done | $(am__base_list) | \
390 while read files; do \
391 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installed_mainheaderdir)'"; \
392 $(INSTALL_DATA) $$files "$(DESTDIR)$(installed_mainheaderdir)" || exit $$?; \
393 done
394
395uninstall-dist_installed_mainheaderDATA:
396 @$(NORMAL_UNINSTALL)
397 @list='$(dist_installed_mainheader_DATA)'; test -n "$(installed_mainheaderdir)" || list=; \
398 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
399 test -n "$$files" || exit 0; \
400 echo " ( cd '$(DESTDIR)$(installed_mainheaderdir)' && rm -f" $$files ")"; \
401 cd "$(DESTDIR)$(installed_mainheaderdir)" && rm -f $$files
402tags: TAGS
403TAGS:
404
405ctags: CTAGS
406CTAGS:
407
408
409distdir: $(DISTFILES)
410 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
411 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
412 list='$(DISTFILES)'; \
413 dist_files=`for file in $$list; do echo $$file; done | \
414 sed -e "s|^$$srcdirstrip/||;t" \
415 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
416 case $$dist_files in \
417 */*) $(MKDIR_P) `echo "$$dist_files" | \
418 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
419 sort -u` ;; \
420 esac; \
421 for file in $$dist_files; do \
422 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
423 if test -d $$d/$$file; then \
424 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
425 if test -d "$(distdir)/$$file"; then \
426 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
427 fi; \
428 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
429 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
430 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
431 fi; \
432 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
433 else \
434 test -f "$(distdir)/$$file" \
435 || cp -p $$d/$$file "$(distdir)/$$file" \
436 || exit 1; \
437 fi; \
438 done
439check-am: all-am
440check: check-am
441all-am: Makefile $(DATA)
442installdirs:
443 for dir in "$(DESTDIR)$(installed_headersdir)" "$(DESTDIR)$(installed_mainheaderdir)"; do \
444 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
445 done
446install: install-am
447install-exec: install-exec-am
448install-data: install-data-am
449uninstall: uninstall-am
450
451install-am: all-am
452 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
453
454installcheck: installcheck-am
455install-strip:
456 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
457 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
458 `test -z '$(STRIP)' || \
459 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
460mostlyclean-generic:
461
462clean-generic:
463
464distclean-generic:
465 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
466 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
467
468maintainer-clean-generic:
469 @echo "This command is intended for maintainers to use"
470 @echo "it deletes files that may require special tools to rebuild."
471 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
472clean: clean-am
473
474clean-am: clean-generic clean-libtool mostlyclean-am
475
476distclean: distclean-am
477 -rm -f Makefile
478distclean-am: clean-am distclean-generic
479
480dvi: dvi-am
481
482dvi-am:
483
484html: html-am
485
486html-am:
487
488info: info-am
489
490info-am:
491
492install-data-am: install-dist_installed_headersDATA \
493 install-dist_installed_mainheaderDATA
494
495install-dvi: install-dvi-am
496
497install-dvi-am:
498
499install-exec-am:
500
501install-html: install-html-am
502
503install-html-am:
504
505install-info: install-info-am
506
507install-info-am:
508
509install-man:
510
511install-pdf: install-pdf-am
512
513install-pdf-am:
514
515install-ps: install-ps-am
516
517install-ps-am:
518
519installcheck-am:
520
521maintainer-clean: maintainer-clean-am
522 -rm -f Makefile
523maintainer-clean-am: distclean-am maintainer-clean-generic
524
525mostlyclean: mostlyclean-am
526
527mostlyclean-am: mostlyclean-generic mostlyclean-libtool
528
529pdf: pdf-am
530
531pdf-am:
532
533ps: ps-am
534
535ps-am:
536
537uninstall-am: uninstall-dist_installed_headersDATA \
538 uninstall-dist_installed_mainheaderDATA
539
540.MAKE: install-am install-strip
541
542.PHONY: all all-am check check-am clean clean-generic clean-libtool \
543 distclean distclean-generic distclean-libtool distdir dvi \
544 dvi-am html html-am info info-am install install-am \
545 install-data install-data-am \
546 install-dist_installed_headersDATA \
547 install-dist_installed_mainheaderDATA install-dvi \
548 install-dvi-am install-exec install-exec-am install-html \
549 install-html-am install-info install-info-am install-man \
550 install-pdf install-pdf-am install-ps install-ps-am \
551 install-strip installcheck installcheck-am installdirs \
552 maintainer-clean maintainer-clean-generic mostlyclean \
553 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
554 uninstall uninstall-am uninstall-dist_installed_headersDATA \
555 uninstall-dist_installed_mainheaderDATA
556
557
558# Tell versions [3.59,3.63) of GNU make to not export all variables.
559# Otherwise a system limit (for SysV at least) may be exceeded.
560.NOEXPORT:
diff --git a/libraries/eina/src/include/eina_accessor.h b/libraries/eina/src/include/eina_accessor.h
new file mode 100644
index 0000000..cae7a5c
--- /dev/null
+++ b/libraries/eina/src/include/eina_accessor.h
@@ -0,0 +1,340 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_ACCESSOR_H__
20#define EINA_ACCESSOR_H__
21
22#include "eina_config.h"
23
24#include "eina_types.h"
25#include "eina_magic.h"
26
27/**
28 * @page eina_accessor_example_01_page Eina_Accessor usage
29 * @dontinclude eina_accessor_01.c
30 *
31 * We start by including necessary headers, declaring variables and
32 * initializing eina:
33 * @skip #include
34 * @until eina_init
35 *
36 * Next we populate our array and list:
37 * @until }
38 *
39 * Now that we have two containers populated we can actually start the example
40 * and create an accessor:
41 * @until accessor_new
42 *
43 * Once having the accessor we can use it to access certain elements in the
44 * container:
45 * @until }
46 * @note Unlike iterators accessors allow us non-linear access, which allows us
47 * to print only the odd elements in the container.
48 *
49 * As with every other resource we allocate we need to free the accessor(and the
50 * array):
51 * @until array_free
52 *
53 * Now we create another accessor, this time for the list:
54 * @until accessor_new
55 *
56 * And now the interesting bit, we use the same code we used above to print
57 * parts of the array to print parts of the list:
58 * @until }
59 *
60 * And to free the list we use a gimmick, instead of freeing @a list, we ask the
61 * accessor for it's container and free that:
62 * @until list_free
63 *
64 * Finally we shut eina down and leave:
65 * @until }
66 *
67 * The full source code can be found on the examples folder
68 * on the @ref eina_accessor_01_c "eina_accessor_01.c" file.
69 */
70
71/**
72 * @page eina_accessor_01_c Eina_Accessor usage example
73 *
74 * @include eina_accessor_01.c
75 * @example eina_accessor_01.c
76 */
77
78/**
79 * @addtogroup Eina_Accessor_Group Accessor Functions
80 *
81 * @brief These functions manage accessor on containers.
82 *
83 * These functions allow to access elements of a container in a
84 * generic way, without knowing which container is used (a bit like
85 * iterators in the C++ STL). Accessors allows random access (that is, any
86 * element in the container). For sequential access, see
87 * @ref Eina_Iterator_Group.
88 *
89 * An accessor is created from container data types, so no creation
90 * function is available here. An accessor is deleted with
91 * eina_accessor_free(). To get the data of an element at a given
92 * position, use eina_accessor_data_get(). To call a function on
93 * chosen elements of a container, use eina_accessor_over().
94 *
95 * See an example @ref eina_accessor_example_01_page "here".
96 */
97
98/**
99 * @addtogroup Eina_Content_Access_Group Content Access
100 *
101 * @{
102 */
103
104/**
105 * @defgroup Eina_Accessor_Group Accessor Functions
106 *
107 * @{
108 */
109
110/**
111 * @typedef Eina_Accessor
112 * Abstract type for accessors.
113 */
114typedef struct _Eina_Accessor Eina_Accessor;
115
116/**
117 * @typedef Eina_Accessor_Get_At_Callback
118 * Type for a callback that returns the data of a container as the given index.
119 */
120typedef Eina_Bool (*Eina_Accessor_Get_At_Callback)(Eina_Accessor *it,
121 unsigned int idx,
122 void **data);
123
124/**
125 * @typedef Eina_Accessor_Get_Container_Callback
126 * Type for a callback that returns the container.
127 */
128typedef void *(*Eina_Accessor_Get_Container_Callback)(Eina_Accessor *it);
129
130/**
131 * @typedef Eina_Accessor_Free_Callback
132 * Type for a callback that frees the container.
133 */
134typedef void (*Eina_Accessor_Free_Callback)(Eina_Accessor *it);
135
136/**
137 * @typedef Eina_Accessor_Lock_Callback
138 * Type for a callback that lock the container.
139 */
140typedef Eina_Bool (*Eina_Accessor_Lock_Callback)(Eina_Accessor *it);
141
142/**
143 * @struct _Eina_Accessor
144 * Type to provide random access to data structures.
145 */
146struct _Eina_Accessor
147{
148#define EINA_ACCESSOR_VERSION 1
149 int version; /**< Version of the Accessor API. */
150
151 Eina_Accessor_Get_At_Callback get_at EINA_ARG_NONNULL(1, 3) EINA_WARN_UNUSED_RESULT; /**< Callback called when a data element is requested. */
152 Eina_Accessor_Get_Container_Callback get_container EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is requested. */
153 Eina_Accessor_Free_Callback free EINA_ARG_NONNULL(1); /**< Callback called when the container is freed. */
154
155 Eina_Accessor_Lock_Callback lock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is locked. */
156 Eina_Accessor_Lock_Callback unlock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is unlocked. */
157
158#define EINA_MAGIC_ACCESSOR 0x98761232
159 EINA_MAGIC
160};
161
162/**
163 * @def FUNC_ACCESSOR_GET_AT(Function)
164 * Helper macro to cast @p Function to a Eina_Accessor_Get_At_Callback.
165 */
166#define FUNC_ACCESSOR_GET_AT(Function) ((Eina_Accessor_Get_At_Callback)Function)
167
168/**
169 * @def FUNC_ACCESSOR_GET_CONTAINER(Function)
170 * Helper macro to cast @p Function to a Eina_Accessor_Get_Container_Callback.
171 */
172#define FUNC_ACCESSOR_GET_CONTAINER(Function) ((Eina_Accessor_Get_Container_Callback)Function)
173
174/**
175 * @def FUNC_ACCESSOR_FREE(Function)
176 * Helper macro to cast @p Function to a Eina_Accessor_Free_Callback.
177 */
178#define FUNC_ACCESSOR_FREE(Function) ((Eina_Accessor_Free_Callback)Function)
179
180/**
181 * @def FUNC_ACCESSOR_LOCK(Function)
182 * Helper macro to cast @p Function to a Eina_Iterator_Lock_Callback.
183 */
184#define FUNC_ACCESSOR_LOCK(Function) ((Eina_Accessor_Lock_Callback)Function)
185
186
187/**
188 * @brief Free an accessor.
189 *
190 * @param accessor The accessor to free.
191 *
192 * This function frees @p accessor if it is not @c NULL;
193 */
194EAPI void eina_accessor_free(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
195
196/**
197 * @brief Retrieve the data of an accessor at a given position.
198 *
199 * @param accessor The accessor.
200 * @param position The position of the element.
201 * @param data The pointer that stores the data to retrieve.
202 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
203 *
204 * This function retrieves the data of the element pointed by
205 * @p accessor at the porition @p position, and stores it in
206 * @p data. If @p accessor is @c NULL or if an error occurred,
207 * #EINA_FALSE is returned, otherwise EINA_TRUE is returned.
208 */
209EAPI Eina_Bool eina_accessor_data_get(Eina_Accessor *accessor,
210 unsigned int position,
211 void **data) EINA_ARG_NONNULL(1);
212
213/**
214 * @brief Return the container of an accessor.
215 *
216 * @param accessor The accessor.
217 * @return The container which created the accessor.
218 *
219 * This function returns the container which created @p accessor. If
220 * @p accessor is @c NULL, this function returns @c NULL.
221 */
222EAPI void *eina_accessor_container_get(Eina_Accessor *accessor) EINA_ARG_NONNULL(1) EINA_PURE;
223
224/**
225 * @brief Iterate over the container and execute a callback on chosen elements.
226 *
227 * @param accessor The accessor.
228 * @param cb The callback called on the chosen elements.
229 * @param start The position of the first element.
230 * @param end The position of the last element.
231 * @param fdata The data passed to the callback.
232 *
233 * This function iterates over the elements pointed by @p accessor,
234 * starting from the element at position @p start and ending to the
235 * element at position @p end. For Each element, the callback
236 * @p cb is called with the data @p fdata. If @p accessor is @c NULL
237 * or if @p start is greter or equal than @p end, the function returns
238 * immediately.
239 */
240EAPI void eina_accessor_over(Eina_Accessor *accessor,
241 Eina_Each_Cb cb,
242 unsigned int start,
243 unsigned int end,
244 const void *fdata) EINA_ARG_NONNULL(1, 2);
245
246/**
247 * @brief Lock the container of the accessor.
248 *
249 * @param accessor The accessor.
250 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
251 *
252 * If the container of the @p accessor permits it, it will be locked. When a
253 * container is locked calling eina_accessor_over() on it will return
254 * immediately. If @p accessor is @c NULL or if a problem occurred, #EINA_FALSE
255 * is returned, otherwise #EINA_TRUE is returned. If the container isn't
256 * lockable, it will return EINA_TRUE.
257 *
258 * @warning None of the existing eina data structures are lockable.
259 */
260EAPI Eina_Bool eina_accessor_lock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
261
262/**
263 * @brief Unlock the container of the accessor.
264 *
265 * @param accessor The accessor.
266 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
267 *
268 * If the container of the @p accessor permits it and was previously
269 * locked, it will be unlocked. If @p accessor is @c NULL or if a
270 * problem occurred, #EINA_FALSE is returned, otherwise #EINA_TRUE
271 * is returned. If the container is not lockable, it will return
272 * EINA_TRUE.
273 *
274 * @warning None of the existing eina data structures are lockable.
275 */
276EAPI Eina_Bool eina_accessor_unlock(Eina_Accessor *accessor) EINA_ARG_NONNULL(1);
277
278/**
279 * @def EINA_ACCESSOR_FOREACH
280 * @brief Macro to iterate over all elements easily.
281 *
282 * @param accessor The accessor to use.
283 * @param counter A counter used by eina_accessor_data_get() when
284 * iterating over the container.
285 * @param data Where to store * data, must be a pointer support getting
286 * its address since * eina_accessor_data_get() requires a pointer to
287 * pointer!
288 *
289 * This macro allows a convenient way to loop over all elements in an
290 * accessor, very similar to EINA_LIST_FOREACH().
291 *
292 * This macro can be used for freeing the data of a list, like in the
293 * following example. It has the same goal as the one documented in
294 * EINA_LIST_FOREACH(), but using accessors:
295 *
296 * @code
297 * Eina_List *list;
298 * Eina_Accessor *accessor;
299 * unsigned int i;
300 * char *data;
301 *
302 * // list is already filled,
303 * // its elements are just duplicated strings
304 *
305 * accessor = eina_list_accessor_new(list);
306 * EINA_ACCESSOR_FOREACH(accessor, i, data)
307 * free(data);
308 * eina_accessor_free(accessor);
309 * eina_list_free(list);
310 * @endcode
311 *
312 * @note if the datatype provides both iterators and accessors prefer
313 * to use iterators to iterate over, as they're likely to be more
314 * optimized for such task.
315 *
316 * @note this example is not optimal algorithm to release a list since
317 * it will walk the list twice, but it serves as an example. For
318 * optimized version use EINA_LIST_FREE()
319 *
320 * @warning unless explicitly stated in functions returning accessors,
321 * do not modify the accessed object while you walk it, in this
322 * example using lists, do not remove list nodes or you might
323 * crash! This is not a limitiation of accessors themselves,
324 * rather in the accessors implementations to keep them as simple
325 * and fast as possible.
326 */
327#define EINA_ACCESSOR_FOREACH(accessor, counter, data) \
328 for ((counter) = 0; \
329 eina_accessor_data_get((accessor), (counter), (void **)(void *)&(data)); \
330 (counter)++)
331
332/**
333 * @}
334 */
335
336/**
337 * @}
338 */
339
340#endif
diff --git a/libraries/eina/src/include/eina_array.h b/libraries/eina/src/include/eina_array.h
new file mode 100644
index 0000000..d33f5e9
--- /dev/null
+++ b/libraries/eina/src/include/eina_array.h
@@ -0,0 +1,449 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_ARRAY_H_
20#define EINA_ARRAY_H_
21
22#include <stdlib.h>
23
24#include "eina_config.h"
25
26#include "eina_types.h"
27#include "eina_error.h"
28#include "eina_iterator.h"
29#include "eina_accessor.h"
30#include "eina_magic.h"
31
32
33/**
34 * @page array_01_example_page Basic array usage
35 * @dontinclude eina_array_01.c
36 *
37 * For this example we add stdlib.h, stdio.h and string.h for some
38 * convenience functions. The first thing to do to be able to use an
39 * @ref Eina_Array is to include Eina.h:
40 * @skip #include
41 * @until Eina.h
42 *
43 * Here we have a callback that prints the element given to it:
44 * @until }
45 *
46 * Now we create our entry point and declare some variables, nothing especial:
47 * @until unsigned
48 *
49 * Before we can start using any array function we need to initialize eina:
50 * @until eina_init
51 *
52 * So now to actually creating our array. The only interesting thing here is the
53 * argument given to the eina_array_new() function, this argument sets how fast
54 * the array grows.
55 * @until array_new
56 *
57 * If you know before hand how big the array will need to be you should set the
58 * step to that. In our case we can set it to the number of string we have and
59 * since we didn't do that in the eina_array_new() we can do it now:
60 * @until array_step_set
61 *
62 * Now let us populate our array with some strings:
63 * @until push
64 * @note Notice we use strdup, so we will have to free that memory later on.
65 *
66 * Now lets check the size of the array:
67 * @until printf
68 *
69 * And now we call a function on every member of our array to print it:
70 * @until foreach
71 *
72 * One of the strenghts of @ref Eina_Array over @ref Eina_List is that it has
73 * very fast random access to elements, so this is very efficient:
74 * @until printf
75 *
76 * And now we free up the memory allocated with the strdup()s:
77 * @until free
78 *
79 * And the array memory itself:
80 * @until array_free
81 *
82 * And finally shutdown eina and exit:
83 * @until }
84 *
85 * The full source code can be found on the examples folder
86 * on the @ref eina_array_01_c "eina_array_01.c" file.
87 */
88
89/**
90 * @page eina_array_01_c Basic array usage example
91 *
92 * @include eina_array_01.c
93 * @example eina_array_01.c
94 */
95
96/**
97 * @page array_02_example_page Removing array elements
98 * @dontinclude eina_array_02.c
99 *
100 * Just the usual includes:
101 * @skip #include
102 * @until Eina.h
103 *
104 * This the callback we are going to use to decide which strings stay on the
105 * array and which will be removed, we use something simple, but this can be as
106 * complex as you like:
107 * @until }
108 *
109 * This is the same code we used before to populate the list with the slight
110 * difference of not using strdup:
111 * @until array_push
112 *
113 * So we have added all our elements to the array, but it turns out that is not
114 * the elements we wanted, so let's empty the array and add the correct strings:
115 * @until array_push
116 *
117 * It seems we made a little mistake in one of our strings so we need to replace
118 * it, here is how:
119 * @until data_set
120 *
121 * Now that there is a populated array we can remove elements from it easily:
122 * @until array_remove
123 *
124 * And check that the elements were actually removed:
125 * @until printf
126 *
127 * Since this time we didn't use strdup we don't need to free each string:
128 * @until }
129 *
130 * The full source code can be found on the examples folder
131 * on the @ref eina_array_02_c "eina_array_02.c" file.
132 */
133
134/**
135 * @page eina_array_02_c Basic array usage example
136 *
137 * @include eina_array_02.c
138 * @example eina_array_02.c
139 */
140
141/**
142 * @addtogroup Eina_Array_Group Array
143 *
144 * @brief These functions provide array management.
145 *
146 * The Array data type in Eina is designed to have very fast access to
147 * its data (compared to the Eina @ref Eina_List_Group). On the other hand,
148 * data can be added or removed only at the end of the array. To insert
149 * data at any place, the Eina @ref Eina_List_Group is the correct container
150 * to use.
151 *
152 * To use the array data type, eina_init() must be called before any
153 * other array functions. When no more eina array functions are used,
154 * eina_shutdown() must be called to free all the resources.
155 *
156 * An array must be created with eina_array_new(). It allocates all
157 * the necessary data for an array. When not needed anymore, an array
158 * is freed with eina_array_free(). This function does not free any
159 * allocated memory used to store the data of each element. For that,
160 * just iterate over the array to free them. A convenient way to do
161 * that is by using #EINA_ARRAY_ITER_NEXT. An example of code is given
162 * in the description of this macro.
163 *
164 * @warning Functions do not check if the used array is valid or not. It's up to
165 * the user to be sure of that. It is designed like that for performance
166 * reasons.
167 *
168 * The usual features of an array are classic ones: to append an
169 * element, use eina_array_push() and to remove the last element, use
170 * eina_array_pop(). To retrieve the element at a given position, use
171 * eina_array_data_get(). The number of elements can be retrieved with
172 * eina_array_count_get().
173 *
174 * Eina_Array is different from a conventional C array in a number of ways, most
175 * importantly they grow and shrink dynamically, this means that if you add an
176 * element to a full array it grows and that when you remove an element from an
177 * array it @b may shrink.
178 *
179 * When the array needs to grow it allocates memory not just for the element
180 * currently being added since that would mean allocating memory(which is
181 * computationally expensive) often, instead it grows to be able to hold @p step
182 * more elements. Similarly if you remove elements in such a way that that the
183 * array is left holding its capacity - @p step elements it will shrink.
184 *
185 * The following image illustrates how an Eina_Array grows:
186 *
187 * @image html eina_array-growth.png
188 * @image latex eina_array-growth.eps width=\textwidth
189 *
190 * Eina_Array only stores pointers but it can store data of any type in the form
191 * of void pointers.
192 *
193 * See here some examples:
194 * @li @ref array_01_example_page
195 * @li @ref array_02_example_page
196 */
197
198/**
199 * @addtogroup Eina_Data_Types_Group Data Types
200 *
201 * @{
202 */
203
204/**
205 * @addtogroup Eina_Containers_Group Containers
206 *
207 * @{
208 */
209
210/**
211 * @defgroup Eina_Array_Group Array
212 *
213 * @{
214 */
215
216/**
217 * @typedef Eina_Array
218 * Type for a generic vector.
219 */
220typedef struct _Eina_Array Eina_Array;
221
222/**
223 * @typedef Eina_Array_Iterator
224 * Type for an iterator on arrays, used with #EINA_ARRAY_ITER_NEXT.
225 */
226typedef void **Eina_Array_Iterator;
227
228/**
229 * @struct _Eina_Array
230 * Type for an array of data.
231 */
232struct _Eina_Array
233{
234#define EINA_ARRAY_VERSION 1
235 int version; /**< Should match EINA_ARRAY_VERSION used when compiled your apps, provided for ABI compatibility */
236
237 void **data; /**< Pointer to a vector of pointer to payload */
238 unsigned int total; /**< Total number of slots in the vector */
239 unsigned int count; /**< Number of active slots in the vector */
240 unsigned int step; /**< How much must we grow the vector when it is full */
241 EINA_MAGIC
242};
243
244
245/**
246 * @brief Create a new array.
247 *
248 * @param step The count of pointers to add when increasing the array size.
249 * @return @c NULL on failure, non @c NULL otherwise.
250 *
251 * This function creates a new array. When adding an element, the array
252 * allocates @p step elements. When that buffer is full, then adding
253 * another element will increase the buffer by @p step elements again.
254 *
255 * This function return a valid array on success, or @c NULL if memory
256 * allocation fails. In that case, the error is set to
257 * #EINA_ERROR_OUT_OF_MEMORY.
258 */
259EAPI Eina_Array *eina_array_new(unsigned int step) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_WARN_UNUSED_RESULT;
260
261/**
262 * @brief Free an array.
263 *
264 * @param array The array to free.
265 *
266 * This function frees @p array. It calls first eina_array_flush() then
267 * free the memory of the pointer. It does not free the memory
268 * allocated for the elements of @p array. To free them, use
269 * #EINA_ARRAY_ITER_NEXT. For performance reasons, there is no check
270 * of @p array.
271 */
272EAPI void eina_array_free(Eina_Array *array) EINA_ARG_NONNULL(1);
273
274/**
275 * @brief Set the step of an array.
276 *
277 * @param array The array.
278 * @param sizeof_eina_array Should be the value returned by sizeof(Eina_Array).
279 * @param step The count of pointers to add when increasing the array size.
280 *
281 * This function sets the step of @p array to @p step. For performance
282 * reasons, there is no check of @p array. If it is @c NULL or
283 * invalid, the program may crash.
284 *
285 * @warning This function can @b only be called on uninitialized arrays.
286 */
287EAPI void eina_array_step_set(Eina_Array *array,
288 unsigned int sizeof_eina_array,
289 unsigned int step) EINA_ARG_NONNULL(1);
290/**
291 * @brief Clean an array.
292 *
293 * @param array The array to clean.
294 *
295 * This function sets the count member of @p array to 0, however it doesn't free
296 * any space. This is particularly useful if you need to empty the array and
297 * add lots of elements quickly. For performance reasons, there is no check of
298 * @p array. If it is @c NULL or invalid, the program may crash.
299 */
300static inline void eina_array_clean(Eina_Array *array) EINA_ARG_NONNULL(1);
301
302/**
303 * @brief Flush an array.
304 *
305 * @param array The array to flush.
306 *
307 * This function sets the count and total members of @p array to 0,
308 * frees and set to NULL its data member. For performance reasons,
309 * there is no check of @p array. If it is @c NULL or invalid, the
310 * program may crash.
311 */
312EAPI void eina_array_flush(Eina_Array *array) EINA_ARG_NONNULL(1);
313
314/**
315 * @brief Rebuild an array by specifying the data to keep.
316 *
317 * @param array The array.
318 * @param keep The functions which selects the data to keep.
319 * @param gdata The data to pass to the function keep.
320 * @return #EINA_TRUE on success, #EINA_FALSE oterwise.
321 *
322 * This function rebuilds @p array be specifying the elements to keep with the
323 * function @p keep. No empty/invalid fields are left in the array. @p gdata is
324 * an additional data to pass to @p keep. For performance reasons, there is no
325 * check of @p array. If it is @c NULL or invalid, the program may crash.
326 *
327 * If it wasn't able to remove items due to an allocation failure, it will
328 * return #EINA_FALSE and the error is set to #EINA_ERROR_OUT_OF_MEMORY.
329 */
330EAPI Eina_Bool eina_array_remove(Eina_Array * array,
331 Eina_Bool (*keep)(void *data, void *gdata),
332 void *gdata) EINA_ARG_NONNULL(1, 2);
333static inline Eina_Bool eina_array_push(Eina_Array *array,
334 const void *data) EINA_ARG_NONNULL(1, 2);
335static inline void *eina_array_pop(Eina_Array *array) EINA_ARG_NONNULL(1);
336static inline void *eina_array_data_get(const Eina_Array *array,
337 unsigned int idx) EINA_ARG_NONNULL(1);
338/**
339 * @brief Set the data at a given position in an array.
340 *
341 * @param array The array.
342 * @param idx The potition of the data to set.
343 * @param data The data to set.
344 *
345 * This function sets the data at the position @p idx in @p
346 * array to @p data, this effectively replaces the previously held data, you
347 * must therefore get a pointer to it first if you need to free it. For
348 * performance reasons, there is no check of @p array or @p idx. If it is @c
349 * NULL or invalid, the program may crash.
350*/
351static inline void eina_array_data_set(const Eina_Array *array,
352 unsigned int idx,
353 const void *data) EINA_ARG_NONNULL(1);
354static inline unsigned int eina_array_count_get(const Eina_Array *array) EINA_ARG_NONNULL(1);
355
356/**
357 * @brief Returned a new iterator associated to an array.
358 *
359 * @param array The array.
360 * @return A new iterator.
361 *
362 * This function returns a newly allocated iterator associated to
363 * @p array. If @p array is @c NULL or the count member of @p array is
364 * less or equal than 0, this function returns NULL. If the memory can
365 * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
366 * set. Otherwise, a valid iterator is returned.
367 */
368EAPI Eina_Iterator *eina_array_iterator_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
369
370/**
371 * @brief Returned a new accessor associated to an array.
372 *
373 * @param array The array.
374 * @return A new accessor.
375 *
376 * This function returns a newly allocated accessor associated to
377 * @p array. If @p array is @c NULL or the count member of @p array is
378 * less or equal than 0, this function returns NULL. If the memory can
379 * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
380 * set. Otherwise, a valid accessor is returned.
381 */
382EAPI Eina_Accessor *eina_array_accessor_new(const Eina_Array *array) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
383/**
384 * @brief Provide a safe way to iterate over an array
385 *
386 * @param array The array to iterate over.
387 * @param cb The callback to call for each item.
388 * @param fdata The user data to pass to the callback.
389 * @return EINA_TRUE if it successfully iterate all items of the array.
390 *
391 * This function provide a safe way to iterate over an array. @p cb should
392 * return EINA_TRUE as long as you want the function to continue iterating,
393 * by returning EINA_FALSE it will stop and return EINA_FALSE as a result.
394 */
395static inline Eina_Bool eina_array_foreach(Eina_Array *array,
396 Eina_Each_Cb cb,
397 void *data);
398/**
399 * @def EINA_ARRAY_ITER_NEXT
400 * @brief Macro to iterate over an array easily.
401 *
402 * @param array The array to iterate over.
403 * @param index The integer number that is increased while itareting.
404 * @param item The data
405 * @param iterator The iterator
406 *
407 * This macro allows the iteration over @p array in an easy way. It
408 * iterates from the first element to the last one. @p index is an
409 * integer that increases from 0 to the number of elements. @p item is
410 * the data of each element of @p array, so it is a pointer to a type
411 * chosen by the user. @p iterator is of type #Eina_Array_Iterator.
412 *
413 * This macro can be used for freeing the data of an array, like in
414 * the following example:
415 *
416 * @code
417 * Eina_Array *array;
418 * char *item;
419 * Eina_Array_Iterator iterator;
420 * unsigned int i;
421 *
422 * // array is already filled,
423 * // its elements are just duplicated strings,
424 * // EINA_ARRAY_ITER_NEXT will be used to free those strings
425 *
426 * EINA_ARRAY_ITER_NEXT(array, i, item, iterator)
427 * free(item);
428 * @endcode
429 */
430#define EINA_ARRAY_ITER_NEXT(array, index, item, iterator) \
431 for (index = 0, iterator = (array)->data; \
432 (index < eina_array_count_get(array)) && ((item = *((iterator)++))); \
433 ++(index))
434
435#include "eina_inline_array.x"
436
437/**
438 * @}
439 */
440
441/**
442 * @}
443 */
444
445/**
446 * @}
447 */
448
449#endif
diff --git a/libraries/eina/src/include/eina_benchmark.h b/libraries/eina/src/include/eina_benchmark.h
new file mode 100644
index 0000000..721e1c0
--- /dev/null
+++ b/libraries/eina/src/include/eina_benchmark.h
@@ -0,0 +1,453 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_BENCHMARK_H_
20#define EINA_BENCHMARK_H_
21
22#include "eina_array.h"
23
24
25
26/**
27 * @page tutorial_benchmark_page Benchmark Tutorial
28 *
29 * The Benchmark module allows you to write easily benchmarks
30 * framework in a project for timing critical part and detect slow
31 * parts of code. In addition it automatically creates data files of
32 * these benchmark, as well as a gnuplot file which can display the
33 * comparison curves of the benchmarks.
34 *
35 * @section tutorial_benchmark_basic_usage Basic Usage
36 *
37 * To create a basic benchmark, you have to follow these steps:
38 *
39 * @li Create a new bechmark
40 * @li Write the functions that wraps the the functions you want to
41 * bechmark.
42 * @li Register these wrappers functions.
43 * @li Run the benchmark.
44 * @li Free the memory.
45 *
46 * Here is a basic example of bechmark which creates two functions
47 * that will be run. These functions just print a message.
48 *
49 * @code
50 * #include <stdlib.h>
51 * #include <stdio.h>
52 *
53 * #include <Eina.h>
54 *
55 * static
56 * void work1(int request)
57 * {
58 * printf ("work1 in progress... Request: %d\n", request);
59 * }
60 *
61 * static
62 * void work2(int request)
63 * {
64 * printf ("work2 in progress... Request: %d\n", request);
65 * }
66 *
67 * int main()
68 * {
69 * Eina_Benchmark *test;
70 * Eina_Array *ea;
71 *
72 * if (!eina_init())
73 * return EXIT_FAILURE;
74 *
75 * test = eina_benchmark_new("test", "run");
76 * if (!test)
77 * goto shutdown_eina;
78 *
79 * eina_benchmark_register(test, "work-1", EINA_BENCHMARK(work1), 200, 300, 10);
80 * eina_benchmark_register(test, "work-2", EINA_BENCHMARK(work2), 100, 150, 5);
81 *
82 * ea = eina_benchmark_run(test);
83 *
84 * eina_benchmark_free(test);
85 * eina_shutdown();
86 *
87 * return EXIT_SUCCESS;
88 *
89 * shutdown_eina:
90 * eina_shutdown();
91 *
92 * return EXIT_FAILURE;
93 * }
94 * @endcode
95 *
96 * As "test", "run" are passed to eina_benchmark_new() and as the tests
97 * "work-1" and "work-2" are registered, the data files
98 * bench_test_run.work-1.data and bench_test_run.work-2.data will be
99 * created after the eina_benchmark_run() call. They contain four
100 * columns. The file bench_test_run.work-1.data contains for example:
101 *
102 * @code
103 * # specimen experiment time starting time ending time
104 * 200 23632 2852446 2876078
105 * 210 6924 2883046 2889970
106 * 220 6467 2895962 2902429
107 * 230 6508 2908271 2914779
108 * 240 6278 2920610 2926888
109 * 250 6342 2932830 2939172
110 * 260 6252 2944954 2951206
111 * 270 6463 2956978 2963441
112 * 280 6347 2969548 2975895
113 * 290 6457 2981702 2988159
114 * @endcode
115 *
116 * The first column (specimen) is the integer passed to the work1()
117 * function when the test is run. The second column (experiment time)
118 * is the time, in nanosecond, that work1() takes. The third and
119 * fourth columnd are self-explicit.
120 *
121 * You can see that the integer passed work1() starts from 200 and
122 * finishes at 290, with a step of 10. These values are computed withe
123 * last 3 values passed to eina_benchmark_register(). See the document
124 * of that function for the detailed behavior.
125 *
126 * The gnuplot file will be named bench_test_run.gnuplot. Just run:
127 *
128 * @code
129 * gnuplot bench_test_run.gnuplot
130 * @endcode
131 *
132 * to create the graphic of the comparison curves. The image file is
133 * named output_test_run.png.
134 *
135 * @section tutorial_benchmark_advanced_usage More Advanced Usage
136 *
137 * In this section, several test will be created and run. The idea is
138 * exactly the same than in the previous section, but with some basic
139 * automatic way to run all the benchmarks. The following code
140 * benchmarks some Eina converts functions, and some Eina containers
141 * types:
142 *
143 * @code
144 * #include <stdlib.h>
145 * #include <stdio.h>
146 * #include <time.h>
147 *
148 * #include <Eina.h>
149 *
150 * static void bench_convert(Eina_Benchmark *bench);
151 * static void bench_container(Eina_Benchmark *bench);
152 *
153 * typedef struct _Benchmark_Case Benchmark_Case;
154 *
155 * struct _Benchmark_Case
156 * {
157 * const char *bench_case;
158 * void (*build)(Eina_Benchmark *bench);
159 * };
160 *
161 * static const Benchmark_Case benchmarks[] = {
162 * { "Bench 1", bench_convert },
163 * { "Bench 2", bench_container },
164 * { NULL, NULL }
165 * };
166 *
167 * static
168 * void convert1(int request)
169 * {
170 * char tmp[128];
171 * int i;
172 *
173 * srand(time(NULL));
174 *
175 * for (i = 0; i < request; ++i)
176 * eina_convert_itoa(rand(), tmp);
177 * }
178 *
179 * static
180 * void convert2(int request)
181 * {
182 * char tmp[128];
183 * int i;
184 *
185 * srand(time(NULL));
186 *
187 * for (i = 0; i < request; ++i)
188 * eina_convert_xtoa(rand(), tmp);
189 * }
190 *
191 * static void
192 * bench_convert(Eina_Benchmark *bench)
193 * {
194 * eina_benchmark_register(bench, "convert-1", EINA_BENCHMARK(convert1), 200, 400, 10);
195 * eina_benchmark_register(bench, "convert-2", EINA_BENCHMARK(convert2), 200, 400, 10);
196 * }
197 *
198 * static
199 * void array(int request)
200 * {
201 * Eina_Array *array;
202 * Eina_Array_Iterator it;
203 * int *data;
204 * int i;
205 *
206 * srand(time(NULL));
207 *
208 * array = eina_array_new(64);
209 *
210 * for (i = 0; i < request; ++i)
211 * {
212 * data = (int *)malloc(sizeof(int));
213 * if (!data) continue;
214 * *data = rand();
215 * eina_array_push(array, data);
216 * }
217 *
218 * EINA_ARRAY_ITER_NEXT(array, i, data, it)
219 * free(data);
220 *
221 * eina_array_free(array);
222 * }
223 *
224 * static
225 * void list(int request)
226 * {
227 * Eina_List *l = NULL;
228 * int *data;
229 * int i;
230 *
231 * srand(time(NULL));
232 *
233 * for (i = 0; i < request; ++i)
234 * {
235 * data = (int *)malloc(sizeof(int));
236 * if (!data) continue;
237 * *data = rand();
238 * l = eina_list_prepend(l, data);
239 * }
240 *
241 * while (l)
242 * {
243 * free(eina_list_data_get(l));
244 * l = eina_list_remove_list(l, l);
245 * }
246 * }
247 *
248 * static void
249 * bench_container(Eina_Benchmark *bench)
250 * {
251 * eina_benchmark_register(bench, "array", EINA_BENCHMARK(array), 200, 300, 10);
252 * eina_benchmark_register(bench, "list", EINA_BENCHMARK(list), 200, 300, 10);
253 * }
254 *
255 * int main()
256 * {
257 * Eina_Benchmark *test;
258 * Eina_Array *ea;
259 * unsigned int i;
260 *
261 * if (!eina_init())
262 * return EXIT_FAILURE;
263 *
264 * for (i = 0; benchmarks[i].bench_case != NULL; ++i)
265 * {
266 * test = eina_benchmark_new(benchmarks[i].bench_case, "Benchmark example");
267 * if (!test)
268 * continue;
269 *
270 * benchmarks[i].build(test);
271 *
272 * ea = eina_benchmark_run(test);
273 *
274 * eina_benchmark_free(test);
275 * }
276 *
277 * eina_shutdown();
278 *
279 * return EXIT_SUCCESS;
280 * }
281 * @endcode
282 *
283 * gnuplot can be used to see how are performed the convert functions
284 * together, as well as how are performed the containers. So it is now
285 * easy to see that the hexadecimal convert function is faster than
286 * the decimal one, and that arrays are faster than lists.
287 *
288 * You can improve all that by executing automatically gnuplot in your
289 * program, or integrate the Eina benchmark framework in an autotooled
290 * project. See that
291 * <a href="http://trac.enlightenment.org/e/wiki/AutotoolsIntegration#Benchmark">page</a>
292 * for more informations.
293 *
294 */
295
296
297/**
298 * @addtogroup Eina_Benchmark_Group Benchmark
299 *
300 * These functions allow you to add benchmark framework in a project
301 * for timing critical part and detect slow parts of code. It is used
302 * in Eina to compare the time used by eina, glib, evas and ecore data
303 * types.
304 *
305 * To use the benchmark module, Eina must be initialized with
306 * eina_init() and later shut down with eina_shutdown(). A benchmark
307 * is created with eina_benchmark_new() and freed with
308 * eina_benchmark_free().
309 *
310 * eina_benchmark_register() adds a test to a benchmark. That test can
311 * be run a certain amount of times. Adding more than one test to be
312 * executed allows the comparison between several parts of a program,
313 * or different implementations.
314 *
315 * eina_benchmark_run() runs all the tests registered with
316 * eina_benchmark_register(). The amount of time of each test is
317 * written in a gnuplot file.
318 *
319 * For more information, you can look at the @ref tutorial_benchmark_page.
320 */
321
322/**
323 * @addtogroup Eina_Tools_Group Tools
324 *
325 * @{
326 */
327
328/**
329 * @defgroup Eina_Benchmark_Group Benchmark
330 *
331 * @{
332 */
333
334/**
335 * @typedef Eina_Benchmark
336 * Type for a benchmark.
337 */
338typedef struct _Eina_Benchmark Eina_Benchmark;
339
340/**
341 * @typedef Eina_Benchmark_Specimens
342 * Type for a test function to be called when running a benchmark.
343 */
344typedef void (*Eina_Benchmark_Specimens)(int request);
345
346/**
347 * @def EINA_BENCHMARK
348 * @brief cast to an #Eina_Benchmark_Specimens.
349 *
350 * @param function The function to cast.
351 *
352 * This macro casts @p function to Eina_Benchmark_Specimens.
353 */
354#define EINA_BENCHMARK(function) ((Eina_Benchmark_Specimens)function)
355
356
357/**
358 * @brief Create a new array.
359 *
360 * @param name The name of the benchmark.
361 * @param run The name of the run.
362 * @return @c NULL on failure, non @c NULL otherwise.
363 *
364 * This function creates a new benchmark. @p name and @p run are used
365 * to name the gnuplot file that eina_benchmark_run() will create.
366 *
367 * This function return a valid benchmark on success, or @c NULL if
368 * memory allocation fails. In that case, the error is set to
369 * #EINA_ERROR_OUT_OF_MEMORY.
370 *
371 * When the new module is not needed anymore, use
372 * eina_benchmark_free() to free the allocated memory.
373 */
374EAPI Eina_Benchmark *eina_benchmark_new(const char *name,
375 const char *run);
376
377/**
378 * @brief Free a benchmark object.
379 *
380 * @param bench The benchmark to free.
381 *
382 * This function removes all the benchmark tests that have been
383 * registered and frees @p bench. If @p bench is @c NULL, this
384 * function returns immediately.
385 */
386EAPI void eina_benchmark_free(Eina_Benchmark *bench);
387
388/**
389 * @brief Add a test to a benchmark.
390 *
391 * @param bench The benchmark.
392 * @param name The name of the test.
393 * @param bench_cb The test function to be called.
394 * @param count_start The start data to be passed to @p bench_cb.
395 * @param count_end The end data to be passed to @p bench_cb.
396 * @param count_step The step data to be passed to @p bench_cb.
397 * @return #EINA_FALSE on failure, #EINA_TRUE otherwise.
398 *
399 * This function adds the test named @p name to @p benchmark. @p
400 * bench_cb is the function called when the test is executed. That
401 * test can be executed a certain amount of time. @p start, @p end and
402 * @p step define a loop with a step increment. The integer that is
403 * increasing by @p step from @p start to @p end is passed to @p
404 * bench_cb when eina_benchmark_run() is called.
405 *
406 * If @p bench is @c NULL, this function returns imediatly. If the
407 * allocation of the memory of the test to add fails, the error is set
408 * to #EINA_ERROR_OUT_OF_MEMORY. This function returns #EINA_FALSE
409 * on failure, #EINA_TRUE otherwise.
410 */
411EAPI Eina_Bool eina_benchmark_register(Eina_Benchmark *bench,
412 const char *name,
413 Eina_Benchmark_Specimens bench_cb,
414 int count_start,
415 int count_end,
416 int count_set);
417
418/**
419 * @brief Run the benchmark tests that have been registered.
420 *
421 * @param bench The benchmark.
422 * @return The list of names of the test files.
423 *
424 * This function runs all the tests that as been registered with
425 * eina_benchmark_register() and save the result in a gnuplot
426 * file. The name of the file has the following format:
427 *
428 * @code
429 * bench_[name]_[run]%s.gnuplot
430 * @endcode
431 *
432 * where [name] and [run] are the values passed to
433 * eina_benchmark_new().
434 *
435 * Each registered test is executed and timed. The time is written to
436 * the gnuplot file. The number of times each test is executed is
437 * controlled by the parameters passed to eina_benchmark_register().
438 *
439 * If @p bench is @c NULL, this functions returns @c NULL
440 * immediately. Otherwise, it returns the list of the names of each
441 * test.
442 */
443EAPI Eina_Array *eina_benchmark_run(Eina_Benchmark *bench);
444
445/**
446 * @}
447 */
448
449/**
450 * @}
451 */
452
453#endif /* EINA_BENCHMARK_H_ */
diff --git a/libraries/eina/src/include/eina_binbuf.h b/libraries/eina/src/include/eina_binbuf.h
new file mode 100644
index 0000000..92f788e
--- /dev/null
+++ b/libraries/eina/src/include/eina_binbuf.h
@@ -0,0 +1,217 @@
1#ifndef EINA_BINBUF_H
2#define EINA_BINBUF_H
3
4#include <stddef.h>
5#include <stdarg.h>
6
7#include "eina_types.h"
8
9/**
10 * @addtogroup Eina_Binary_Buffer_Group Binary Buffer
11 *
12 * @brief These functions provide string buffers management.
13 *
14 * The Binary Buffer data type is designed to be a mutable string,
15 * allowing to append, prepend or insert a string to a buffer.
16 */
17
18/**
19 * @addtogroup Eina_Data_Types_Group Data Types
20 *
21 * @{
22 */
23
24/**
25 * @defgroup Eina_Binary_Buffer_Group Binary Buffer
26 *
27 * @{
28 */
29
30/**
31 * @typedef Eina_Binbuf
32 * Type for a string buffer.
33 */
34typedef struct _Eina_Strbuf Eina_Binbuf;
35
36/**
37 * @brief Create a new string buffer.
38 *
39 * @return Newly allocated string buffer instance.
40 *
41 * This function creates a new string buffer. On error, @c NULL is
42 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
43 * free the resources, use eina_binbuf_free().
44 *
45 * @see eina_binbuf_free()
46 * @see eina_binbuf_append()
47 * @see eina_binbuf_string_get()
48 */
49EAPI Eina_Binbuf *eina_binbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
50
51/**
52 * @brief Free a string buffer.
53 *
54 * @param buf The string buffer to free.
55 *
56 * This function frees the memory of @p buf. @p buf must have been
57 * created by eina_binbuf_new().
58 */
59EAPI void eina_binbuf_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
60
61/**
62 * @brief Reset a string buffer.
63 *
64 * @param buf The string buffer to reset.
65 *
66 * This function reset @p buf: the buffer len is set to 0, and the
67 * string is set to '\\0'. No memory is free'd.
68 */
69EAPI void eina_binbuf_reset(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
70
71/**
72 * @brief Append a string of exact length to a buffer, reallocating as necessary.
73 *
74 * @param buf The string buffer to append to.
75 * @param str The string to append.
76 * @param length The exact length to use.
77 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
78 *
79 * This function appends @p str to @p buf. @p str must be of size at
80 * most @p length. It is slightly faster than eina_binbuf_append() as
81 * it does not compute the size of @p str. It is useful when dealing
82 * with strings of known size, such as eina_strngshare. If @p buf
83 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
84 * returned.
85 *
86 * @see eina_stringshare_length()
87 * @see eina_binbuf_append()
88 * @see eina_binbuf_append_n()
89 */
90EAPI Eina_Bool eina_binbuf_append_length(Eina_Binbuf *buf, const unsigned char *str, size_t length) EINA_ARG_NONNULL(1, 2);
91
92/**
93 * @brief Append a character to a string buffer, reallocating as
94 * necessary.
95 *
96 * @param buf The string buffer to append to.
97 * @param c The char to append.
98 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
99 *
100 * This function inserts @p c to @p buf. If it can not insert it,
101 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
102 */
103EAPI Eina_Bool eina_binbuf_append_char(Eina_Binbuf *buf, unsigned char c) EINA_ARG_NONNULL(1);
104
105/**
106 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
107 *
108 * @param buf The string buffer to insert to.
109 * @param str The string to insert.
110 * @param length The exact length to use.
111 * @param pos The position to insert the string.
112 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
113 *
114 * This function inserts @p str to @p buf. @p str must be of size at
115 * most @p length. It is slightly faster than eina_binbuf_insert() as
116 * it does not compute the size of @p str. It is useful when dealing
117 * with strings of known size, such as eina_strngshare. If @p buf
118 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
119 * returned.
120 *
121 * @see eina_stringshare_length()
122 * @see eina_binbuf_insert()
123 * @see eina_binbuf_insert_n()
124 */
125EAPI Eina_Bool eina_binbuf_insert_length(Eina_Binbuf *buf, const unsigned char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
126
127/**
128 * @brief Insert a character to a string buffer, reallocating as
129 * necessary.
130 *
131 * @param buf The string buffer to insert to.
132 * @param c The char to insert.
133 * @param pos The position to insert the char.
134 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
135 *
136 * This function inserts @p c to @p buf at position @p pos. If @p buf
137 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
138 * returned.
139 */
140EAPI Eina_Bool eina_binbuf_insert_char(Eina_Binbuf *buf, unsigned char c, size_t pos) EINA_ARG_NONNULL(1);
141
142/**
143 * @brief Remove a slice of the given string buffer.
144 *
145 * @param buf The string buffer to remove a slice.
146 * @param start The initial (inclusive) slice position to start
147 * removing, in bytes.
148 * @param end The final (non-inclusive) slice position to finish
149 * removing, in bytes.
150 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
151 *
152 * This function removes a slice of @p buf, starting at @p start
153 * (inclusive) and ending at @p end (non-inclusive). Both values are
154 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
155 */
156
157EAPI Eina_Bool eina_binbuf_remove(Eina_Binbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
158
159/**
160 * @brief Retrieve a pointer to the contents of a string buffer
161 *
162 * @param buf The string buffer.
163 * @return The current string in the string buffer.
164 *
165 * This function returns the string contained in @p buf. The returned
166 * value must not be modified and will no longer be valid if @p buf is
167 * modified. In other words, any eina_binbuf_append() or similar will
168 * make that pointer invalid.
169 *
170 * @see eina_binbuf_string_steal()
171 */
172EAPI const unsigned char *eina_binbuf_string_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
173
174/**
175 * @brief Steal the contents of a string buffer.
176 *
177 * @param buf The string buffer to steal.
178 * @return The current string in the string buffer.
179 *
180 * This function returns the string contained in @p buf. @p buf is
181 * then initialized and does not own the returned string anymore. The
182 * caller must release the memory of the returned string by calling
183 * free().
184 *
185 * @see eina_binbuf_string_get()
186 */
187EAPI unsigned char *eina_binbuf_string_steal(Eina_Binbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
188
189/**
190 * @brief Free the contents of a string buffer but not the buffer.
191 *
192 * @param buf The string buffer to free the string of.
193 *
194 * This function frees the string contained in @p buf without freeing
195 * @p buf.
196 */
197EAPI void eina_binbuf_string_free(Eina_Binbuf *buf) EINA_ARG_NONNULL(1);
198
199/**
200 * @brief Retrieve the length of the string buffer content.
201 *
202 * @param buf The string buffer.
203 * @return The current length of the string, in bytes.
204 *
205 * This function returns the length of @p buf.
206 */
207EAPI size_t eina_binbuf_length_get(const Eina_Binbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
208
209/**
210 * @}
211 */
212
213/**
214 * @}
215 */
216
217#endif /* EINA_STRBUF_H */
diff --git a/libraries/eina/src/include/eina_binshare.h b/libraries/eina/src/include/eina_binshare.h
new file mode 100644
index 0000000..55b17a6
--- /dev/null
+++ b/libraries/eina/src/include/eina_binshare.h
@@ -0,0 +1,193 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 *
18 * This file incorporates work covered by the following copyright and
19 * permission notice:
20 *
21 * Copyright (C) 2008 Peter Wehrfritz
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to
25 * deal in the Software without restriction, including without limitation the
26 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
27 * sell copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies of the Software and its Copyright notices. In addition publicly
32 * documented acknowledgment must be given that this software has been used if no
33 * source code of this software is made available publicly. This includes
34 * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
35 * documents or any documentation provided with any product containing this
36 * software. This License does not apply to any software that links to the
37 * libraries provided by this software (statically or dynamically), but only to
38 * the software provided.
39 *
40 * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice
41 * and it's intent.
42 *
43 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
46 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
47 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
48 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49 */
50
51#ifndef EINA_BINSHARE_H_
52#define EINA_BINSHARE_H_
53
54#include "eina_types.h"
55
56/**
57 * @page tutorial_binshare_page Binary Share Tutorial
58 *
59 * Should call eina_binshare_init() before usage and eina_binshare_shutdown() after.
60 * to be written...
61 *
62 */
63
64/**
65 * @addtogroup Eina_Binshare_Group Binary Share
66 *
67 * These functions allow you to store one copy of an object, and use it
68 * throughout your program.
69 *
70 * This is a method to reduce the number of duplicated objects kept in
71 * memory.
72 *
73 * For more information, you can look at the @ref tutorial_binshare_page.
74 */
75
76/**
77 * @addtogroup Eina_Data_Types_Group Data Types
78 *
79 * @{
80 */
81
82/**
83 * @defgroup Eina_Binshare_Group Binary Share
84 *
85 * @{
86 */
87
88
89/**
90 * @brief Retrieve an instance of an object for use in a program.
91 *
92 * @param obj The binary object to retrieve an instance of.
93 * @param olen The byte size
94 * @return A pointer to an instance of the object on success.
95 * @c NULL on failure.
96 *
97 * This function retrieves an instance of @p obj. If @p obj is
98 * @c NULL, then @c NULL is returned. If @p obj is already stored, it
99 * is just returned and its reference counter is increased. Otherwise
100 * it is added to the objects to be searched and a duplicated object
101 * of @p obj is returned.
102 *
103 * This function does not check object size, but uses the
104 * exact given size. This can be used to share part of a larger
105 * object or subobject.
106 *
107 * @see eina_binshare_add()
108 */
109EAPI const void *eina_binshare_add_length(const void *obj,
110 unsigned int olen) EINA_PURE EINA_WARN_UNUSED_RESULT;
111
112/**
113 * Increment references of the given shared object.
114 *
115 * @param obj The shared object.
116 * @return A pointer to an instance of the object on success.
117 * @c NULL on failure.
118 *
119 * This is similar to eina_share_common_add(), but it's faster since it will
120 * avoid lookups if possible, but on the down side it requires the parameter
121 * to be shared before, in other words, it must be the return of a previous
122 * eina_binshare_add().
123 *
124 * There is no unref since this is the work of eina_binshare_del().
125 */
126EAPI const void *eina_binshare_ref(const void *obj);
127
128/**
129 * @brief Note that the given object has lost an instance.
130 *
131 * @param obj object The given object.
132 *
133 * This function decreases the reference counter associated to @p obj
134 * if it exists. If that counter reaches 0, the memory associated to
135 * @p obj is freed. If @p obj is NULL, the function returns
136 * immediately.
137 *
138 * Note that if the given pointer is not shared or NULL, bad things
139 * will happen, likely a segmentation fault.
140 */
141EAPI void eina_binshare_del(const void *obj);
142
143/**
144 * @brief Note that the given object @b must be shared.
145 *
146 * @param obj the shared object to know the length. It is safe to
147 * give NULL, in that case -1 is returned.
148 * @return The length of the shared object.
149 *
150 * This function is a cheap way to known the length of a shared
151 * object. Note that if the given pointer is not shared, bad
152 * things will happen, likely a segmentation fault. If in doubt, try
153 * strlen().
154 */
155EAPI int eina_binshare_length(const void *obj) EINA_WARN_UNUSED_RESULT;
156
157/**
158 * @brief Dump the contents of the share_common.
159 *
160 * This function dumps all objects in the share_common to stdout with a
161 * DDD: prefix per line and a memory usage summary.
162 */
163EAPI void eina_binshare_dump(void);
164
165/**
166 * @brief Retrieve an instance of a blob for use in a program.
167 *
168 * @param ptr The binary blob to retrieve an instance of.
169 * @return A pointer to an instance of the string on success.
170 * @c NULL on failure.
171 *
172 * This macro retrieves an instance of @p obj. If @p obj is
173 * @c NULL, then @c NULL is returned. If @p obj is already stored, it
174 * is just returned and its reference counter is increased. Otherwise
175 * it is added to the blobs to be searched and a duplicated blob
176 * of @p obj is returned.
177 *
178 * This macro essentially calls eina_binshare_add_length with ptr and sizeof(*ptr)
179 * as the parameters. It's useful for pointers to structures.
180 *
181 * @see eina_stringshare_add_length()
182 */
183#define eina_binshare_add(ptr) eina_binshare_add_length(ptr, sizeof(*ptr))
184
185/**
186 * @}
187 */
188
189/**
190 * @}
191 */
192
193#endif /* EINA_STRINGSHARE_H_ */
diff --git a/libraries/eina/src/include/eina_clist.h b/libraries/eina/src/include/eina_clist.h
new file mode 100644
index 0000000..68f15df
--- /dev/null
+++ b/libraries/eina/src/include/eina_clist.h
@@ -0,0 +1,456 @@
1/*
2 * Linked lists support
3 *
4 * Copyright (C) 2002 Alexandre Julliard
5 * Copyright (C) 2011 Mike McCormack (adapted for Eina)
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 */
21
22#ifndef __EINA_CLIST_H__
23#define __EINA_CLIST_H__
24
25/**
26 * @addtogroup Eina_CList_Group Compact inline list
27 * @brief Eina_Clist is a compact (inline) list implementation
28 *
29 * Elements of this list are members of the structs stored in the list
30 *
31 * Advantages over @ref Eina_List and @ref Eina_Inlist:
32 * - uses less memory (two machine words per item)
33 * - allows removing items without knowing which list they're in using O(1) time
34 * - no need to keep updating the head pointer as the list is changed
35 *
36 * Disadvantages:
37 * - O(N) time to calculate list length
38 * - requires one list entry in a struct per list (i.e. it's an inlist)
39 * - requires a head/tail pointer
40 * - need to know the list head when moving to next or previous pointer
41 *
42 * @note There's no NULL at the end of the list, the last item points to the head.
43 *
44 * @note List heads must be initialized with EINA_CLIST_INIT or by calling eina_clist_element_init
45 */
46
47/* Define a list like so:
48 *
49 * @code
50 * struct gadget
51 * {
52 * struct Eina_Clist entry; <-- doesn't have to be the first item in the struct
53 * int a, b;
54 * };
55 *
56 * static Eina_Clist global_gadgets = EINA_CLIST_INIT( global_gadgets );
57 * @endcode
58 *
59 * or
60 *
61 * @code
62 * struct some_global_thing
63 * {
64 * Eina_Clist gadgets;
65 * };
66 *
67 * eina_clist_init( &some_global_thing->gadgets );
68 * @endcode
69 *
70 * Manipulate it like this:
71 *
72 * @code
73 * eina_clist_add_head( &global_gadgets, &new_gadget->entry );
74 * eina_clist_remove( &new_gadget->entry );
75 * eina_clist_add_after( &some_random_gadget->entry, &new_gadget->entry );
76 * @endcode
77 *
78 * And to iterate over it:
79 *
80 * @code
81 * struct gadget *gadget;
82 * EINA_CLIST_FOR_EACH_ENTRY( gadget, &global_gadgets, struct gadget, entry )
83 * {
84 * ...
85 * }
86 * @endcode
87 *
88 */
89
90/**
91 * @addtogroup Eina_Data_Types_Group Data Types
92 *
93 * @{
94 */
95
96/**
97 * @addtogroup Eina_Containers_Group Containers
98 *
99 * @{
100 */
101
102/**
103 * @defgroup Eina_CList_Group Compact list
104 *
105 * @{
106 */
107
108/**
109 * @typedef Eina_Clist
110 * This is the list head and the list entry.
111 * @since 1.1.0
112 */
113typedef struct _Eina_Clist Eina_Clist;
114
115/**
116 * @struct _Eina_Clist
117 * Compact list type
118 * @note This structure is used as both the list head and the list entry.
119 * @since 1.1.0
120 */
121struct _Eina_Clist
122{
123 Eina_Clist *next;
124 Eina_Clist *prev;
125};
126
127/**
128 * Add an element after the specified one.
129 *
130 * @param elem An element in the list
131 * @param to_add The element to add to the list
132 * @pre The list head must be initialized once before adding anything.
133 * @pre The element is not in any list.
134 *
135 * @note There's no need to initialize an element before adding it to the list.
136 * @since 1.1.0
137 */
138static inline void eina_clist_add_after(Eina_Clist *elem, Eina_Clist *to_add)
139{
140 to_add->next = elem->next;
141 to_add->prev = elem;
142 elem->next->prev = to_add;
143 elem->next = to_add;
144}
145
146/**
147 * Add an element before the specified one.
148 *
149 * @param elem An element in the list
150 * @param to_add The element to add to the list
151 * @pre The list head must be initialized once before adding anything.
152 * @pre The element is not in any list.
153 *
154 * @note There's no need to initialize an element before adding it to the list.
155 * @since 1.1.0
156 */
157static inline void eina_clist_add_before(Eina_Clist *elem, Eina_Clist *to_add)
158{
159 to_add->next = elem;
160 to_add->prev = elem->prev;
161 elem->prev->next = to_add;
162 elem->prev = to_add;
163}
164
165/**
166 * Add element at the head of the list.
167 *
168 * @param list The list
169 * @param elem An element
170 * @pre The list head must be initialized once before adding anything.
171 * @pre The element is not in any list.
172 *
173 * @note There's no need to initialize an element before adding it to the list.
174 * @since 1.1.0
175 */
176static inline void eina_clist_add_head(Eina_Clist *list, Eina_Clist *elem)
177{
178 eina_clist_add_after(list, elem);
179}
180
181/**
182 * Add element at the tail of the list.
183 *
184 * @param list The list
185 * @param elem An element
186 * @pre The list head must be initialized once before adding anything.
187 * @pre The element is not in any list.
188 *
189 * @note There's no need to initialize an element before adding it to the list.
190 * @since 1.1.0
191 */
192static inline void eina_clist_add_tail(Eina_Clist *list, Eina_Clist *elem)
193{
194 eina_clist_add_before(list, elem);
195}
196
197/**
198 * Init an (unlinked) element.
199 *
200 * Call this function on elements that have not been added to the list
201 * if you want eina_clist_element_init() to work correctly
202 *
203 * @param elem An element
204 * @pre The element is not in any list.
205 * @post The element is marked as not being in any list
206 *
207 * @note It is not necessary to call this before adding an element to this list.
208 * @since 1.1.0
209 */
210static inline void eina_clist_element_init(Eina_Clist *elem)
211{
212 elem->next = NULL;
213 elem->prev = NULL;
214}
215
216/**
217 * Check if an element is in a list or not.
218 *
219 * @param elem An element
220 *
221 * @pre Either eina_clist_element_init() has been called on @a elem,
222 * it has been added to a list or remove from a list.
223 * @since 1.1.0
224 */
225static inline int eina_clist_element_is_linked(Eina_Clist *elem)
226{
227 return (elem->next != NULL && elem->prev != NULL);
228}
229
230/**
231 * Remove an element from its list.
232 *
233 * @param elem An element
234 * @pre The element is in a list already
235 * @post The element is marked as not being in any list
236 * @since 1.1.0
237 */
238static inline void eina_clist_remove(Eina_Clist *elem)
239{
240 elem->next->prev = elem->prev;
241 elem->prev->next = elem->next;
242 eina_clist_element_init(elem);
243}
244
245/**
246 * Get the next element.
247 *
248 * @param list The list
249 * @param elem An element
250 * @pre @a elem is in @a list
251 * @return The element after @elem in @list or NULL if @a elem is last in @a list
252 * @since 1.1.0
253 */
254static inline Eina_Clist *eina_clist_next(const Eina_Clist *list, const Eina_Clist *elem)
255{
256 Eina_Clist *ret = elem->next;
257 if (elem->next == list) ret = NULL;
258 return ret;
259}
260
261/**
262 * Get the previous element.
263 *
264 * @param list The list
265 * @param elem An element
266 *
267 * @return The element before @a elem or NULL if @a elem is the first in the list
268 * @since 1.1.0
269 */
270static inline Eina_Clist *eina_clist_prev(const Eina_Clist *list, const Eina_Clist *elem)
271{
272 Eina_Clist *ret = elem->prev;
273 if (elem->prev == list) ret = NULL;
274 return ret;
275}
276
277/**
278 * Get the first element.
279 *
280 * @param list The list
281 * @returns The first element in @a list or NULL if @a list is empty
282 * @since 1.1.0
283 */
284static inline Eina_Clist *eina_clist_head(const Eina_Clist *list)
285{
286 return eina_clist_next(list, list);
287}
288
289/**
290 * Get the last element.
291 *
292 * @param list The list
293 * @returns The last element in @a list or NULL if @list is empty
294 * @since 1.1.0
295 */
296static inline Eina_Clist *eina_clist_tail(const Eina_Clist *list)
297{
298 return eina_clist_prev(list, list);
299}
300
301/**
302 * Check if a list is empty.
303 *
304 * @param list The list
305 * @returns non-zero if @a list is empty, zero if it is not
306 * @since 1.1.0
307 */
308static inline int eina_clist_empty(const Eina_Clist *list)
309{
310 return list->next == list;
311}
312
313/**
314 * Initialize a list
315 *
316 * @param list The list
317 * @pre The list is uninitialized
318 * @post The list contains no items
319 *
320 * @note Don't call this function on a list with items
321 * @note This function must be called. Don't try do
322 * initialize the list by zero'ing out the list head.
323 * @since 1.1.0
324 */
325static inline void eina_clist_init(Eina_Clist *list)
326{
327 list->next = list->prev = list;
328}
329
330/**
331 * Count the elements of a list
332 *
333 * @param list The list
334 * @returns The number of items in the list
335 * @since 1.1.0
336 */
337static inline unsigned int eina_clist_count(const Eina_Clist *list)
338{
339 unsigned count = 0;
340 const Eina_Clist *ptr;
341 for (ptr = list->next; ptr != list; ptr = ptr->next) count++;
342 return count;
343}
344
345/**
346 * Move all elements from src to the tail of dst
347 *
348 * @param dst List to be appended to
349 * @param src List to append
350 *
351 * @post @a src is initialized but empty after this operation
352 * @since 1.1.0
353 */
354static inline void eina_clist_move_tail(Eina_Clist *dst, Eina_Clist *src)
355{
356 if (eina_clist_empty(src)) return;
357
358 dst->prev->next = src->next;
359 src->next->prev = dst->prev;
360 dst->prev = src->prev;
361 src->prev->next = dst;
362 eina_clist_init(src);
363}
364
365/**
366 * move all elements from src to the head of dst
367 *
368 * @param dst List to be prepended to
369 * @param src List to prepend
370 *
371 * @post @a src is initialized but empty after this operation
372 * @since 1.1.0
373 */
374static inline void eina_clist_move_head(Eina_Clist *dst, Eina_Clist *src)
375{
376 if (eina_clist_empty(src)) return;
377
378 dst->next->prev = src->prev;
379 src->prev->next = dst->next;
380 dst->next = src->next;
381 src->next->prev = dst;
382 eina_clist_init(src);
383}
384
385/**
386 * iterate through the list
387 */
388#define EINA_CLIST_FOR_EACH(cursor,list) \
389 for ((cursor) = (list)->next; (cursor) != (list); (cursor) = (cursor)->next)
390
391/* iterate through the list, with safety against removal */
392#define EINA_CLIST_FOR_EACH_SAFE(cursor, cursor2, list) \
393 for ((cursor) = (list)->next, (cursor2) = (cursor)->next; \
394 (cursor) != (list); \
395 (cursor) = (cursor2), (cursor2) = (cursor)->next)
396
397/* iterate through the list using a list entry */
398#define EINA_CLIST_FOR_EACH_ENTRY(elem, list, type, field) \
399 for ((elem) = EINA_CLIST_ENTRY((list)->next, type, field); \
400 &(elem)->field != (list); \
401 (elem) = EINA_CLIST_ENTRY((elem)->field.next, type, field))
402
403/* iterate through the list using a list entry, with safety against removal */
404#define EINA_CLIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field) \
405 for ((cursor) = EINA_CLIST_ENTRY((list)->next, type, field), \
406 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field); \
407 &(cursor)->field != (list); \
408 (cursor) = (cursor2), \
409 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.next, type, field))
410
411/* iterate through the list in reverse order */
412#define EINA_CLIST_FOR_EACH_REV(cursor,list) \
413 for ((cursor) = (list)->prev; (cursor) != (list); (cursor) = (cursor)->prev)
414
415/* iterate through the list in reverse order, with safety against removal */
416#define EINA_CLIST_FOR_EACH_SAFE_REV(cursor, cursor2, list) \
417 for ((cursor) = (list)->prev, (cursor2) = (cursor)->prev; \
418 (cursor) != (list); \
419 (cursor) = (cursor2), (cursor2) = (cursor)->prev)
420
421/* iterate through the list in reverse order using a list entry */
422#define EINA_CLIST_FOR_EACH_ENTRY_REV(elem, list, type, field) \
423 for ((elem) = EINA_CLIST_ENTRY((list)->prev, type, field); \
424 &(elem)->field != (list); \
425 (elem) = EINA_CLIST_ENTRY((elem)->field.prev, type, field))
426
427/* iterate through the list in reverse order using a list entry, with safety against removal */
428#define EINA_CLIST_FOR_EACH_ENTRY_SAFE_REV(cursor, cursor2, list, type, field) \
429 for ((cursor) = EINA_CLIST_ENTRY((list)->prev, type, field), \
430 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field); \
431 &(cursor)->field != (list); \
432 (cursor) = (cursor2), \
433 (cursor2) = EINA_CLIST_ENTRY((cursor)->field.prev, type, field))
434
435/* macros for statically initialized lists */
436#undef EINA_CLIST_INIT
437#define EINA_CLIST_INIT(list) { &(list), &(list) }
438
439/* get pointer to object containing list element */
440#undef EINA_CLIST_ENTRY
441#define EINA_CLIST_ENTRY(elem, type, field) \
442 ((type *)((char *)(elem) - (unsigned long)(&((type *)0)->field)))
443
444/*
445 * @}
446 */
447
448/*
449 * @}
450 */
451
452/*
453 * @}
454 */
455
456#endif /* __EINA_CLIST_H__ */
diff --git a/libraries/eina/src/include/eina_config.h b/libraries/eina/src/include/eina_config.h
new file mode 100644
index 0000000..3341731
--- /dev/null
+++ b/libraries/eina/src/include/eina_config.h
@@ -0,0 +1,67 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_CONFIG_H_
20#define EINA_CONFIG_H_
21
22#ifdef EINA_MAGIC_DEBUG
23# undef EINA_MAGIC_DEBUG
24#endif
25#define EINA_MAGIC_DEBUG
26
27#ifdef EINA_DEFAULT_MEMPOOL
28# undef EINA_DEFAULT_MEMPOOL
29#endif
30
31
32#ifdef EINA_SAFETY_CHECKS
33# undef EINA_SAFETY_CHECKS
34#endif
35#define EINA_SAFETY_CHECKS
36
37#ifdef EINA_HAVE_INTTYPES_H
38# undef EINA_HAVE_INTTYPES_H
39#endif
40#define EINA_HAVE_INTTYPES_H
41
42#ifdef EINA_HAVE_STDINT_H
43# undef EINA_HAVE_STDINT_H
44#endif
45#define EINA_HAVE_STDINT_H
46
47#ifdef EINA_HAVE_THREADS
48# undef EINA_HAVE_THREADS
49#endif
50#define EINA_HAVE_THREADS
51
52#ifdef EINA_HAVE_DEBUG_THREADS
53# undef EINA_HAVE_DEBUG_THREADS
54#endif
55
56
57#ifdef EINA_SIZEOF_WCHAR_T
58# undef EINA_SIZEOF_WCHAR_T
59#endif
60#define EINA_SIZEOF_WCHAR_T 4
61
62#ifdef EINA_HAVE_ON_OFF_THREADS
63# undef EINA_HAVE_ON_OFF_THREADS
64#endif
65
66
67#endif /* EINA_CONFIG_H_ */
diff --git a/libraries/eina/src/include/eina_config.h.in b/libraries/eina/src/include/eina_config.h.in
new file mode 100644
index 0000000..be328cd
--- /dev/null
+++ b/libraries/eina/src/include/eina_config.h.in
@@ -0,0 +1,67 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_CONFIG_H_
20#define EINA_CONFIG_H_
21
22#ifdef EINA_MAGIC_DEBUG
23# undef EINA_MAGIC_DEBUG
24#endif
25@EINA_CONFIGURE_MAGIC_DEBUG@
26
27#ifdef EINA_DEFAULT_MEMPOOL
28# undef EINA_DEFAULT_MEMPOOL
29#endif
30@EINA_CONFIGURE_DEFAULT_MEMPOOL@
31
32#ifdef EINA_SAFETY_CHECKS
33# undef EINA_SAFETY_CHECKS
34#endif
35@EINA_CONFIGURE_SAFETY_CHECKS@
36
37#ifdef EINA_HAVE_INTTYPES_H
38# undef EINA_HAVE_INTTYPES_H
39#endif
40@EINA_CONFIGURE_HAVE_INTTYPES_H@
41
42#ifdef EINA_HAVE_STDINT_H
43# undef EINA_HAVE_STDINT_H
44#endif
45@EINA_CONFIGURE_HAVE_STDINT_H@
46
47#ifdef EINA_HAVE_THREADS
48# undef EINA_HAVE_THREADS
49#endif
50@EINA_CONFIGURE_HAVE_THREADS@
51
52#ifdef EINA_HAVE_DEBUG_THREADS
53# undef EINA_HAVE_DEBUG_THREADS
54#endif
55@EINA_CONFIGURE_HAVE_DEBUG_THREADS@
56
57#ifdef EINA_SIZEOF_WCHAR_T
58# undef EINA_SIZEOF_WCHAR_T
59#endif
60#define EINA_SIZEOF_WCHAR_T @EINA_SIZEOF_WCHAR_T@
61
62#ifdef EINA_HAVE_ON_OFF_THREADS
63# undef EINA_HAVE_ON_OFF_THREADS
64#endif
65@EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
66
67#endif /* EINA_CONFIG_H_ */
diff --git a/libraries/eina/src/include/eina_convert.h b/libraries/eina/src/include/eina_convert.h
new file mode 100644
index 0000000..af839e2
--- /dev/null
+++ b/libraries/eina/src/include/eina_convert.h
@@ -0,0 +1,374 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric BAIL, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_CONVERT_H_
20#define EINA_CONVERT_H_
21
22#include "eina_types.h"
23#include "eina_error.h"
24
25#include "eina_fp.h"
26
27
28/**
29 * @addtogroup Eina_Convert_Group Convert
30 *
31 * These functions allow you to convert integer or real numbers to
32 * string or conversely.
33 *
34 * To use these functions, you have to call eina_init()
35 * first, and eina_shutdown() when eina is not used anymore.
36 *
37 * @section Eina_Convert_From_Integer_To_Sring Conversion from integer to string
38 *
39 * To convert an integer to a string in the decimal base,
40 * eina_convert_itoa() should be used. If the hexadecimal base is
41 * wanted, eina_convert_xtoa() should be used. They all need a bufffer
42 * sufficiently large to store all the cyphers.
43 *
44 * Here is an example of use:
45 *
46 * @code
47 * #include <stdlib.h>
48 * #include <stdio.h>
49 *
50 * #include <Eina.h>
51 *
52 * int main(void)
53 * {
54 * char tmp[128];
55 *
56 * if (!eina_init())
57 * {
58 * printf ("Error during the initialization of eina.\n");
59 * return EXIT_FAILURE;
60 * }
61 *
62 * eina_convert_itoa(45, tmp);
63 * printf("value: %s\n", tmp);
64 * eina_convert_xtoa(0xA1, tmp);
65 * printf("value: %s\n", tmp);
66 *
67 * eina_shutdown();
68 *
69 * return EXIT_SUCCESS;
70 * }
71 * @endcode
72 *
73 * Compile this code with the following command:
74 *
75 * @code
76 * gcc -Wall -o test_eina_convert test_eina.c `pkg-config --cflags --libs eina`
77 * @endcode
78 *
79 * @note
80 * The alphabetical cyphers are in lower case.
81 *
82 * @section Eina_Convert_Double Conversion double / string
83 *
84 * To convert a double to a string, eina_convert_dtoa() should be
85 * used. Like with the integer functions, a buffer must be used. The
86 * resulting string ghas the following format (which is the result
87 * obtained with snprintf() and the @%a modifier):
88 *
89 * @code
90 * [-]0xh.hhhhhp[+-]e
91 * @endcode
92 *
93 * To convert a string to a double, eina_convert_atod() should be
94 * used. The format of the string must be as above. Then, the double
95 * has the following mantiss and exponent:
96 *
97 * @code
98 * mantiss : [-]hhhhhh
99 * exponent : 2^([+-]e - 4 * n)
100 * @endcode
101 *
102 * with n being number of cypers after the point in the string
103 * format. To obtain the double number from the mantiss and exponent,
104 * use ldexp().
105 *
106 * Here is an example of use:
107 *
108 * @code
109 * #include <stdlib.h>
110 * #include <stdio.h>
111 * #include <math.h>
112 *
113 * #include <Eina.h>
114 *
115 * int main(void)
116 * {
117 * char tmp[128];
118 * long long int m = 0;
119 * long int e = 0;
120 * double r;
121 *
122 * if (!eina_init())
123 * {
124 * printf ("Error during the initialization of eina.\n");
125 * return EXIT_FAILURE;
126 * }
127 *
128 * printf("initial value : 40.56\n");
129 * eina_convert_dtoa(40.56, tmp);
130 * printf("result dtoa : %s\n", tmp);
131
132 * eina_convert_atod(tmp, 128, &m, &e);
133 * r = ldexp((double)m, e);
134 * printf("result atod : %f\n", r);
135 *
136 * eina_shutdown();
137 *
138 * return EXIT_SUCCESS;
139 * }
140 * @endcode
141 *
142 * Compile this code with the following command:
143 *
144 * @code
145 * gcc -Wall -o test_eina_convert test_eina.c `pkg-config --cflags --libs eina` -lm
146 * @endcode
147 */
148
149/**
150 * @addtogroup Eina_Tools_Group Tools
151 *
152 * @{
153 */
154
155/**
156 * @defgroup Eina_Convert_Group Convert
157 *
158 * @{
159 */
160
161/**
162 * @var EINA_ERROR_CONVERT_P_NOT_FOUND
163 * Error identifier corresponding to string not containing 'p'.
164 */
165
166EAPI extern Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND;
167
168/**
169 * @var EINA_ERROR_CONVERT_0X_NOT_FOUND
170 * Error identifier corresponding to string not containing '0x'.
171 */
172EAPI extern Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND;
173
174/**
175 * @var EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH
176 * Error identifier corresponding to length of the string being too small.
177 */
178EAPI extern Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH;
179
180/**
181 * @brief Convert an integer number to a string in decimal base.
182 *
183 * @param n The integer to convert.
184 * @param s The buffer to store the converted integer.
185 * @return The length of the string, including the nul terminated
186 * character.
187 *
188 * This function converts @p n to a nul terminated string. The
189 * converted string is in decimal base. As no check is done, @p s must
190 * be a buffer that is sufficiently large to store the integer.
191 *
192 * The returned value is the length of the string, including the nul
193 * terminated character.
194 */
195EAPI int eina_convert_itoa(int n, char *s) EINA_ARG_NONNULL(2);
196
197/**
198 * @brief Convert an integer number to a string in hexadecimal base.
199 *
200 * @param n The integer to convert.
201 * @param s The buffer to store the converted integer.
202 * @return The length of the string, including the nul terminated
203 * character.
204 *
205 * This function converts @p n to a nul terminated string. The
206 * converted string is in hexadecimal base and the alphabetical
207 * cyphers are in lower case. As no check is done, @p s must be a
208 * buffer that is sufficiently large to store the integer.
209 *
210 * The returned value is the length of the string, including the nul
211 * terminated character.
212 */
213EAPI int eina_convert_xtoa(unsigned int n, char *s) EINA_ARG_NONNULL(2);
214
215
216/**
217 * @brief Convert a double to a string.
218 *
219 * @param d The double to convert.
220 * @param des The destination buffer to store the converted double.
221 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
222 *
223 * This function converts the double @p d to a string. The string is
224 * stored in the buffer pointed by @p des and must be sufficiently
225 * large to contain the converted double. The returned string is nul
226 * terminated and has the following format:
227 *
228 * @code
229 * [-]0xh.hhhhhp[+-]e
230 * @endcode
231 *
232 * where the h are the hexadecimal cyphers of the mantiss and e the
233 * exponent (a decimal number).
234 *
235 * The returned value is the length of the string, including the nul
236 * character.
237 */
238EAPI int eina_convert_dtoa(double d, char *des) EINA_ARG_NONNULL(2);
239
240/**
241 * @brief Convert a string to a double.
242 *
243 * @param src The string to convert.
244 * @param length The length of the string.
245 * @param m The mantisse.
246 * @param e The exponent.
247 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
248 *
249 * This function converts the string @p s of length @p length that
250 * represent a double in hexadecimal base to a double. It is used to
251 * replace the use of snprintf() with the \%a modifier, which is
252 * missing on some platform (like Windows (tm) or OpenBSD).
253 *
254 * The string must have the following format:
255 *
256 * @code
257 * [-]0xh.hhhhhp[+-]e
258 * @endcode
259 *
260 * where the h are the hexadecimal cyphers of the mantiss and e the
261 * exponent (a decimal number). If n is the number of cypers after the
262 * point, the returned mantiss and exponents are:
263 *
264 * @code
265 * mantiss : [-]hhhhhh
266 * exponent : 2^([+-]e - 4 * n)
267 * @endcode
268 *
269 * The mantiss and exponent are stored in the buffers pointed
270 * respectively by @p m and @p e.
271 *
272 * If the string is invalid, the error is set to:
273 *
274 * @li #EINA_ERROR_CONVERT_0X_NOT_FOUND if no 0x is found,
275 * @li #EINA_ERROR_CONVERT_P_NOT_FOUND if no p is found,
276 * @li #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH if @p length is not
277 * correct.
278 *
279 * In those cases, #EINA_FALSE is returned, otherwise #EINA_TRUE is
280 * returned.
281 */
282EAPI Eina_Bool eina_convert_atod(const char *src,
283 int length,
284 long long *m,
285 long *e) EINA_ARG_NONNULL(1, 3, 4);
286
287
288/**
289 * @brief Convert a 32.32 fixed point number to a string.
290 *
291 * @param fp The fixed point number to convert.
292 * @param des The destination buffer to store the converted fixed point number.
293 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
294 *
295 * This function converts the 32.32 fixed point number @p fp to a
296 * string. The string is stored in the buffer pointed by @p des and
297 * must be sufficiently large to contain the converted fixed point
298 * number. The returned string is terminated and has the following
299 * format:
300 *
301 * @code
302 * [-]0xh.hhhhhp[+-]e
303 * @endcode
304 *
305 * where the h are the hexadecimal cyphers of the mantiss and e the
306 * exponent (a decimal number).
307 *
308 * The returned value is the length of the string, including the nul
309 * character.
310 *
311 * @note The code is the same than eina_convert_dtoa() except that it
312 * implements the frexp() function for fixed point numbers and does
313 * some optimisations.
314 */
315EAPI int eina_convert_fptoa(Eina_F32p32 fp,
316 char *des) EINA_ARG_NONNULL(2);
317
318/**
319 * @brief Convert a string to a 32.32 fixed point number.
320 *
321 * @param src The string to convert.
322 * @param length The length of the string.
323 * @param fp The fixed point number.
324 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
325 *
326 * This function converts the string @p src of length @p length that
327 * represent a double in hexadecimal base to a 32.32 fixed point
328 * number stored in @p fp. The function always tries to convert the
329 * string with eina_convert_atod().
330 *
331 * The string must have the following format:
332 *
333 * @code
334 * [-]0xh.hhhhhp[+-]e
335 * @endcode
336 *
337 * where the h are the hexadecimal cyphers of the mantiss and e the
338 * exponent (a decimal number). If n is the number of cypers after the
339 * point, the returned mantiss and exponents are:
340 *
341 * @code
342 * mantiss : [-]hhhhhh
343 * exponent : 2^([+-]e - 4 * n)
344 * @endcode
345 *
346 * The mantiss and exponent are stored in the buffers pointed
347 * respectively by @p m and @p e.
348 *
349 * If the string is invalid, the error is set to:
350 *
351 * @li #EINA_ERROR_CONVERT_0X_NOT_FOUND if no 0x is found,
352 * @li #EINA_ERROR_CONVERT_P_NOT_FOUND if no p is found,
353 * @li #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH if @p length is not
354 * correct.
355 *
356 * In those cases, or if @p fp is @c NULL, #EINA_FALSE is returned,
357 * otherwise @p fp is computed and #EINA_TRUE is returned.
358 *
359 * @note The code uses eina_convert_atod() and do the correct bit
360 * shift to compute the fixed point number.
361 */
362EAPI Eina_Bool eina_convert_atofp(const char *src,
363 int length,
364 Eina_F32p32 *fp) EINA_ARG_NONNULL(1, 3);
365
366/**
367 * @}
368 */
369
370/**
371 * @}
372 */
373
374#endif /* EINA_CONVERT_H_ */
diff --git a/libraries/eina/src/include/eina_counter.h b/libraries/eina/src/include/eina_counter.h
new file mode 100644
index 0000000..26bee06
--- /dev/null
+++ b/libraries/eina/src/include/eina_counter.h
@@ -0,0 +1,213 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_COUNTER_H_
20#define EINA_COUNTER_H_
21
22#include "eina_types.h"
23
24/**
25 * @addtogroup Eina_Counter_Group Counter
26 *
27 * @brief These functions allow you to get the time spent in a part of a code.
28 *
29 * Before using the counter system, Eina must be initialized with
30 * eina_init() and later shut down with eina_shutdown(). The create a
31 * counter, use eina_counter_new(). To free it, use
32 * eina_counter_free().
33 *
34 * To time a part of a code, call eina_counter_start() just before it,
35 * and eina_counter_stop() just after it. Each time you start to time
36 * a code, a clock is added to a list. You can give a number of that
37 * clock with the second argument of eina_counter_stop(). To send all
38 * the registered clocks to a stream (like stdout, ofr a file), use
39 * eina_counter_dump().
40 *
41 * Here is a straightforward example:
42 *
43 * @code
44 * #include <stdlib.h>
45 * #include <stdio.h>
46 *
47 * #include <eina_counter.h>
48 *
49 * void test_malloc(void)
50 * {
51 * int i;
52 *
53 * for (i = 0; i < 100000; ++i)
54 * {
55 * void *buf;
56 *
57 * buf = malloc(100);
58 * free(buf);
59 * }
60 * }
61 *
62 * int main(void)
63 * {
64 * Eina_Counter *counter;
65 *
66 * if (!eina_init())
67 * {
68 * printf("Error during the initialization of eina\n");
69 * return EXIT_FAILURE;
70 * }
71 *
72 * counter = eina_counter_new("malloc");
73 *
74 * eina_counter_start(counter);
75 * test_malloc();
76 * eina_counter_stop(counter, 1);
77 *
78 * char* result = eina_counter_dump(counter);
79 * printf("%s", result);
80 * free(result);
81 *
82 * eina_counter_free(counter);
83 * eina_shutdown();
84 *
85 * return EXIT_SUCCESS;
86 * }
87 * @endcode
88 *
89 * Compile this code with the following commant:
90 *
91 * @verbatim
92 * gcc -Wall -o test_eina_counter test_eina.c `pkg-config --cflags --libs eina`
93 * @endverbatim
94 *
95 * The result should be something like that:
96 *
97 * @verbatim
98 * \# specimen experiment time starting time ending time
99 * 1 9794125 783816 10577941
100 * @endverbatim
101 *
102 * Note that the displayed time is in nanosecond.
103 */
104
105/**
106 * @addtogroup Eina_Tools_Group Tools
107 *
108 * @{
109 */
110
111/**
112 * @defgroup Eina_Counter_Group Counter
113 *
114 * @{
115 */
116
117/**
118 * @typedef Eina_Counter
119 * Counter type.
120 */
121typedef struct _Eina_Counter Eina_Counter;
122
123
124/**
125 * @brief Return a counter.
126 *
127 * @param name The name of the counter.
128 * @return A newly allocated counter.
129 *
130 * This function returns a new counter. It is characterized by @p
131 * name. If @p name is @c NULL, the function returns @c NULL
132 * immediately. If memory allocation fails, @c NULL is returned and the
133 * error is set to #EINA_ERROR_OUT_OF_MEMORY.
134 *
135 * Whe the new counter is not needed anymore, use eina_counter_free() to
136 * free the allocated memory.
137 */
138EAPI Eina_Counter *eina_counter_new(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
139
140/**
141 * @brief Delete a counter.
142 *
143 * @param counter The counter to delete.
144 *
145 * This function remove the clock of @p counter from the used clocks
146 * (see eina_counter_start()) and frees the memory allocated for
147 * @p counter. If @p counter is @c NULL, the function returns
148 * immediately.
149 */
150EAPI void eina_counter_free(Eina_Counter *counter) EINA_ARG_NONNULL(1);
151
152/**
153 * @brief Start the time count.
154 *
155 * @param counter The counter.
156 *
157 * This function specifies that the part of the code beginning just
158 * after its call is being to be timed, using @p counter. If
159 * @p counter is @c NULL, this function returns immediately.
160 *
161 * This function adds the clock associated to @p counter in a list. If
162 * the memory needed by that clock can not be allocated, the function
163 * returns and the error is set to #EINA_ERROR_OUT_OF_MEMORY.
164 *
165 * To stop the timing, eina_counter_stop() must be called with the
166 * same counter.
167 */
168EAPI void eina_counter_start(Eina_Counter *counter) EINA_ARG_NONNULL(1);
169
170/**
171 * @brief Stop the time count.
172 *
173 * @param counter The counter.
174 * @param specimen The number of the test.
175 *
176 * This function stop the timing that has been started with
177 * eina_counter_start(). @p counter must be the same than the one used
178 * with eina_counter_start(). @p specimen is the number of the
179 * test. If @p counter or its associated clock are @c NULL, or if the
180 * time can't be retrieved the function exits.
181 */
182EAPI void eina_counter_stop(Eina_Counter *counter,
183 int specimen) EINA_ARG_NONNULL(1);
184
185/**
186 * @brief Dump the result of all clocks of a counter to a stream.
187 *
188 * @return A string with a summary of the test.
189 * @param counter The counter.
190 *
191 * This function returns an malloc'd string containing the dump of
192 * all the valid clocks of @p counter.
193 * If @p counter @c NULL, the functions exits
194 * immediately. Otherwise, the output is formattted like that:
195 *
196 * @verbatim
197 * \# specimen experiment time starting time ending time
198 * 1 208 120000 120208
199 * @endverbatim
200 *
201 * The unit of time is the nanosecond.
202 */
203EAPI char *eina_counter_dump(Eina_Counter *counter) EINA_ARG_NONNULL(1);
204
205/**
206 * @}
207 */
208
209/**
210 * @}
211 */
212
213#endif /* EINA_COUNTER_H_ */
diff --git a/libraries/eina/src/include/eina_cpu.h b/libraries/eina/src/include/eina_cpu.h
new file mode 100644
index 0000000..ac32e1d
--- /dev/null
+++ b/libraries/eina/src/include/eina_cpu.h
@@ -0,0 +1,39 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_CPU_H_
20#define EINA_CPU_H_
21
22#include "eina_types.h"
23
24typedef enum _Eina_Cpu_Features
25{
26 EINA_CPU_MMX = 0x00000001,
27 EINA_CPU_SSE = 0x00000002,
28 EINA_CPU_SSE2 = 0x00000004,
29 EINA_CPU_SSE3 = 0x00000008,
30 /* TODO 3DNow! */
31 EINA_CPU_ALTIVEC = 0x00000010,
32 EINA_CPU_VIS = 0x00000020,
33 EINA_CPU_NEON = 0x00000040,
34} Eina_Cpu_Features;
35
36EAPI Eina_Cpu_Features eina_cpu_features_get(void);
37EAPI int eina_cpu_count(void);
38
39#endif /* EINA_CPU_H_ */
diff --git a/libraries/eina/src/include/eina_error.h b/libraries/eina/src/include/eina_error.h
new file mode 100644
index 0000000..2b0ae77
--- /dev/null
+++ b/libraries/eina/src/include/eina_error.h
@@ -0,0 +1,198 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_ERROR_H_
20#define EINA_ERROR_H_
21
22#include <stdarg.h>
23
24#include "eina_types.h"
25
26
27/**
28 * @page tutorial_error_page Error Tutorial
29 *
30 * @section tutorial_error_registering_msg Registering messages
31 *
32 * The error module can provide a system that mimics the errno system
33 * of the C standard library. It consists in 2 parts:
34 *
35 * @li a way of registering new messages with
36 * eina_error_msg_register() and eina_error_msg_get(),
37 * @li a way of setting / getting last error message with
38 * eina_error_set() / eina_error_get().
39 *
40 * So one has to fisrt register all the error messages that a program
41 * or a lib should manage. Then, when an error can occur, use
42 * eina_error_set(), and when errors are managed, use
43 * eina_error_get(). If eina_error_set() is used to set an error, do
44 * not forget to call before eina_error_set(), to remove previous set
45 * errors.
46 *
47 * Here is an example of use:
48 *
49 * @include eina_error_01.c
50 *
51 * Of course, instead of printf(), eina_log_print() can be used to
52 * have beautiful error messages.
53 */
54
55/**
56 * @addtogroup Eina_Error_Group Error
57 *
58 * @brief These functions provide error management for projects.
59 *
60 * The Eina error module provides a way to manage errors in a simple but
61 * powerful way in libraries and modules. It is also used in Eina itself.
62 * Similar to libC's @c errno and strerror() facilities, this is extensible and
63 * recommended for other libraries and applications.
64 *
65 * A simple example of how to use this can be seen @ref tutorial_error_page
66 * "here".
67 */
68
69/**
70 * @addtogroup Eina_Tools_Group Tools
71 *
72 * @{
73 */
74
75/**
76 * @defgroup Eina_Error_Group Error
77 *
78 * @{
79 */
80
81/**
82 * @typedef Eina_Error
83 * Error type.
84 */
85typedef int Eina_Error;
86
87/**
88 * @var EINA_ERROR_OUT_OF_MEMORY
89 * Error identifier corresponding to a lack of memory.
90 */
91
92EAPI extern Eina_Error EINA_ERROR_OUT_OF_MEMORY;
93
94/**
95 * @brief Register a new error type.
96 *
97 * @param msg The description of the error. It will be duplicated using
98 * eina_stringshare_add().
99 * @return The unique number identifier for this error.
100 *
101 * This function stores in a list the error message described by
102 * @p msg. The returned value is a unique identifier greater or equal
103 * than 1. The description can be retrieve later by passing to
104 * eina_error_msg_get() the returned value.
105 *
106 * @see eina_error_msg_static_register()
107 */
108EAPI Eina_Error eina_error_msg_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
109
110/**
111 * @brief Register a new error type, statically allocated message.
112 *
113 * @param msg The description of the error. This string will not be
114 * duplicated and thus the given pointer should live during
115 * usage of eina_error.
116 * @return The unique number identifier for this error.
117 *
118 * This function stores in a list the error message described by
119 * @p msg. The returned value is a unique identifier greater or equal
120 * than 1. The description can be retrieve later by passing to
121 * eina_error_msg_get() the returned value.
122 *
123 * @see eina_error_msg_register()
124 */
125EAPI Eina_Error eina_error_msg_static_register(const char *msg) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
126
127/**
128 * @brief Change the message of an already registered message
129 *
130 * @param error The Eina_Error to change the message of
131 * @param msg The description of the error. This string will be
132 * duplicated only if the error was registered with @ref eina_error_msg_register
133 * otherwise it must remain intact for the duration.
134 * @return EINA_TRUE if successful, EINA_FALSE on error
135 *
136 * This function modifies the message associated with @p error and changes
137 * it to @p msg. If the error was previously registered by @ref eina_error_msg_static_register
138 * then the string will not be duplicated, otherwise the previous message
139 * will be unrefed and @p msg copied.
140 *
141 * @see eina_error_msg_register()
142 */
143EAPI Eina_Bool eina_error_msg_modify(Eina_Error error,
144 const char *msg) EINA_ARG_NONNULL(2);
145
146/**
147 * @brief Return the last set error.
148 *
149 * @return The last error.
150 *
151 * This function returns the last error set by eina_error_set(). The
152 * description of the message is returned by eina_error_msg_get().
153 */
154EAPI Eina_Error eina_error_get(void);
155
156/**
157 * @brief Set the last error.
158 *
159 * @param err The error identifier.
160 *
161 * This function sets the last error identifier. The last error can be
162 * retrieved with eina_error_get().
163 *
164 * @note This is also used to clear previous errors, in that case @p err should
165 * be @c 0.
166 */
167EAPI void eina_error_set(Eina_Error err);
168
169/**
170 * @brief Return the description of the given an error number.
171 *
172 * @param error The error number.
173 * @return The description of the error.
174 *
175 * This function returns the description of an error that has been
176 * registered with eina_error_msg_register(). If an incorrect error is
177 * given, then @c NULL is returned.
178 */
179EAPI const char *eina_error_msg_get(Eina_Error error) EINA_PURE;
180
181/**
182 * @brief Find the #Eina_Error corresponding to a message string
183 * @param msg The error message string to match (NOT #NULL)
184 * @return The #Eina_Error matching @p msg, or 0 on failure
185 * This function attempts to match @p msg with its corresponding #Eina_Error value.
186 * If no such value is found, 0 is returned.
187 */
188EAPI Eina_Error eina_error_find(const char *msg) EINA_ARG_NONNULL(1) EINA_PURE;
189
190/**
191 * @}
192 */
193
194/**
195 * @}
196 */
197
198#endif /* EINA_ERROR_H_ */
diff --git a/libraries/eina/src/include/eina_file.h b/libraries/eina/src/include/eina_file.h
new file mode 100644
index 0000000..01ef8f5
--- /dev/null
+++ b/libraries/eina/src/include/eina_file.h
@@ -0,0 +1,392 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 * 2011 Cedric Bail
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_FILE_H_
21#define EINA_FILE_H_
22
23#include <limits.h>
24#include <time.h>
25
26#include "eina_types.h"
27#include "eina_array.h"
28#include "eina_iterator.h"
29
30
31/**
32 * @page eina_file_example_01_page
33 * @dontinclude eina_file_01.c
34 *
35 * For brevity includes, variable declarations and initialization was omitted
36 * from this page, however the full source code can be seen @ref
37 * eina_file_example_01 "here".
38 *
39 * Here we have a simple callback to print the name of a file and the path that
40 * contains it:
41 * @skip static
42 * @until }
43 *
44 * We can use this callback in the following call:
45 * @skipline eina_file_dir_list
46 *
47 * The above was a way to print the files in a directory, but it is not the only
48 * one:
49 * @until iterator_free
50 *
51 * And now two ways to get more information than just file names:
52 * @until iterator_free
53 * @until iterator_free
54 *
55 * The above ways of getting files on a list may produce the same output, but
56 * they have an important difference, eina_file_direct_ls() will @b not call
57 * stat, this means that on some systems it might not have file type
58 * information. On the other hand it might be faster than eina_file_stat_ls().
59 */
60/**
61 * @page eina_file_example_01
62 * @include eina_file_01.c
63 * @example eina_file_01.c
64 */
65/**
66 * @addtogroup Eina_Tools_Group Tools
67 *
68 * @{
69 */
70/**
71 * @addtogroup Eina_File_Group File
72 *
73 * @brief Functions to handle files and directories.
74 *
75 * This functions make it easier to do a number o file and directory operations
76 * such as getting the list of files in a directory, spliting paths and finding
77 * out file size and type.
78 *
79 * @warning All functions in this group are @b blocking which means they make
80 * take a long time to return, use them carefully.
81 *
82 * See an example @ref eina_file_example_01_page "here".
83 *
84 * @{
85 */
86
87/**
88 * @typedef Eina_File_Direct_Info
89 * A typedef to #_Eina_File_Direct_Info.
90 */
91typedef struct _Eina_File_Direct_Info Eina_File_Direct_Info;
92
93/**
94 * @typedef Eina_File_Dir_List_Cb
95 * Type for a callback to be called when iterating over the files of a
96 * directory.
97 */
98typedef void (*Eina_File_Dir_List_Cb)(const char *name, const char *path, void *data);
99
100/**
101 * @typedef Eina_File_Type
102 * file type in Eina_File_Direct_Info.
103 */
104typedef enum {
105 EINA_FILE_UNKNOWN, /**< Unknown file type. */
106 EINA_FILE_FIFO, /**< Named pipe (FIFO) type (unused on Windows). */
107 EINA_FILE_CHR, /**< Character device type (unused on Windows). */
108 EINA_FILE_DIR, /**< Directory type. */
109 EINA_FILE_BLK, /**< Block device type (unused on Windows). */
110 EINA_FILE_REG, /**< Regular file type. */
111 EINA_FILE_LNK, /**< Symbolic link type. */
112 EINA_FILE_SOCK, /**< UNIX domain socket type (unused on Windows). */
113 EINA_FILE_WHT /**< Whiteout file type (unused on Windows). */
114} Eina_File_Type;
115
116typedef struct _Eina_File Eina_File;
117
118typedef enum {
119 EINA_FILE_RANDOM, /**< Advise random memory access to the mapped memory. */
120 EINA_FILE_SEQUENTIAL, /**< Advise sequential memory access to the mapped memory. */
121 EINA_FILE_WILLNEED, /**< Advise need for all the mapped memory. */
122 EINA_FILE_POPULATE /**< Request all the mapped memory. */
123} Eina_File_Populate;
124
125/* Why do this? Well PATH_MAX may vary from when eina itself is compiled
126 * to when the app using eina is compiled. exposing the path buffer below
127 * can't safely and portably vary based on how/when you compile. it should
128 * always be the same for both eina inside AND for apps outside that use eina
129 * so define this to 8192 - most PATH_MAX values are like 4096 or 1024 (with
130 * windows i think being 260), so 8192 should cover almost all cases. there
131 * is a possibility that PATH_MAX could be more than 8192. if anyone spots
132 * a path_max that is bigger - let us know, but, for now we will assume
133 * it never happens */
134#define EINA_PATH_MAX 8192
135/**
136 * @struct _Eina_File_Direct_Info
137 * A structure to store informations of a path.
138 */
139struct _Eina_File_Direct_Info
140{
141 size_t path_length; /**< size of the whole path */
142 size_t name_length; /**< size of the filename/basename component */
143 size_t name_start; /**< where the filename/basename component starts */
144 Eina_File_Type type; /**< file type */
145 char path[EINA_PATH_MAX]; /**< the path */
146};
147
148/**
149 * @def EINA_FILE_DIR_LIST_CB
150 * @brief cast to an #Eina_File_Dir_List_Cb.
151 *
152 * @param function The function to cast.
153 *
154 * This macro casts @p function to Eina_File_Dir_List_Cb.
155 */
156#define EINA_FILE_DIR_LIST_CB(function) ((Eina_File_Dir_List_Cb)function)
157
158
159/**
160 * @brief List all files on the directory calling the function for every file found.
161 *
162 * @param dir The directory name.
163 * @param recursive Iterate recursively in the directory.
164 * @param cb The callback to be called.
165 * @param data The data to pass to the callback.
166 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
167 *
168 * This function calls @p cb for each file that is in @p dir. To have @p cb
169 * called on files that are in subdirectories of @p dir @p recursive should be
170 * EINA_TRUE. In other words if @p recursive is EINA_FALSE, only direct children
171 * of @p dir will be operated on, if @p recursive is EINA_TRUE the entire tree
172 * of files that is below @p dir will be operated on.
173 *
174 * If @p cb or @p dir are @c NULL, or if @p dir is a string of size 0,
175 * or if @p dir can not be opened, this function returns #EINA_FALSE
176 * immediately. otherwise, it returns #EINA_TRUE.
177 */
178EAPI Eina_Bool eina_file_dir_list(const char *dir,
179 Eina_Bool recursive,
180 Eina_File_Dir_List_Cb cb,
181 void *data) EINA_ARG_NONNULL(1, 3);
182
183/**
184 * @brief Split a path according to the delimiter of the filesystem.
185 *
186 * @param path The path to split.
187 * @return An array of the parts of the path to split.
188 *
189 * This function splits @p path according to the delimiter of the used
190 * filesystem. If @p path is @c NULL or if the array can not be
191 * created, @c NULL is returned, otherwise, an array with each part of @p path
192 * is returned.
193 */
194EAPI Eina_Array *eina_file_split(char *path) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
195
196/**
197 * @brief Get an iterator to list the content of a directory.
198 *
199 * @param dir The name of the directory to list
200 * @return Return an Eina_Iterator that will walk over the files and directories
201 * in @p dir. On failure it will return NULL.
202 *
203 * Returns an iterator for shared strings, the name of each file in @p dir will
204 * only be fetched when advancing the iterator, which means there is very little
205 * cost associated with creating the list and stopping halfway through it.
206 *
207 * @warning The iterator will hand the user a stringshared value with the full
208 * path. The user must free the string using eina_stringshare_del() on it.
209 *
210 * @note The container for the iterator is of type DIR*.
211 * @note The iterator will walk over '.' and '..' without returning them.
212 *
213 * @see eina_file_direct_ls()
214 */
215EAPI Eina_Iterator *eina_file_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
216
217/**
218 * @brief Get an iterator to list the content of a directory, with direct
219 * information.
220 *
221 * @param dir The name of the directory to list
222 *
223 * @return Return an Eina_Iterator that will walk over the files and
224 * directory in the pointed directory. On failure it will
225 * return NULL.
226 *
227 * Returns an iterator for Eina_File_Direct_Info, the name of each file in @p
228 * dir will only be fetched when advancing the iterator, which means there is
229 * cost associated with creating the list and stopping halfway through it.
230 *
231 * @warning The Eina_File_Direct_Info returned by the iterator <b>must not</b>
232 * be modified in any way.
233 * @warning When the iterator is advanced or deleted the Eina_File_Direct_Info
234 * returned is no longer valid.
235 *
236 * @note The container for the iterator is of type DIR*.
237 * @note The iterator will walk over '.' and '..' without returning them.
238 * @note The difference between this function ahd eina_file_direct_ls() is that
239 * it guarantees the file type information will be correct incurring a
240 * possible performance penalty.
241 *
242 * @see eina_file_direct_ls()
243 */
244EAPI Eina_Iterator *eina_file_stat_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
245
246/**
247 * @brief Get an iterator to list the content of a directory, with direct
248 * information.
249 *
250 * @param dir The name of the directory to list
251 *
252 * @return Return an Eina_Iterator that will walk over the files and
253 * directory in the pointed directory. On failure it will
254 * return NULL.
255 *
256 * Returns an iterator for Eina_File_Direct_Info, the name of each file in @p
257 * dir will only be fetched when advancing the iterator, which means there is
258 * cost associated with creating the list and stopping halfway through it.
259 *
260 * @warning If readdir_r doesn't contain file type information file type will
261 * be DT_UNKNOW.
262 * @warning The Eina_File_Direct_Info returned by the iterator <b>must not</b>
263 * be modified in any way.
264 * @warning When the iterator is advanced or deleted the Eina_File_Direct_Info
265 * returned is no longer valid.
266 *
267 * @note The container for the iterator is of type DIR*.
268 * @note The iterator will walk over '.' and '..' without returning them.
269 * @note The difference between this function ahd eina_file_stat_ls() is that
270 * it may not get the file type information however it is likely to be
271 * faster.
272 *
273 * @see eina_file_ls()
274 */
275EAPI Eina_Iterator *eina_file_direct_ls(const char *dir) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
276
277/**
278 * @brief Sanitize file path.
279 *
280 * @param path The path to sanitize
281 *
282 * @return an allocated string with the sanitized path.
283 *
284 * This function take care of adding the current working directory if it's a
285 * relative path and also remove all '..' and '//' reference in the original
286 * path.
287 *
288 * @since 1.1
289 */
290EAPI char *eina_file_path_sanitize(const char *path);
291
292/**
293 * @brief Get a read-only handler to a file.
294 *
295 * @param name Filename to open
296 * @param shared Requested a shm
297 *
298 * Opens a file in read-only mode. @p name should be an absolute path. An
299 * Eina_File handle can be shared among multiple instances if @p shared is
300 * EINA_TRUE.
301 *
302 * @since 1.1
303 */
304EAPI Eina_File *eina_file_open(const char *name, Eina_Bool shared) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
305
306/**
307 * @brief Unref file handler.
308 *
309 * @param file File handler to unref.
310 *
311 * Decremente file's refcount and if it reaches zero close it.
312 *
313 * @since 1.1
314 */
315EAPI void eina_file_close(Eina_File *file);
316
317/**
318 * @brief Get file size at open time.
319 *
320 * @param file The file handler to request the size from.
321 * @return The length of the file.
322 *
323 * @since 1.1
324 */
325EAPI size_t eina_file_size_get(Eina_File *file);
326
327/**
328 * @brief Get the last modification time of an open file.
329 *
330 * @param file The file handler to request the modification time from.
331 * @return The last modification time.
332 *
333 * @since 1.1
334 */
335EAPI time_t eina_file_mtime_get(Eina_File *file);
336
337/**
338 * @brief Get the filename of an open file.
339 *
340 * @param file The file handler to request the name from.
341 * @return Stringshared filename of the file.
342 *
343 * @since 1.1
344 */
345EAPI const char *eina_file_filename_get(Eina_File *file);
346
347/**
348 * @brief Map all the file to a buffer.
349 *
350 * @param file The file handler to map in memory
351 * @param rule The rule to apply to the mapped memory
352 * @return A pointer to a buffer that map all the file content. @c NULL if it fail.
353 *
354 * @since 1.1
355 */
356EAPI void *eina_file_map_all(Eina_File *file, Eina_File_Populate rule);
357
358/**
359 * @brief Map a part of the file.
360 *
361 * @param file The file handler to map in memory
362 * @param rule The rule to apply to the mapped memory
363 * @param offset The offset inside the file
364 * @param length The length of the memory to map
365 * @return A valid pointer to the system memory with @p length valid byte in it. And @c NULL if not inside the file or anything else goes wrong.
366 *
367 * This does handle refcounting so it will share map that target the same memory area.
368 *
369 * @since 1.1
370 */
371EAPI void *eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
372 unsigned long int offset, unsigned long int length);
373
374/**
375 * @brief Unref and unmap memory if possible.
376 *
377 * @param file The file handler to unmap memory from.
378 * @param map Memory map to unref and unmap.
379 *
380 * @since 1.1
381 */
382EAPI void eina_file_map_free(Eina_File *file, void *map);
383
384/**
385 * @}
386 */
387
388/**
389 * @}
390 */
391
392#endif /* EINA_FILE_H_ */
diff --git a/libraries/eina/src/include/eina_fp.h b/libraries/eina/src/include/eina_fp.h
new file mode 100644
index 0000000..c73dc16
--- /dev/null
+++ b/libraries/eina/src/include/eina_fp.h
@@ -0,0 +1,111 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 * Copyright (C) 2009 Cedric BAIL
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_FP_H_
21# define EINA_FP_H_
22
23#include "eina_types.h"
24
25#ifdef _MSC_VER
26typedef unsigned __int64 uint64_t;
27typedef signed __int64 int64_t;
28typedef signed int int32_t;
29#else
30# include <stdint.h>
31#endif
32
33#define EINA_F32P32_PI 0x00000003243f6a89
34
35typedef int64_t Eina_F32p32;
36typedef int32_t Eina_F16p16;
37typedef int32_t Eina_F8p24;
38
39static inline Eina_F32p32 eina_f32p32_int_from(int32_t v);
40static inline int32_t eina_f32p32_int_to(Eina_F32p32 v);
41static inline Eina_F32p32 eina_f32p32_double_from(double v);
42static inline double eina_f32p32_double_to(Eina_F32p32 v);
43
44static inline Eina_F32p32 eina_f32p32_add(Eina_F32p32 a,
45 Eina_F32p32 b);
46static inline Eina_F32p32 eina_f32p32_sub(Eina_F32p32 a,
47 Eina_F32p32 b);
48static inline Eina_F32p32 eina_f32p32_mul(Eina_F32p32 a,
49 Eina_F32p32 b);
50static inline Eina_F32p32 eina_f32p32_scale(Eina_F32p32 a,
51 int b);
52static inline Eina_F32p32 eina_f32p32_div(Eina_F32p32 a,
53 Eina_F32p32 b);
54static inline Eina_F32p32 eina_f32p32_sqrt(Eina_F32p32 a);
55static inline unsigned int eina_f32p32_fracc_get(Eina_F32p32 v);
56
57// dont use llabs - issues if not on 64bit
58#define eina_fp32p32_llabs(a) ((a < 0) ? -(a) : (a))
59
60EAPI Eina_F32p32 eina_f32p32_cos(Eina_F32p32 a);
61EAPI Eina_F32p32 eina_f32p32_sin(Eina_F32p32 a);
62
63static inline Eina_F16p16 eina_f16p16_int_from(int32_t v);
64static inline int32_t eina_f16p16_int_to(Eina_F16p16 v);
65static inline Eina_F16p16 eina_f16p16_float_from(float v);
66static inline float eina_f16p16_float_to(Eina_F16p16 v);
67
68static inline Eina_F16p16 eina_f16p16_add(Eina_F16p16 a,
69 Eina_F16p16 b);
70static inline Eina_F16p16 eina_f16p16_sub(Eina_F16p16 a,
71 Eina_F16p16 b);
72static inline Eina_F16p16 eina_f16p16_mul(Eina_F16p16 a,
73 Eina_F16p16 b);
74static inline Eina_F16p16 eina_f16p16_scale(Eina_F16p16 a,
75 int b);
76static inline Eina_F16p16 eina_f16p16_div(Eina_F16p16 a,
77 Eina_F16p16 b);
78static inline Eina_F16p16 eina_f16p16_sqrt(Eina_F16p16 a);
79static inline unsigned int eina_f16p16_fracc_get(Eina_F16p16 v);
80
81static inline Eina_F8p24 eina_f8p24_int_from(int32_t v);
82static inline int32_t eina_f8p24_int_to(Eina_F8p24 v);
83static inline Eina_F8p24 eina_f8p24_float_from(float v);
84static inline float eina_f8p24_float_to(Eina_F8p24 v);
85
86static inline Eina_F8p24 eina_f8p24_add(Eina_F8p24 a,
87 Eina_F8p24 b);
88static inline Eina_F8p24 eina_f8p24_sub(Eina_F8p24 a,
89 Eina_F8p24 b);
90static inline Eina_F8p24 eina_f8p24_mul(Eina_F8p24 a,
91 Eina_F8p24 b);
92static inline Eina_F8p24 eina_f8p24_scale(Eina_F8p24 a,
93 int b);
94static inline Eina_F8p24 eina_f8p24_div(Eina_F8p24 a,
95 Eina_F8p24 b);
96static inline Eina_F8p24 eina_f8p24_sqrt(Eina_F8p24 a);
97static inline unsigned int eina_f8p24_fracc_get(Eina_F8p24 v);
98
99static inline Eina_F32p32 eina_f16p16_to_f32p32(Eina_F16p16 a);
100static inline Eina_F32p32 eina_f8p24_to_f32p32(Eina_F8p24 a);
101static inline Eina_F16p16 eina_f32p32_to_f16p16(Eina_F32p32 a);
102static inline Eina_F16p16 eina_f8p24_to_f16p16(Eina_F8p24 a);
103static inline Eina_F8p24 eina_f32p32_to_f8p24(Eina_F32p32 a);
104static inline Eina_F8p24 eina_f16p16_to_f8p24(Eina_F16p16 a);
105
106#include "eina_inline_f32p32.x"
107#include "eina_inline_f16p16.x"
108#include "eina_inline_f8p24.x"
109#include "eina_inline_fp.x"
110
111#endif
diff --git a/libraries/eina/src/include/eina_hamster.h b/libraries/eina/src/include/eina_hamster.h
new file mode 100644
index 0000000..bea759d
--- /dev/null
+++ b/libraries/eina/src/include/eina_hamster.h
@@ -0,0 +1,58 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_HAMSTER_H_
20#define EINA_HAMSTER_H_
21
22/**
23 * @addtogroup Eina_Hamster_Group Hamster
24 *
25 * @brief These functions provide hamster calls.
26 *
27 * @{
28 */
29
30/**
31 * @addtogroup Eina_Core_Group Core
32 *
33 * @{
34 */
35
36/**
37 * @defgroup Eina_Hamster_Group Hamster
38 */
39
40
41/**
42 * @brief Get the hamster count.
43 *
44 * @return The number of available hamsters.
45 *
46 * This function returns how many hamsters you have.
47 */
48EAPI int eina_hamster_count(void);
49
50/**
51 * @}
52 */
53
54/**
55 * @}
56 */
57
58#endif /* EINA_HAMSTER_H_ */
diff --git a/libraries/eina/src/include/eina_hash.h b/libraries/eina/src/include/eina_hash.h
new file mode 100644
index 0000000..c8eb048
--- /dev/null
+++ b/libraries/eina/src/include/eina_hash.h
@@ -0,0 +1,1040 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri,
3 * Vincent Torri, Jorge Luis Zapata Muga, Cedric Bail
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_HASH_H_
21#define EINA_HASH_H_
22
23#include "eina_types.h"
24#include "eina_iterator.h"
25
26/**
27 * @page hash_01_example_page Eina_Hash in action
28 * @dontinclude eina_hash_01.c
29 *
30 * We are going to store some tuples into our table, that will map each @a name
31 * to a @a number. The cost to access a given number from the name should be
32 * very small, even with many entries in our table. This is the initial data:
33 * @skip _Phone_Entry
34 * @until // _start_entries
35 *
36 * Before starting to play with the hash, let's write a callback that will be
37 * used to free the elements from it. Since we are just storing strduped
38 * strings, we just need to free them:
39 *
40 * @skip static
41 * @until }
42 *
43 * We also need a callback to iterate over the elements of the list later, so
44 * we are defining it now:
45 *
46 * @skip Eina_Bool
47 * @until }
48 *
49 * Now let's create our @ref Eina_Hash using @ref
50 * eina_hash_string_superfast_new :
51 *
52 * @skip eina_init
53 * @until phone_book
54 *
55 * Now we add the keys and data to the hash using @ref eina_hash_add . This
56 * means that the key is copied inside the table, together with the pointer to
57 * the data (phone numbers).
58 *
59 * @skip for
60 * @until }
61 *
62 * Some basic manipulations with the hash, like finding a value given a key,
63 * deleting an entry, modifying an entry are exemplified in the following lines.
64 * Notice that the @ref eina_hash_modify function returns the old value stored
65 * in that entry, and it needs to be freed, while the @ref eina_hash_del
66 * function already calls our free callback:
67 *
68 * @skip Look for
69 * @until free(
70 *
71 * The @ref eina_hash_set function can be used to set a key-value entry to the
72 * table if it doesn't exist, or to modify an existent entry. It returns the old
73 * entry if it was already set, and NULL otherwise. But since it will
74 * return NULL on error too, we need to check if an error has occurred:
75 *
76 * @skip Modify
77 * @until printf("\n");
78 *
79 * There are different ways of iterate over the entries of a hash. Here we show
80 * two of them: using @ref eina_hash_foreach and @ref Eina_Iterator .
81 *
82 * @skip List of phones
83 * @until eina_iterator_free(it);
84 *
85 * It's also possible to change the key for a specific entry, without having to
86 * remove the entry from the table and adding it again:
87 *
88 * @skipline eina_hash_move
89 *
90 * We can remove all the elements from the table without free the table itself:
91 *
92 * @skip Empty the phone book
93 * @until eina_hash_population
94 *
95 * Or free the the entire table with its content:
96 *
97 * @skipline eina_hash_free
98 *
99 *
100 * The full code for this example can be seen here: @ref eina_hash_01_c
101 */
102
103/**
104 * @page eina_hash_01_c Hash table in action
105 *
106 * @include eina_hash_01.c
107 * @example eina_hash_01.c
108 */
109
110/**
111 * @page hash_02_example_page Different types of tables
112 *
113 * This example shows two more types of hash tables that can be created using
114 * @ref Eina_Hash . For more types, consult the reference documentation of @ref
115 * eina_hash_new.
116 * @include eina_hash_02.c
117 * @example eina_hash_02.c
118 */
119
120/**
121 * @example eina_hash_03.c
122 * Same example as @ref hash_01_example_page but using a "string small" hash
123 * table instead of "string superfast".
124 */
125
126/**
127 * @example eina_hash_04.c
128 * Same example as @ref hash_01_example_page but using a "string djb2" hash
129 * table instead of "string superfast".
130 */
131
132/**
133 * @example eina_hash_05.c
134 * Same example as @ref hash_01_example_page but using a "int32" hash
135 * table instead of "string superfast".
136 */
137
138/**
139 * @example eina_hash_06.c
140 * Same example as @ref hash_01_example_page but using a "int64" hash
141 * table instead of "string superfast".
142 */
143
144/**
145 * @example eina_hash_07.c
146 * Same example as @ref hash_01_example_page but using a "pointer" hash
147 * table instead of "string superfast".
148 */
149
150/**
151 * @example eina_hash_08.c
152 * This example shows the the usage of eina_hash_add(), eina_hash_add_by_hash(),
153 * eina_hash_direct_add_by_hash(), eina_hash_del(), eina_hash_del_by_key_hash(),
154 * eina_hash_del_by_key(), eina_hash_del_by_data(), eina_hash_find_by_hash() and
155 * eina_hash_modify_by_hash().
156 */
157
158/**
159 * @addtogroup Eina_Hash_Group Hash Table
160 *
161 * @brief Hash table management. Useful for mapping keys to values.
162 *
163 * The hash table is useful for when one wants to implement a table that maps
164 * keys (usually strings) to data, and have relatively fast access time. The
165 * performance is proportional to the load factor of the table (number of
166 * elements / number of buckets). See @ref hashtable_algo for implementation
167 * details.
168 *
169 * Different implementations exists depending on what kind of key will be used
170 * to access the data: strings, integers, pointers, stringshared or your own.
171 *
172 * Eina hash tables can copy the keys when using eina_hash_add() or not when
173 * using eina_hash_direct_add().
174 *
175 * @section hashtable_algo Algorithm
176 *
177 * The Eina_Hash is implemented using an array of N "buckets", where each
178 * bucket is a pointer to a structure that is the head of a <a
179 * href="http://en.wikipedia.org/wiki/Red-black_tree">red-black tree</a>. The
180 * array can then be indexed by the [hash_of_element mod N]. The
181 * hash_of_element is calculated using the hashing function, passed as
182 * parameter to the @ref eina_hash_new function. N is the number of buckets
183 * (array positions), and is calculated based on the buckets_power_size
184 * (argument of @ref eina_hash_new too). The following picture ilustrates the
185 * basic idea:
186 *
187 * @htmlonly
188 * <img src="01_hash-table.png" width="500" />
189 * @endhtmlonly
190 * @image latex 01_hash-table.eps
191 *
192 * Adding an element to the hash table is made of:
193 * @li calculating the hash for that key (using the specified hash function);
194 * @li calculate the array position [hash mod N];
195 * @li add the element to the rbtree on that position.
196 *
197 * The two first steps have constant time, proportional to the hash function
198 * being used. Adding the key to the rbtree will be proportional on the number
199 * of keys on that bucket.
200 *
201 * The average cost of lookup depends on the number of keys per
202 * bucket (load factor) of the table, if the distribution of keys is
203 * sufficiently uniform.
204 *
205 * @section hashtable_perf Performance
206 *
207 * As said before, the performance depends on the load factor. So trying to keep
208 * the load factor as small as possible will improve the hash table performance. But
209 * increasing the buckets_power_size will also increase the memory consumption.
210 * The default hash table creation functions already have a good number of
211 * buckets, enough for most cases. Particularly for strings, if just a few keys
212 * (less than 30) will be added to the hash table, @ref
213 * eina_hash_string_small_new should be used, since it will reduce the memory
214 * consumption for the buckets, and you still won't have many collisions.
215 * However, @ref eina_hash_string_small_new still uses the same hash calculation
216 * function that @ref eina_hash_string_superfast_new, which is more complex than
217 * @ref eina_hash_string_djb2_new. The latter has a faster hash computation
218 * function, but that will imply on a not so good distribution. But if just a
219 * few keys are being added, this is not a problem, it will still have not many
220 * collisions and be faster to calculate the hash than in a hash created with
221 * @ref eina_hash_string_small_new and @ref eina_hash_string_superfast_new.
222 *
223 * A simple comparison between them would be:
224 *
225 * @li @c djb2 - faster hash function - 256 buckets (higher memory consumption)
226 * @li @c string_small - slower hash function but less collisions - 32 buckets
227 * (lower memory consumption)
228 * @li @c string_superfast - slower hash function but less collisions - 256 buckets
229 * (higher memory consumption)
230 *
231 * Basically for a very small number of keys (10 or less), @c djb2 should be
232 * used, or @c string_small if you have a restriction on memory usage. And for a
233 * higher number of keys, @c string_superfast should be always preferred.
234 *
235 * If just stringshared keys are being added, use @ref
236 * eina_hash_stringshared_new. If a lot of keys will be added to the hash table
237 * (e.g. more than 1000), then it's better to increase the buckets_power_size.
238 * See @ref eina_hash_new for more details.
239 *
240 * When adding a new key to a hash table, use @ref eina_hash_add or @ref
241 * eina_hash_direct_add (the latter if this key is already stored elsewhere). If
242 * the key may be already inside the hash table, instead of checking with
243 * @ref eina_hash_find and then doing @ref eina_hash_add, one can use just @ref
244 * eina_hash_set (this will change the data pointed by this key if it was
245 * already present in the table).
246 *
247 * @section hashtable_tutorial Tutorial
248 *
249 * These examples show many Eina_Hash functions in action:
250 * <ul>
251 * <li> @ref hash_01_example_page
252 * <li> @ref hash_02_example_page
253 * <li> Different types of hash in use:
254 * <ul>
255 * <li> @ref eina_hash_03.c "string small"
256 * <li> @ref eina_hash_04.c "string djb2"
257 * <li> @ref eina_hash_05.c "int32"
258 * <li> @ref eina_hash_06.c "int64"
259 * <li> @ref eina_hash_07.c "pointer"
260 * </ul>
261 * <li> @ref eina_hash_08.c "Different add and delete functions"
262 * </ul>
263 */
264
265/**
266 * @addtogroup Eina_Data_Types_Group Data Types
267 *
268 * @{
269 */
270
271/**
272 * @addtogroup Eina_Containers_Group Containers
273 *
274 * @{
275 */
276
277/**
278 * @defgroup Eina_Hash_Group Hash Table
279 *
280 * @{
281 */
282
283/**
284 * @typedef Eina_Hash
285 * Type for a generic hash table.
286 */
287typedef struct _Eina_Hash Eina_Hash;
288
289typedef struct _Eina_Hash_Tuple Eina_Hash_Tuple;
290
291struct _Eina_Hash_Tuple
292{
293 const void *key; /**< The key */
294 void *data; /**< The data associated to the key */
295 unsigned int key_length; /**< The length of the key */
296};
297
298typedef unsigned int (*Eina_Key_Length)(const void *key);
299#define EINA_KEY_LENGTH(Function) ((Eina_Key_Length)Function)
300typedef int (*Eina_Key_Cmp)(const void *key1, int key1_length, const void *key2, int key2_length);
301#define EINA_KEY_CMP(Function) ((Eina_Key_Cmp)Function)
302typedef int (*Eina_Key_Hash)(const void *key, int key_length);
303#define EINA_KEY_HASH(Function) ((Eina_Key_Hash)Function)
304typedef Eina_Bool (*Eina_Hash_Foreach)(const Eina_Hash *hash, const void *key, void *data, void *fdata);
305
306
307/**
308 * @brief Create a new hash table.
309 *
310 * @param key_length_cb The function called when getting the size of the key.
311 * @param key_cmp_cb The function called when comparing the keys.
312 * @param key_hash_cb The function called when getting the values.
313 * @param data_free_cb The function called on each value when the hash table is
314 * freed, or when an item is deleted from it. @c NULL can be passed as
315 * callback.
316 * @param buckets_power_size The size of the buckets.
317 * @return The new hash table.
318 *
319 * This function creates a new hash table using user-defined callbacks
320 * to manage the hash table. On failure, @c NULL is returned and
321 * #EINA_ERROR_OUT_OF_MEMORY is set. If @p key_cmp_cb or @p key_hash_cb
322 * are @c NULL, @c NULL is returned. If @p buckets_power_size is
323 * smaller or equal than 2, or if it is greater or equal than 17,
324 * @c NULL is returned.
325 *
326 * The number of buckets created will be 2 ^ @p buckets_power_size. This means
327 * that if @p buckets_power_size is 5, there will be created 32 buckets. for a
328 * @p buckets_power_size of 8, there will be 256 buckets.
329 *
330 * Pre-defined functions are available to create a hash table. See
331 * eina_hash_string_djb2_new(), eina_hash_string_superfast_new(),
332 * eina_hash_string_small_new(), eina_hash_int32_new(),
333 * eina_hash_int64_new(), eina_hash_pointer_new() and
334 * eina_hash_stringshared_new().
335 */
336EAPI Eina_Hash *eina_hash_new(Eina_Key_Length key_length_cb,
337 Eina_Key_Cmp key_cmp_cb,
338 Eina_Key_Hash key_hash_cb,
339 Eina_Free_Cb data_free_cb,
340 int buckets_power_size) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2, 3);
341
342/**
343 * @brief Redefine the callback that clean the data of a hash
344 *
345 * @param hash The given hash table
346 * @param data_free_cb The function called on each value when the hash
347 * table is freed, or when an item is deleted from it. @c NULL can be passed as
348 * callback.
349 * @since 1.1
350 * See @ref eina_hash_new.
351 */
352EAPI void eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb) EINA_ARG_NONNULL(1);
353
354/**
355 * @brief Create a new hash table using the djb2 algorithm.
356 *
357 * @param data_free_cb The function called on each value when the hash table
358 * is freed, or when an item is deleted from it. @c NULL can be passed as
359 * callback.
360 * @return The new hash table.
361 *
362 * This function creates a new hash table using the djb2 algorithm for
363 * table management and strcmp() to compare the keys. Values can then
364 * be looked up with pointers other than the original key pointer that
365 * was used to add values. On failure, this function returns @c NULL.
366 */
367EAPI Eina_Hash *eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb);
368
369/**
370 * @brief Create a new hash table for use with strings.
371 *
372 * @param data_free_cb The function called on each value when the hash table
373 * is freed, or when an item is deleted from it. @c NULL can be passed as
374 * callback.
375 * @return The new hash table.
376 *
377 * This function creates a new hash table using the superfast algorithm
378 * for table management and strcmp() to compare the keys. Values can
379 * then be looked up with pointers other than the original key pointer
380 * that was used to add values. On failure, this function returns
381 * @c NULL.
382 */
383EAPI Eina_Hash *eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb);
384
385/**
386 * @brief Create a new hash table for use with strings with small bucket size.
387 *
388 * @param data_free_cb The function called on each value when the hash table
389 * is freed, or when an item is deleted from it. @c NULL can be passed as
390 * callback.
391 * @return The new hash table.
392 *
393 * This function creates a new hash table using the superfast algorithm
394 * for table management and strcmp() to compare the keys, but with a
395 * smaller bucket size (compared to eina_hash_string_superfast_new())
396 * which will minimize the memory used by the returned hash
397 * table. Values can then be looked up with pointers other than the
398 * original key pointer that was used to add values. On failure, this
399 * function returns @c NULL.
400 */
401EAPI Eina_Hash *eina_hash_string_small_new(Eina_Free_Cb data_free_cb);
402
403/**
404 * @brief Create a new hash table for use with 32bit integers.
405 *
406 * @param data_free_cb The function called on each value when the hash table
407 * is freed, or when an item is deleted from it. @c NULL can be passed as
408 * callback.
409 * @return The new hash table.
410 *
411 * This function creates a new hash table where keys are 32bit integers.
412 * When adding or looking up in the hash table, pointers to 32bit integers
413 * must be passed. They can be addresses on the stack if you let the
414 * eina_hash copy the key. Values can then
415 * be looked up with pointers other than the original key pointer that was
416 * used to add values. This method is not suitable to match string keys as
417 * it would only match the first character.
418 * On failure, this function returns @c NULL.
419 */
420EAPI Eina_Hash *eina_hash_int32_new(Eina_Free_Cb data_free_cb);
421
422/**
423 * @brief Create a new hash table for use with 64bit integers.
424 *
425 * @param data_free_cb The function called on each value when the hash table
426 * is freed, or when an item is deleted from it. @c NULL can be passed as
427 * callback.
428 * @return The new hash table.
429 *
430 * This function creates a new hash table where keys are 64bit integers.
431 * When adding or looking up in the hash table, pointers to 64bit integers
432 * must be passed. They can be addresses on the stack. Values can then
433 * be looked up with pointers other than the original key pointer that was
434 * used to add values. This method is not suitable to match string keys as
435 * it would only match the first character.
436 * On failure, this function returns @c NULL.
437 */
438EAPI Eina_Hash *eina_hash_int64_new(Eina_Free_Cb data_free_cb);
439
440/**
441 * @brief Create a new hash table for use with pointers.
442 *
443 * @param data_free_cb The function called on each value when the hash table
444 * is freed, or when an item is deleted from it. @c NULL can be passed as
445 * callback.
446 * @return The new hash table.
447 *
448 * This function creates a new hash table using the int64/int32 algorithm for
449 * table management and dereferenced pointers to compare the
450 * keys. Values can then be looked up with pointers other than the
451 * original key pointer that was used to add values. This method may
452 * appear to be able to match string keys, actually it only matches
453 * the first character. On failure, this function returns @c NULL.
454 */
455EAPI Eina_Hash *eina_hash_pointer_new(Eina_Free_Cb data_free_cb);
456
457/**
458 * @brief Create a new hash table optimized for stringshared values.
459 *
460 * @param data_free_cb The function called on each value when the hash table
461 * is freed, or when an item is deleted from it. @c NULL can be passed as
462 * callback.
463 * @return The new hash table.
464 *
465 * This function creates a new hash table optimized for stringshared
466 * values. Values CAN NOT be looked up with pointers not
467 * equal to the original key pointer that was used to add a value. On failure,
468 * this function returns @c NULL.
469 *
470 * Excerpt of code that will NOT work with this type of hash:
471 *
472 * @code
473 * extern Eina_Hash *hash;
474 * extern const char *value;
475 * const char *a = eina_stringshare_add("key");
476 *
477 * eina_hash_add(hash, a, value);
478 * eina_hash_find(hash, "key")
479 * @endcode
480 */
481EAPI Eina_Hash *eina_hash_stringshared_new(Eina_Free_Cb data_free_cb);
482
483/**
484 * @brief Add an entry to the given hash table.
485 *
486 * @param hash The given hash table. Cannot be @c NULL.
487 * @param key A unique key. Cannot be @c NULL.
488 * @param data Data to associate with the string given by @p key. Cannot be @c
489 * NULL.
490 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
491 *
492 * This function adds @p key to @p hash. @p key is
493 * expected to be unique within the hash table. Key uniqueness varies
494 * depending on the type of @p hash: a stringshared @ref Eina_Hash
495 * need to have unique pointers (which implies unique strings).
496 * All other string hash types require the strings
497 * themselves to be unique. Pointer, int32 and int64 hashes need to have these
498 * values as unique. Failure to use sufficient uniqueness will
499 * result in unexpected results when inserting data pointers accessed
500 * with eina_hash_find(), and removed with eina_hash_del(). Key
501 * strings are case sensitive. If an error occurs, eina_error_get()
502 * should be used to determine if an allocation error occurred during
503 * this function. This function returns #EINA_FALSE if an error
504 * occurred, #EINA_TRUE otherwise.
505 */
506EAPI Eina_Bool eina_hash_add(Eina_Hash *hash,
507 const void *key,
508 const void *data) EINA_ARG_NONNULL(1, 2, 3);
509
510/**
511 * @brief Add an entry to the given hash table without duplicating the string
512 * key.
513 *
514 * @param hash The given hash table. Cannot be @c NULL.
515 * @param key A unique key. Cannot be @c NULL.
516 * @param data Data to associate with the string given by @p key. Cannot be @c
517 * NULL
518 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
519 *
520 * This function adds @p key to @p hash. @p key is
521 * expected to be unique within the hash table. Key uniqueness varies
522 * depending on the type of @p hash: a stringshared @ref Eina_Hash
523 * need have unique pointers (which implies unique strings).
524 * All other string hash types require the strings
525 * themselves to be unique. Pointer, int32 and int64 hashes need to have these
526 * values as unique. Failure to use sufficient uniqueness will
527 * result in unexpected results when inserting data pointers accessed
528 * with eina_hash_find(), and removed with eina_hash_del(). This
529 * function does not make a copy of @p key, so it must be a string
530 * constant or stored elsewhere ( in the object being added). Key
531 * strings are case sensitive. If an error occurs, eina_error_get()
532 * should be used to determine if an allocation error occurred during
533 * this function. This function returns #EINA_FALSE if an error
534 * occurred, #EINA_TRUE otherwise.
535 */
536EAPI Eina_Bool eina_hash_direct_add(Eina_Hash *hash,
537 const void *key,
538 const void *data) EINA_ARG_NONNULL(1, 2, 3);
539
540/**
541 * @brief Remove the entry identified by a key or a data from the given
542 * hash table.
543 *
544 * @param hash The given hash table.
545 * @param key The key.
546 * @param data The data pointer to remove if the key is @c NULL.
547 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
548 *
549 * This function removes the entry identified by @p key or @p data
550 * from @p hash. If a free function was given to the
551 * callback on creation, it will be called for the data being
552 * deleted. If @p hash is @c NULL, the functions returns immediately
553 * #EINA_FALSE. If @p key is @c NULL, then @p data is used to find the a
554 * match to remove, otherwise @p key is used and @p data is not
555 * required and can be @c NULL. This function returns #EINA_FALSE if
556 * an error occurred, #EINA_TRUE otherwise.
557 *
558 * @note if you know you already have the key, use
559 * eina_hash_del_by_key() or eina_hash_del_by_key_hash(). If you
560 * know you don't have the key, use eina_hash_del_by_data()
561 * directly.
562 */
563EAPI Eina_Bool eina_hash_del(Eina_Hash *hash,
564 const void *key,
565 const void *data) EINA_ARG_NONNULL(1);
566
567/**
568 * @brief Retrieve a specific entry in the given hash table.
569 *
570 * @param hash The given hash table.
571 * @param key The key of the entry to find.
572 * @return The data pointer for the stored entry on success, @c NULL
573 * otherwise.
574 *
575 * This function retrieves the entry associated to @p key in
576 * @p hash. If @p hash is @c NULL, this function returns immediately
577 * @c NULL. This function returns the data pointer on success, @c NULL
578 * otherwise.
579 */
580EAPI void *eina_hash_find(const Eina_Hash *hash,
581 const void *key) EINA_ARG_NONNULL(1, 2);
582
583/**
584 * @brief Modify the entry pointer at the specified key and return the old
585 * entry.
586 * @param hash The given hash table.
587 * @param key The key of the entry to modify.
588 * @param data The data to replace the old entry.
589 * @return The data pointer for the old stored entry on success, or
590 * @c NULL otherwise.
591 *
592 * This function modifies the data of @p key with @p data in @p
593 * hash. If no entry is found, nothing is added to @p hash. On success
594 * this function returns the old entry, otherwise it returns @c NULL.
595 */
596EAPI void *eina_hash_modify(Eina_Hash *hash,
597 const void *key,
598 const void *data) EINA_ARG_NONNULL(1, 2, 3);
599
600/**
601 * @brief Modify the entry pointer at the specified key and return the
602 * old entry or add the entry if not found.
603 *
604 * @param hash The given hash table.
605 * @param key The key of the entry to modify.
606 * @param data The data to replace the old entry
607 * @return The data pointer for the old stored entry, or @c NULL
608 * otherwise.
609 *
610 * This function modifies the data of @p key with @p data in @p
611 * hash. If no entry is found, @p data is added to @p hash with the
612 * key @p key. On success this function returns the old entry,
613 * otherwise it returns @c NULL. To check for errors, use
614 * eina_error_get().
615 */
616EAPI void *eina_hash_set(Eina_Hash *hash,
617 const void *key,
618 const void *data) EINA_ARG_NONNULL(1, 2);
619
620/**
621 * @brief Change the key associated with a data without triggering the
622 * free callback.
623 *
624 * @param hash The given hash table.
625 * @param old_key The current key associated with the data
626 * @param new_key The new key to associate data with
627 * @return EINA_FALSE in any case but success, EINA_TRUE on success.
628 *
629 * This function allows for the move of data from one key to another,
630 * but does not call the Eina_Free_Cb associated with the hash table
631 * when destroying the old key.
632 */
633EAPI Eina_Bool eina_hash_move(Eina_Hash *hash,
634 const void *old_key,
635 const void *new_key) EINA_ARG_NONNULL(1, 2, 3);
636
637/**
638 * Free the given hash table resources.
639 *
640 * @param hash The hash table to be freed.
641 *
642 * This function frees up all the memory allocated to storing @p hash,
643 * and call the free callback if it has been passed to the hash table
644 * at creation time. If no free callback has been passed, any entries
645 * in the table that the program has no more pointers for elsewhere
646 * may now be lost, so this should only be called if the program has
647 * already freed any allocated data in the hash table or has the
648 * pointers for data in the table stored elsewhere as well. If @p hash
649 * is @c NULL, the function returns immediately.
650 *
651 * Example:
652 * @code
653 * extern Eina_Hash *hash;
654 *
655 * eina_hash_free(hash);
656 * hash = NULL;
657 * @endcode
658 */
659EAPI void eina_hash_free(Eina_Hash *hash) EINA_ARG_NONNULL(1);
660
661/**
662 * Free the given hash table buckets resources.
663 *
664 * @param hash The hash table whose buckets have to be freed.
665 *
666 * This function frees up all the memory allocated to storing the
667 * buckets of @p hash, and calls the free callback on all hash table
668 * buckets if it has been passed to the hash table at creation time,
669 * then frees the buckets. If no free callback has been passed, no
670 * buckets value will be freed. If @p hash is @c NULL, the function
671 * returns immediately.
672 */
673EAPI void eina_hash_free_buckets(Eina_Hash *hash) EINA_ARG_NONNULL(1);
674
675/**
676 * @brief Returns the number of entries in the given hash table.
677 *
678 * @param hash The given hash table.
679 * @return The number of entries in the hash table.
680 *
681 * This function returns the number of entries in @p hash, or 0 on
682 * error. If @p hash is @c NULL, 0 is returned.
683 */
684EAPI int eina_hash_population(const Eina_Hash *hash) EINA_ARG_NONNULL(1);
685
686/**
687 * @brief Add an entry to the given hash table.
688 *
689 * @param hash The given hash table. Cannot be @c NULL.
690 * @param key A unique key. Cannot be @c NULL.
691 * @param key_length The length of the key.
692 * @param key_hash The hash that will always match key.
693 * @param data The data to associate with the string given by the key. Cannot be
694 * @c NULL.
695 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
696 *
697 * This function adds @p key to @p hash. @p hash, @p key and @p data
698 * cannot be @c NULL, in that case #EINA_FALSE is returned. @p key is
699 * expected to be a unique within the hash table. Otherwise,
700 * one cannot be sure which inserted data pointer will be accessed
701 * with @ref eina_hash_find, and removed with @ref eina_hash_del. Do
702 * not forget to count '\\0' for string when setting the value of
703 * @p key_length. @p key_hash is expected to always match
704 * @p key. Otherwise, one cannot be sure to find it again with @ref
705 * eina_hash_find_by_hash. Key strings are case sensitive. If an error
706 * occurs, eina_error_get() should be used to determine if an
707 * allocation error occurred during this function. This function
708 * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
709 *
710 * @see eina_hash_add()
711 */
712EAPI Eina_Bool eina_hash_add_by_hash(Eina_Hash *hash,
713 const void *key,
714 int key_length,
715 int key_hash,
716 const void *data) EINA_ARG_NONNULL(1, 2, 5);
717
718/**
719 * @brief Add an entry to the given hash table and do not duplicate the string
720 * key.
721 *
722 * @param hash The given hash table. Cannot be @c NULL.
723 * @param key A unique key. Cannot be @c NULL.
724 * @param key_length Should be the length of @p key (don't forget to count
725 * '\\0' for string).
726 * @param key_hash The hash that will always match key.
727 * @param data Data to associate with the string given by @p key. Cannot be @c
728 * NULL.
729 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
730 *
731 * This function adds @p key to @p hash. @p hash, @p key and @p data
732 * can be @c NULL, in that case #EINA_FALSE is returned. @p key is
733 * expected to be unique within the hash table. Otherwise,
734 * one cannot be sure which inserted data pointer will be accessed
735 * with @ref eina_hash_find, and removed with @ref eina_hash_del. This
736 * function does not make a copy of @p key so it must be a string
737 * constant or stored elsewhere (in the object being added). Do
738 * not forget to count '\\0' for string when setting the value of
739 * @p key_length. @p key_hash is expected to always match
740 * @p key. Otherwise, one cannot be sure to find it again with @ref
741 * eina_hash_find_by_hash. Key strings are case sensitive. If an error
742 * occurs, eina_error_get() should be used to determine if an
743 * allocation error occurred during this function. This function
744 * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
745 *
746 * @see eina_hash_direct_add()
747 */
748EAPI Eina_Bool eina_hash_direct_add_by_hash(Eina_Hash *hash,
749 const void *key,
750 int key_length,
751 int key_hash,
752 const void *data) EINA_ARG_NONNULL(1, 2, 5);
753
754/**
755 * @brief Remove the entry identified by a key and a key hash from the given
756 * hash table.
757 *
758 * @param hash The given hash table. Cannot be @c NULL.
759 * @param key The key. Cannot be @c NULL.
760 * @param key_length The length of the key.
761 * @param key_hash The hash that always match the key.
762 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
763 *
764 * This function removes the entry identified by @p key and
765 * @p key_hash from @p hash. If a free function was given to the
766 * callback on creation, it will be called for the data being
767 * deleted. Do not forget to count '\\0' for string when setting the
768 * value of @p key_length. If @p hash or @p key are @c NULL, the
769 * functions returns immediately #EINA_FALSE. This function returns
770 * #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
771 *
772 * @note if you don't have the key_hash, use eina_hash_del_by_key() instead.
773 * @note if you don't have the key, use eina_hash_del_by_data() instead.
774 */
775EAPI Eina_Bool eina_hash_del_by_key_hash(Eina_Hash *hash,
776 const void *key,
777 int key_length,
778 int key_hash) EINA_ARG_NONNULL(1, 2);
779
780/**
781 * @brief Remove the entry identified by a key from the given hash table.
782 *
783 * This version will calculate key length and hash by using functions
784 * provided to hash creation function.
785 *
786 * @param hash The given hash table. Cannot be @c NULL.
787 * @param key The key. Cannot be @c NULL.
788 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
789 *
790 * This function removes the entry identified by @p key from @p
791 * hash. The key length and hash will be calculated automatically by
792 * using functiond provided to has creation function. If a free
793 * function was given to the callback on creation, it will be called
794 * for the data being deleted. If @p hash or @p key are @c NULL, the
795 * functions returns immediately #EINA_FALSE. This function returns
796 * #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
797 *
798 * @note if you already have the key_hash, use eina_hash_del_by_key_hash()
799 * instead.
800 * @note if you don't have the key, use eina_hash_del_by_data() instead.
801 */
802EAPI Eina_Bool eina_hash_del_by_key(Eina_Hash *hash,
803 const void *key) EINA_ARG_NONNULL(1, 2);
804
805/**
806 * @brief Remove the entry identified by a data from the given hash table.
807 *
808 * This version is slow since there is no quick access to nodes based on data.
809 *
810 * @param hash The given hash table. Cannot be @c NULL.
811 * @param data The data value to search and remove. Cannot be @c NULL.
812 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
813 * thing goes fine.
814 *
815 * This function removes the entry identified by @p data from @p
816 * hash. If a free function was given to the callback on creation, it
817 * will be called for the data being deleted. If @p hash or @p data
818 * are @c NULL, the functions returns immediately #EINA_FALSE. This
819 * function returns #EINA_FALSE if an error occurred, #EINA_TRUE
820 * otherwise.
821 *
822 * @note if you already have the key, use eina_hash_del_by_key() or
823 * eina_hash_del_by_key_hash() instead.
824 */
825EAPI Eina_Bool eina_hash_del_by_data(Eina_Hash *hash,
826 const void *data) EINA_ARG_NONNULL(1, 2);
827
828/**
829 * @brief Remove the entry identified by a key and a key hash or a
830 * data from the given hash table.
831 *
832 * If @p key is @c NULL, then @p data is used to find a match to
833 * remove.
834 *
835 * @param hash The given hash table. Cannot be @c NULL.
836 * @param key The key.
837 * @param key_length The length of the key.
838 * @param key_hash The hash that always match the key.
839 * @param data The data pointer to remove if the key is @c NULL.
840 * @return #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
841 *
842 * This function removes the entry identified by @p key and
843 * @p key_hash, or @p data, from @p hash. If a free function was given to
844 * the callback on creation, it will be called for the data being
845 * deleted. If @p hash is @c NULL, the functions returns immediately
846 * #EINA_FALSE. If @p key is @c NULL, then @p key_length and @p key_hash
847 * are ignored and @p data is used to find a match to remove,
848 * otherwise @p key and @p key_hash are used and @p data is not
849 * required and can be @c NULL. Do not forget to count '\\0' for
850 * string when setting the value of @p key_length. This function
851 * returns #EINA_FALSE if an error occurred, #EINA_TRUE otherwise.
852 *
853 * @note if you know you already have the key, use eina_hash_del_by_key_hash(),
854 * if you know you don't have the key, use eina_hash_del_by_data()
855 * directly.
856 */
857EAPI Eina_Bool eina_hash_del_by_hash(Eina_Hash *hash,
858 const void *key,
859 int key_length,
860 int key_hash,
861 const void *data) EINA_ARG_NONNULL(1);
862
863/**
864 * @brief Retrieve a specific entry in the given hash table.
865 *
866 * @param hash The given hash table. Cannot be @c NULL.
867 * @param key The key of the entry to find.
868 * @param key_length The length of the key.
869 * @param key_hash The hash that always match the key
870 * @return The data pointer for the stored entry on success, @c NULL
871 * otherwise.
872 *
873 * This function retrieves the entry associated to @p key of length
874 * @p key_length in @p hash. @p key_hash is the hash that always match
875 * @p key. It is ignored if @p key is @c NULL. Do not forget to count
876 * '\\0' for string when setting the value of @p key_length. If
877 * @p hash is @c NULL, this function returns immediately @c NULL. This
878 * function returns the data pointer on success, @c NULL otherwise.
879 */
880EAPI void *eina_hash_find_by_hash(const Eina_Hash *hash,
881 const void *key,
882 int key_length,
883 int key_hash) EINA_ARG_NONNULL(1, 2);
884
885/**
886 * @brief Modify the entry pointer at the specified key and returns
887 * the old entry.
888 *
889 * @param hash The given hash table.
890 * @param key The key of the entry to modify.
891 * @param key_length Should be the length of @p key (don't forget to count
892 * '\\0' for string).
893 * @param key_hash The hash that always match the key. Ignored if @p key is
894 * @c NULL.
895 * @param data The data to replace the old entry, if it exists.
896 * @return The data pointer for the old stored entry, or @c NULL if not
897 * found. If an existing entry is not found, nothing is added to the
898 * hash.
899 */
900EAPI void *eina_hash_modify_by_hash(Eina_Hash *hash,
901 const void *key,
902 int key_length,
903 int key_hash,
904 const void *data) EINA_ARG_NONNULL(1, 2, 5);
905
906/**
907 * @brief Returned a new iterator associated to hash keys.
908 *
909 * @param hash The hash.
910 * @return A new iterator.
911 *
912 * This function returns a newly allocated iterator associated to @p
913 * hash. If @p hash is not populated, this function still returns a
914 * valid iterator that will always return false on
915 * eina_iterator_next(), thus keeping API sane.
916 *
917 * If the memory can not be allocated, NULL is returned and
918 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
919 * returned.
920 *
921 * @warning if the hash structure changes then the iterator becomes
922 * invalid! That is, if you add or remove items this iterator
923 * behavior is undefined and your program may crash!
924 */
925EAPI Eina_Iterator *eina_hash_iterator_key_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
926
927/**
928 * @brief Returned a new iterator associated to hash data.
929 *
930 * @param hash The hash.
931 * @return A new iterator.
932 *
933 * This function returns a newly allocated iterator associated to
934 * @p hash. If @p hash is not populated, this function still returns a
935 * valid iterator that will always return false on
936 * eina_iterator_next(), thus keeping API sane.
937 *
938 * If the memory can not be allocated, @c NULL is returned and
939 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
940 * returned.
941 *
942 * @warning if the hash structure changes then the iterator becomes
943 * invalid. That is, if you add or remove items this iterator behavior
944 * is undefined and your program may crash.
945 */
946EAPI Eina_Iterator *eina_hash_iterator_data_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
947
948/**
949 * @brief Returned a new iterator associated to hash keys and data.
950 *
951 * @param hash The hash.
952 * @return A new iterator.
953 *
954 * This function returns a newly allocated iterator associated to @p
955 * hash. If @p hash is not populated, this function still returns a
956 * valid iterator that will always return false on
957 * eina_iterator_next(), thus keeping API sane.
958 *
959 * If the memory can not be allocated, NULL is returned and
960 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
961 * returned.
962 *
963 * @note iterator data will provide values as Eina_Hash_Tuple that should not
964 * be modified!
965 *
966 * @warning if the hash structure changes then the iterator becomes
967 * invalid! That is, if you add or remove items this iterator
968 * behavior is undefined and your program may crash!
969 */
970EAPI Eina_Iterator *eina_hash_iterator_tuple_new(const Eina_Hash *hash) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
971
972/**
973 * @brief Call a function on every member stored in the hash table
974 *
975 * @param hash The hash table whose members will be walked
976 * @param func The function to call on each parameter
977 * @param fdata The data pointer to pass to the function being called
978 *
979 * This function goes through every entry in the hash table @p hash and calls
980 * the function @p func on each member. The function should @b not modify the
981 * hash table contents if it returns 1. @b If the hash table contents are
982 * modified by this function or the function wishes to stop processing it must
983 * return 0, otherwise return 1 to keep processing.
984 *
985 * Example:
986 * @code
987 * extern Eina_Hash *hash;
988 *
989 * Eina_Bool hash_fn(const Eina_Hash *hash, const void *key,
990 * void *data, void *fdata)
991 * {
992 * printf("Func data: %s, Hash entry: %s / %p\n",
993 * fdata, (const char *)key, data);
994 * return 1;
995 * }
996 *
997 * int main(int argc, char **argv)
998 * {
999 * char *hash_fn_data;
1000 *
1001 * hash_fn_data = strdup("Hello World");
1002 * eina_hash_foreach(hash, hash_fn, hash_fn_data);
1003 * free(hash_fn_data);
1004 * }
1005 * @endcode
1006 */
1007EAPI void eina_hash_foreach(const Eina_Hash *hash,
1008 Eina_Hash_Foreach cb,
1009 const void *fdata) EINA_ARG_NONNULL(1, 2);
1010/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html) hash function used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */
1011EAPI int eina_hash_superfast(const char *key,
1012 int len) EINA_ARG_NONNULL(1);
1013/* Hash function first reported by dan bernstein many years ago in comp.lang.c */
1014static inline int eina_hash_djb2(const char *key,
1015 int len) EINA_ARG_NONNULL(1);
1016static inline int eina_hash_djb2_len(const char *key,
1017 int *plen) EINA_ARG_NONNULL(1, 2);
1018/* Hash function from http://www.concentric.net/~Ttwang/tech/inthash.htm */
1019static inline int eina_hash_int32(const unsigned int *pkey,
1020 int len) EINA_ARG_NONNULL(1);
1021static inline int eina_hash_int64(const unsigned long int *pkey,
1022 int len) EINA_ARG_NONNULL(1);
1023/* http://sites.google.com/site/murmurhash/ */
1024static inline int eina_hash_murmur3(const char *key,
1025 int len) EINA_ARG_NONNULL(1);
1026#include "eina_inline_hash.x"
1027
1028/**
1029 * @}
1030 */
1031
1032/**
1033 * @}
1034 */
1035
1036/**
1037 * @}
1038 */
1039
1040#endif /*EINA_HASH_H_*/
diff --git a/libraries/eina/src/include/eina_inline_array.x b/libraries/eina/src/include/eina_inline_array.x
new file mode 100644
index 0000000..f9f6026
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_array.x
@@ -0,0 +1,164 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_ARRAY_X_
20#define EINA_INLINE_ARRAY_X_
21
22#include <stdio.h>
23
24/**
25 * @cond LOCAL
26 */
27
28EAPI Eina_Bool eina_array_grow(Eina_Array *array);
29
30/**
31 * @endcond
32 */
33
34/**
35 * @addtogroup Eina_Array_Group Array
36 *
37 * @brief These functions provide array management.
38 *
39 * @{
40 */
41
42/**
43 * @brief Append a data to an array.
44 *
45 * @param array The array.
46 * @param data The data to add.
47 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
48 *
49 * This function appends @p data to @p array. For performance
50 * reasons, there is no check of @p array. If it is @c NULL or
51 * invalid, the program may crash. If @p data is @c NULL, or if an
52 * allocation is necessary and fails, #EINA_FALSE is returned and
53 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, #EINA_TRUE is
54 * returned.
55 */
56
57static inline Eina_Bool
58eina_array_push(Eina_Array *array, const void *data)
59{
60 if (!data) return EINA_FALSE;
61
62 if (EINA_UNLIKELY((array->count + 1) > array->total))
63 if (!eina_array_grow(array))
64 return EINA_FALSE;
65
66 array->data[array->count++] = (void*) data;
67
68 return EINA_TRUE;
69}
70
71/**
72 * @brief Remove the last data of an array.
73 *
74 * @param array The array.
75 * @return The retrieved data.
76 *
77 * This function removes the last data of @p array, decreases the count
78 * of @p array and returns the data. For performance reasons, there
79 * is no check of @p array. If it is @c NULL or invalid, the program
80 * may crash. If the count member is less or equal than 0, @c NULL is
81 * returned.
82 */
83static inline void *
84eina_array_pop(Eina_Array *array)
85{
86 void *ret = NULL;
87
88 if (array->count <= 0)
89 goto on_empty;
90
91 ret = array->data[--array->count];
92
93 on_empty:
94 return ret;
95}
96
97/**
98 * @brief Return the data at a given position in an array.
99 *
100 * @param array The array.
101 * @param idx The potition of the data to retrieve.
102 * @return The retrieved data.
103 *
104 * This function returns the data at the position @p idx in @p
105 * array. For performance reasons, there is no check of @p array or @p
106 * idx. If it is @c NULL or invalid, the program may crash.
107 */
108static inline void *
109eina_array_data_get(const Eina_Array *array, unsigned int idx)
110{
111 return array->data[idx];
112}
113
114static inline void
115eina_array_data_set(const Eina_Array *array, unsigned int idx, const void *data)
116{
117 array->data[idx] = (void*) data;
118}
119
120/**
121 * @brief Return the number of elements in an array.
122 *
123 * @param array The array.
124 * @return The number of elements.
125 *
126 * This function returns the number of elements in @p array. For
127 * performance reasons, there is no check of @p array. If it is
128 * @c NULL or invalid, the program may crash.
129 */
130static inline unsigned int
131eina_array_count_get(const Eina_Array *array)
132{
133 return array->count;
134}
135
136static inline Eina_Bool
137eina_array_foreach(Eina_Array *array, Eina_Each_Cb cb, void *fdata)
138{
139 void *data;
140 Eina_Array_Iterator iterator;
141 unsigned int i;
142 Eina_Bool ret = EINA_TRUE;
143
144 EINA_ARRAY_ITER_NEXT(array, i, data, iterator)
145 if (cb(array, data, fdata) != EINA_TRUE)
146 {
147 ret = EINA_FALSE;
148 break;
149 }
150
151 return ret;
152}
153
154static inline void
155eina_array_clean(Eina_Array *array)
156{
157 array->count = 0;
158}
159
160/**
161 * @}
162 */
163
164#endif
diff --git a/libraries/eina/src/include/eina_inline_f16p16.x b/libraries/eina/src/include/eina_inline_f16p16.x
new file mode 100644
index 0000000..e16d188
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_f16p16.x
@@ -0,0 +1,83 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 * Copyright (C) 2009 Cedric BAIL
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_INLINE_F16P16_X_
21#define EINA_INLINE_F16P16_X_
22
23static inline Eina_F16p16
24eina_f16p16_add(Eina_F16p16 a, Eina_F16p16 b)
25{
26 return a + b;
27}
28
29static inline Eina_F16p16
30eina_f16p16_sub(Eina_F16p16 a, Eina_F16p16 b)
31{
32 return a - b;
33}
34
35static inline Eina_F16p16
36eina_f16p16_mul(Eina_F16p16 a, Eina_F16p16 b)
37{
38 return (Eina_F16p16)(((int64_t)a * (int64_t)b) >> 16);
39}
40
41static inline Eina_F16p16
42eina_f16p16_scale(Eina_F16p16 a, int b)
43{
44 return a * b;
45}
46
47static inline Eina_F16p16
48eina_f16p16_div(Eina_F16p16 a, Eina_F16p16 b)
49{
50 return (Eina_F16p16) ((((int64_t) a) << 16) / (int64_t) b);
51}
52
53static inline Eina_F16p16
54eina_f16p16_sqrt(Eina_F16p16 a)
55{
56 unsigned int root, remHi, remLo, testDiv, count;
57
58 root = 0; /* Clear root */
59 remHi = 0; /* Clear high part of partial remainder */
60 remLo = a; /* Get argument into low part of partial remainder */
61 count = (15 + (16 >> 1)); /* Load loop counter */
62 do {
63 remHi = (remHi << 2) | (remLo >> 30);
64 remLo <<= 2; /* get 2 bits of arg */
65 root <<= 1; /* Get ready for the next bit in the root */
66 testDiv = (root << 1) + 1; /* Test radical */
67 if (remHi >= testDiv)
68 {
69 remHi -= testDiv;
70 root++;
71 }
72 } while (count-- != 0);
73
74 return root;
75}
76
77static inline unsigned int
78eina_f16p16_fracc_get(Eina_F16p16 v)
79{
80 return (v & 0xffff);
81}
82
83#endif
diff --git a/libraries/eina/src/include/eina_inline_f32p32.x b/libraries/eina/src/include/eina_inline_f32p32.x
new file mode 100644
index 0000000..73480de
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_f32p32.x
@@ -0,0 +1,110 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2009 Jorge Luis Zapata Muga, Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_F32P32_X_
20# define EINA_INLINE_F32P32_X_
21
22#include <stdlib.h>
23
24static inline Eina_F32p32
25eina_f32p32_add(Eina_F32p32 a, Eina_F32p32 b)
26{
27 return a + b;
28}
29
30static inline Eina_F32p32
31eina_f32p32_sub(Eina_F32p32 a, Eina_F32p32 b)
32{
33 return a - b;
34}
35
36static inline Eina_F32p32
37eina_f32p32_mul(Eina_F32p32 a, Eina_F32p32 b)
38{
39 /* Prevent overflow and do '(a * b) >> 32' */
40 /* Basically do: Eina_F16p16 * Eina_F16p16 = Eina_F32p32 */
41 Eina_F32p32 up;
42 Eina_F32p32 down;
43 Eina_F32p32 result;
44 uint64_t as, bs;
45 Eina_F32p32 sign;
46
47 sign = a ^ b;
48 as = eina_fp32p32_llabs(a);
49 bs = eina_fp32p32_llabs(b);
50
51 up = (as >> 16) * (bs >> 16);
52 down = (as & 0xFFFF) * (bs & 0xFFFF);
53
54 result = up + (down >> 32);
55
56 return sign < 0 ? - result : result;
57}
58
59static inline Eina_F32p32
60eina_f32p32_scale(Eina_F32p32 a, int b)
61{
62 return a * b;
63}
64
65static inline Eina_F32p32
66eina_f32p32_div(Eina_F32p32 a, Eina_F32p32 b)
67{
68 Eina_F32p32 sign;
69 Eina_F32p32 result;
70
71 sign = a ^ b;
72
73 if (b == 0)
74 return sign < 0 ? (Eina_F32p32) 0x8000000000000000ull : (Eina_F32p32) 0x7FFFFFFFFFFFFFFFull;
75
76 result = (eina_f32p32_mul(eina_fp32p32_llabs(a), (((uint64_t) 1 << 62) / ((uint64_t)(eina_fp32p32_llabs(b)) >> 2))));
77
78 return sign < 0 ? - result : result;
79}
80
81static inline Eina_F32p32
82eina_f32p32_sqrt(Eina_F32p32 a)
83{
84 uint64_t root, remHi, remLo, testDiv, count;
85
86 root = 0; /* Clear root */
87 remHi = 0; /* Clear high part of partial remainder */
88 remLo = a; /* Get argument into low part of partial remainder */
89 count = (31 + (32 >> 1)); /* Load loop counter */
90 do {
91 remHi = (remHi << 2) | (remLo >> 30);
92 remLo <<= 2; /* get 2 bits of arg */
93 root <<= 1; /* Get ready for the next bit in the root */
94 testDiv = (root << 1) + 1; /* Test radical */
95 if (remHi >= testDiv) {
96 remHi -= testDiv;
97 root++;
98 }
99 } while (count-- != 0);
100
101 return root;
102}
103
104static inline unsigned int
105eina_f32p32_fracc_get(Eina_F32p32 v)
106{
107 return (unsigned int)v;
108}
109
110#endif
diff --git a/libraries/eina/src/include/eina_inline_f8p24.x b/libraries/eina/src/include/eina_inline_f8p24.x
new file mode 100644
index 0000000..f80bf61
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_f8p24.x
@@ -0,0 +1,82 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 * Copyright (C) 2009 Cedric BAIL
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_INLINE_F8P24_X_
21#define EINA_INLINE_F8P24_X_
22
23static inline Eina_F8p24
24eina_f8p24_add(Eina_F8p24 a, Eina_F8p24 b)
25{
26 return a + b;
27}
28
29static inline Eina_F8p24
30eina_f8p24_sub(Eina_F8p24 a, Eina_F8p24 b)
31{
32 return a - b;
33}
34
35static inline Eina_F8p24
36eina_f8p24_mul(Eina_F8p24 a, Eina_F8p24 b)
37{
38 return (Eina_F8p24)(((int64_t) a * (int64_t) b) >> 24);
39}
40
41static inline Eina_F8p24
42eina_f8p24_scale(Eina_F8p24 a, int b)
43{
44 return a * b;
45}
46
47static inline Eina_F8p24
48eina_f8p24_div(Eina_F8p24 a, Eina_F8p24 b)
49{
50 return (Eina_F8p24) ((((int64_t) a) << 24) / (int64_t) b);
51}
52
53static inline Eina_F8p24
54eina_f8p24_sqrt(Eina_F8p24 a)
55{
56 unsigned int root, remHi, remLo, testDiv, count;
57
58 root = 0; /* Clear root */
59 remHi = 0; /* Clear high part of partial remainder */
60 remLo = a; /* Get argument into low part of partial remainder */
61 count = (23 + (24 >> 1)); /* Load loop counter */
62 do {
63 remHi = (remHi << 2) | (remLo >> 30);
64 remLo <<= 2; /* get 2 bits of arg */
65 root <<= 1; /* Get ready for the next bit in the root */
66 testDiv = (root << 1) + 1; /* Test radical */
67 if (remHi >= testDiv)
68 {
69 remHi -= testDiv;
70 root++;
71 }
72 } while (count-- != 0);
73 return (root);
74}
75
76static inline unsigned int
77eina_f8p24_fracc_get(Eina_F8p24 v)
78{
79 return (v & 0xffffff);
80}
81
82#endif
diff --git a/libraries/eina/src/include/eina_inline_fp.x b/libraries/eina/src/include/eina_inline_fp.x
new file mode 100644
index 0000000..de44123
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_fp.x
@@ -0,0 +1,153 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 * Copyright (C) 2009 Cedric BAIL
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_INLINE_FP_X_
21# define EINA_INLINE_FP_X_
22
23static inline Eina_F32p32
24eina_f32p32_int_from(int32_t v)
25{
26 return (Eina_F32p32)(v) << 32;
27}
28
29static inline int32_t
30eina_f32p32_int_to(Eina_F32p32 v)
31{
32 return (int32_t)(v >> 32);
33}
34
35static inline Eina_F32p32
36eina_f32p32_double_from(double v)
37{
38 Eina_F32p32 r;
39 r = (Eina_F32p32)(v * 4294967296.0 + (v < 0 ? -0.5 : 0.5));
40 return r;
41}
42
43static inline double
44eina_f32p32_double_to(Eina_F32p32 v)
45{
46 double r;
47 r = v / 4294967296.0;
48 return r;
49}
50
51
52
53static inline Eina_F16p16
54eina_f16p16_int_from(int32_t v)
55{
56 return v << 16;
57}
58
59static inline int32_t
60eina_f16p16_int_to(Eina_F16p16 v)
61{
62 return v >> 16;
63}
64
65static inline Eina_F16p16
66eina_f16p16_float_from(float v)
67{
68 Eina_F16p16 r;
69
70 r = (Eina_F16p16)(v * 65536.0f + (v < 0 ? -0.5f : 0.5f));
71 return r;
72}
73
74static inline float
75eina_f16p16_float_to(Eina_F16p16 v)
76{
77 float r;
78
79 r = v / 65536.0f;
80 return r;
81}
82
83
84
85static inline Eina_F8p24
86eina_f8p24_int_from(int32_t v)
87{
88 return v << 24;
89}
90
91static inline int32_t
92eina_f8p24_int_to(Eina_F8p24 v)
93{
94 return v >> 24;
95}
96
97static inline Eina_F8p24
98eina_f8p24_float_from(float v)
99{
100 Eina_F8p24 r;
101
102 r = (Eina_F8p24)(v * 16777216.0f + (v < 0 ? -0.5f : 0.5f));
103 return r;
104}
105
106static inline float
107eina_f8p24_float_to(Eina_F8p24 v)
108{
109 float r;
110
111 r = v / 16777216.0f;
112 return r;
113}
114
115
116
117static inline Eina_F32p32
118eina_f16p16_to_f32p32(Eina_F16p16 a)
119{
120 return ((Eina_F32p32) a) << 16;
121}
122
123static inline Eina_F32p32
124eina_f8p24_to_f32p32(Eina_F8p24 a)
125{
126 return ((Eina_F32p32) a) << 8;
127}
128
129static inline Eina_F16p16
130eina_f32p32_to_f16p16(Eina_F32p32 a)
131{
132 return (Eina_F16p16) (a >> 16);
133}
134
135static inline Eina_F16p16
136eina_f8p24_to_f16p16(Eina_F8p24 a)
137{
138 return (Eina_F16p16) (a >> 8);
139}
140
141static inline Eina_F8p24
142eina_f32p32_to_f8p24(Eina_F32p32 a)
143{
144 return (Eina_F8p24) (a >> 8);
145}
146
147static inline Eina_F8p24
148eina_f16p16_to_f8p24(Eina_F16p16 a)
149{
150 return (Eina_F8p24) (a << 8);
151}
152
153#endif
diff --git a/libraries/eina/src/include/eina_inline_hash.x b/libraries/eina/src/include/eina_inline_hash.x
new file mode 100644
index 0000000..f27060f
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_hash.x
@@ -0,0 +1,151 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_HASH_X_
20#define EINA_INLINE_HASH_X_
21
22/*
23 djb2 hash algorithm was first reported by dan bernstein, and was the old
24 default hash function for evas.
25 */
26static inline int
27eina_hash_djb2(const char *key, int len)
28{
29 unsigned int hash_num = 5381;
30 const unsigned char *ptr;
31
32 if (!key) return 0;
33 for (ptr = (unsigned char *)key; len; ptr++, len--)
34 hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */
35
36 return (int)hash_num;
37}
38
39static inline int
40eina_hash_djb2_len(const char *key, int *plen)
41{
42 unsigned int hash_num = 5381;
43 int len = 0;
44 const unsigned char *ptr;
45
46 if (!key) return 0;
47
48 for (ptr = (unsigned char *)key; *ptr; ptr++, len++)
49 hash_num = ((hash_num << 5) + hash_num) ^ *ptr; /* hash * 33 ^ c */
50
51 *plen = len + 1;
52
53 return (int)hash_num;
54}
55
56static inline int
57eina_hash_int32(const unsigned int *pkey, int len)
58{
59 unsigned int key = *pkey;
60
61 (void) len;
62
63 key = ~key + (key << 15);
64 key ^= key >> 12;
65 key += key << 2;
66 key ^= key >> 4;
67 key *= 2057;
68 key ^= key >> 16;
69 return key;
70}
71
72static inline int
73eina_hash_int64(const unsigned long int *pkey, int len)
74{
75 unsigned long int key = *pkey;
76
77 (void) len;
78
79 key = ~key + (key << 18);
80 key ^= key >> 31;
81 key *= 21;
82 key ^= key >> 11;
83 key += key << 6;
84 key ^= key >> 22;
85 return (int) key;
86}
87
88static inline unsigned int _rotl32(unsigned int x, char r)
89{
90 return (x << r) | (x >> (32 - r));
91}
92
93static inline unsigned int _fmix32(unsigned int h)
94{
95 h ^= h >> 16;
96 h *= 0x85ebca6b;
97 h ^= h >> 13;
98 h *= 0xc2b2ae35;
99 h ^= h >> 16;
100
101 return h;
102}
103
104int
105eina_hash_murmur3(const char *key, int len)
106{
107 const unsigned char * data = (const unsigned char*)key;
108 const int nblocks = len / 4;
109 unsigned int h1 = 0, k1;
110 unsigned int c1 = 0xcc9e2d51;
111 unsigned int c2 = 0x1b873593;
112 const unsigned int * blocks = (const unsigned int *)(data + nblocks*4);
113 int i;
114 const unsigned char *tail;
115
116 for(i = -nblocks; i; i++)
117 {
118 k1 = blocks[i];
119
120 k1 *= c1;
121 k1 = _rotl32(k1, 15);
122 k1 *= c2;
123
124 h1 ^= k1;
125 h1 = _rotl32(h1, 13);
126 h1 = h1*5+0xe6546b64;
127 }
128
129 tail = (const unsigned char*)(data + nblocks*4);
130
131 k1 = 0;
132
133 switch(len & 3)
134 {
135 case 3:
136 k1 ^= tail[2] << 16;
137 case 2:
138 k1 ^= tail[1] << 8;
139 case 1:
140 k1 ^= tail[0];
141 k1 *= c1;
142 k1 = _rotl32(k1, 16);
143 k1 *= c2;
144 h1 ^= k1;
145 }
146
147 h1 ^= len;
148
149 return _fmix32(h1);
150}
151#endif
diff --git a/libraries/eina/src/include/eina_inline_list.x b/libraries/eina/src/include/eina_inline_list.x
new file mode 100644
index 0000000..3397a1b
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_list.x
@@ -0,0 +1,67 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_LIST_INLINE_H_
20#define EINA_LIST_INLINE_H_
21
22static inline Eina_List *
23eina_list_last(const Eina_List *list)
24{
25 if (!list) return NULL;
26 return list->accounting->last;
27}
28
29static inline Eina_List *
30eina_list_next(const Eina_List *list)
31{
32 if (!list) return NULL;
33 return list->next;
34}
35
36static inline Eina_List *
37eina_list_prev(const Eina_List *list)
38{
39 if (!list) return NULL;
40 return list->prev;
41}
42
43static inline void *
44eina_list_data_get(const Eina_List *list)
45{
46 if (!list) return NULL;
47 return list->data;
48}
49
50static inline void *
51eina_list_data_set(Eina_List *list, const void *data)
52{
53 void *tmp;
54 if (!list) return NULL;
55 tmp = list->data;
56 list->data = (void*) data;
57 return tmp;
58}
59
60static inline unsigned int
61eina_list_count(const Eina_List *list)
62{
63 if (!list) return 0;
64 return list->accounting->count;
65}
66
67#endif /* EINA_LIST_INLINE_H_ */
diff --git a/libraries/eina/src/include/eina_inline_lock_posix.x b/libraries/eina/src/include/eina_inline_lock_posix.x
new file mode 100644
index 0000000..77f5b8b
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_lock_posix.x
@@ -0,0 +1,509 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_LOCK_POSIX_X_
20#define EINA_INLINE_LOCK_POSIX_X_
21
22#include <errno.h>
23#ifndef __USE_UNIX98
24# define __USE_UNIX98
25# include <pthread.h>
26# undef __USE_UNIX98
27#else
28# include <pthread.h>
29#endif
30
31#include <sys/time.h>
32
33#ifdef EINA_HAVE_DEBUG_THREADS
34#include <stdlib.h>
35#include <string.h>
36#include <assert.h>
37#include <execinfo.h>
38#define EINA_LOCK_DEBUG_BT_NUM 64
39typedef void (*Eina_Lock_Bt_Func) ();
40
41#include "eina_inlist.h"
42#endif
43
44typedef struct _Eina_Lock Eina_Lock;
45typedef struct _Eina_RWLock Eina_RWLock;
46typedef struct _Eina_Condition Eina_Condition;
47typedef pthread_key_t Eina_TLS;
48
49struct _Eina_Lock
50{
51#ifdef EINA_HAVE_DEBUG_THREADS
52 EINA_INLIST;
53#endif
54 pthread_mutex_t mutex;
55#ifdef EINA_HAVE_DEBUG_THREADS
56 pthread_t lock_thread_id;
57 Eina_Lock_Bt_Func lock_bt[EINA_LOCK_DEBUG_BT_NUM];
58 int lock_bt_num;
59 Eina_Bool locked : 1;
60#endif
61};
62
63struct _Eina_Condition
64{
65 Eina_Lock *lock;
66 pthread_cond_t condition;
67};
68
69struct _Eina_RWLock
70{
71 pthread_rwlock_t mutex;
72#ifdef EINA_HAVE_DEBUG_THREADS
73 pthread_t lock_thread_wid;
74#endif
75};
76
77EAPI extern Eina_Bool _eina_threads_activated;
78
79#ifdef EINA_HAVE_DEBUG_THREADS
80# include <sys/time.h>
81
82EAPI extern int _eina_threads_debug;
83EAPI extern pthread_t _eina_main_loop;
84EAPI extern pthread_mutex_t _eina_tracking_lock;
85EAPI extern Eina_Inlist *_eina_tracking;
86#endif
87
88static inline void
89eina_lock_debug(const Eina_Lock *mutex)
90{
91#ifdef EINA_HAVE_DEBUG_THREADS
92 printf("lock %p, locked: %i, by %i\n",
93 mutex, (int)mutex->locked, (int)mutex->lock_thread_id);
94 backtrace_symbols_fd((void **)mutex->lock_bt, mutex->lock_bt_num, 1);
95#else
96 (void) mutex;
97#endif
98}
99
100static inline Eina_Bool
101eina_lock_new(Eina_Lock *mutex)
102{
103 pthread_mutexattr_t attr;
104
105#ifdef EINA_HAVE_DEBUG_THREADS
106 if (!_eina_threads_activated)
107 assert(pthread_equal(_eina_main_loop, pthread_self()));
108#endif
109
110 if (pthread_mutexattr_init(&attr) != 0)
111 return EINA_FALSE;
112 /* NOTE: PTHREAD_MUTEX_RECURSIVE is not allowed at all, you will break on/off
113 feature for sure with that change. */
114#ifdef EINA_HAVE_DEBUG_THREADS
115 if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK) != 0)
116 return EINA_FALSE;
117 memset(mutex, 0, sizeof(Eina_Lock));
118#endif
119 if (pthread_mutex_init(&(mutex->mutex), &attr) != 0)
120 return EINA_FALSE;
121
122 pthread_mutexattr_destroy(&attr);
123
124 return EINA_TRUE;
125}
126
127static inline void
128eina_lock_free(Eina_Lock *mutex)
129{
130#ifdef EINA_HAVE_DEBUG_THREADS
131 if (!_eina_threads_activated)
132 assert(pthread_equal(_eina_main_loop, pthread_self()));
133#endif
134
135 pthread_mutex_destroy(&(mutex->mutex));
136#ifdef EINA_HAVE_DEBUG_THREADS
137 memset(mutex, 0, sizeof(Eina_Lock));
138#endif
139}
140
141static inline Eina_Lock_Result
142eina_lock_take(Eina_Lock *mutex)
143{
144 Eina_Lock_Result ret = EINA_LOCK_FAIL;
145 int ok;
146
147#ifdef EINA_HAVE_ON_OFF_THREADS
148 if (!_eina_threads_activated)
149 {
150#ifdef EINA_HAVE_DEBUG_THREADS
151 assert(pthread_equal(_eina_main_loop, pthread_self()));
152#endif
153 return EINA_LOCK_SUCCEED;
154 }
155#endif
156
157#ifdef EINA_HAVE_DEBUG_THREADS
158 if (_eina_threads_debug)
159 {
160 struct timeval t0, t1;
161 int dt;
162
163 gettimeofday(&t0, NULL);
164 ok = pthread_mutex_lock(&(mutex->mutex));
165 gettimeofday(&t1, NULL);
166
167 dt = (t1.tv_sec - t0.tv_sec) * 1000000;
168 if (t1.tv_usec > t0.tv_usec)
169 dt += (t1.tv_usec - t0.tv_usec);
170 else
171 dt -= t0.tv_usec - t1.tv_usec;
172 dt /= 1000;
173
174 if (dt > _eina_threads_debug) abort();
175 }
176 else
177 {
178#endif
179 ok = pthread_mutex_lock(&(mutex->mutex));
180#ifdef EINA_HAVE_DEBUG_THREADS
181 }
182#endif
183
184 if (ok == 0) ret = EINA_LOCK_SUCCEED;
185 else if (ok == EDEADLK)
186 {
187 printf("ERROR ERROR: DEADLOCK on lock %p\n", mutex);
188 eina_lock_debug(mutex);
189 ret = EINA_LOCK_DEADLOCK; // magic
190#ifdef EINA_HAVE_DEBUG_THREADS
191 if (_eina_threads_debug) abort();
192#endif
193 }
194
195#ifdef EINA_HAVE_DEBUG_THREADS
196 mutex->locked = 1;
197 mutex->lock_thread_id = pthread_self();
198 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
199
200 pthread_mutex_lock(&_eina_tracking_lock);
201 _eina_tracking = eina_inlist_append(_eina_tracking,
202 EINA_INLIST_GET(mutex));
203 pthread_mutex_unlock(&_eina_tracking_lock);
204#endif
205
206 return ret;
207}
208
209static inline Eina_Lock_Result
210eina_lock_take_try(Eina_Lock *mutex)
211{
212 Eina_Lock_Result ret = EINA_LOCK_FAIL;
213 int ok;
214
215#ifdef EINA_HAVE_ON_OFF_THREADS
216 if (!_eina_threads_activated)
217 {
218#ifdef EINA_HAVE_DEBUG_THREADS
219 assert(pthread_equal(_eina_main_loop, pthread_self()));
220#endif
221 return EINA_LOCK_SUCCEED;
222 }
223#endif
224
225#ifdef EINA_HAVE_DEBUG_THREADS
226 if (!_eina_threads_activated)
227 assert(pthread_equal(_eina_main_loop, pthread_self()));
228#endif
229
230 ok = pthread_mutex_trylock(&(mutex->mutex));
231 if (ok == 0) ret = EINA_LOCK_SUCCEED;
232 else if (ok == EDEADLK)
233 {
234 printf("ERROR ERROR: DEADLOCK on trylock %p\n", mutex);
235 ret = EINA_LOCK_DEADLOCK; // magic
236 }
237#ifdef EINA_HAVE_DEBUG_THREADS
238 if (ret == EINA_LOCK_SUCCEED)
239 {
240 mutex->locked = 1;
241 mutex->lock_thread_id = pthread_self();
242 mutex->lock_bt_num = backtrace((void **)(mutex->lock_bt), EINA_LOCK_DEBUG_BT_NUM);
243
244 pthread_mutex_lock(&_eina_tracking_lock);
245 _eina_tracking = eina_inlist_append(_eina_tracking,
246 EINA_INLIST_GET(mutex));
247 pthread_mutex_unlock(&_eina_tracking_lock);
248 }
249#endif
250 return ret;
251}
252
253static inline Eina_Lock_Result
254eina_lock_release(Eina_Lock *mutex)
255{
256 Eina_Lock_Result ret;
257
258#ifdef EINA_HAVE_ON_OFF_THREADS
259 if (!_eina_threads_activated)
260 {
261#ifdef EINA_HAVE_DEBUG_THREADS
262 assert(pthread_equal(_eina_main_loop, pthread_self()));
263#endif
264 return EINA_LOCK_SUCCEED;
265 }
266#endif
267
268#ifdef EINA_HAVE_DEBUG_THREADS
269 pthread_mutex_lock(&_eina_tracking_lock);
270 _eina_tracking = eina_inlist_remove(_eina_tracking,
271 EINA_INLIST_GET(mutex));
272 pthread_mutex_unlock(&_eina_tracking_lock);
273
274 mutex->locked = 0;
275 mutex->lock_thread_id = 0;
276 memset(mutex->lock_bt, 0, EINA_LOCK_DEBUG_BT_NUM * sizeof(Eina_Lock_Bt_Func));
277 mutex->lock_bt_num = 0;
278#endif
279 ret = (pthread_mutex_unlock(&(mutex->mutex)) == 0) ?
280 EINA_LOCK_SUCCEED : EINA_LOCK_FAIL;
281 return ret;
282}
283
284static inline Eina_Bool
285eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
286{
287#ifdef EINA_HAVE_DEBUG_THREADS
288 assert(mutex != NULL);
289 if (!_eina_threads_activated)
290 assert(pthread_equal(_eina_main_loop, pthread_self()));
291 memset(cond, 0, sizeof (Eina_Condition));
292#endif
293
294 cond->lock = mutex;
295 if (pthread_cond_init(&cond->condition, NULL) != 0)
296 {
297#ifdef EINA_HAVE_DEBUG_THREADS
298 if (errno == EBUSY)
299 printf("eina_condition_new on already initialized Eina_Condition\n");
300#endif
301 return EINA_FALSE;
302 }
303
304 return EINA_TRUE;
305}
306
307static inline void
308eina_condition_free(Eina_Condition *cond)
309{
310#ifdef EINA_HAVE_DEBUG_THREADS
311 if (!_eina_threads_activated)
312 assert(pthread_equal(_eina_main_loop, pthread_self()));
313#endif
314
315 pthread_cond_destroy(&(cond->condition));
316#ifdef EINA_HAVE_DEBUG_THREADS
317 memset(cond, 0, sizeof (Eina_Condition));
318#endif
319}
320
321static inline Eina_Bool
322eina_condition_wait(Eina_Condition *cond)
323{
324 Eina_Bool r;
325
326#ifdef EINA_HAVE_DEBUG_THREADS
327 assert(_eina_threads_activated);
328 assert(cond->lock != NULL);
329
330 pthread_mutex_lock(&_eina_tracking_lock);
331 _eina_tracking = eina_inlist_remove(_eina_tracking,
332 EINA_INLIST_GET(cond->lock));
333 pthread_mutex_unlock(&_eina_tracking_lock);
334#endif
335
336 r = pthread_cond_wait(&(cond->condition),
337 &(cond->lock->mutex)) == 0 ? EINA_TRUE : EINA_FALSE;
338
339#ifdef EINA_HAVE_DEBUG_THREADS
340 pthread_mutex_lock(&_eina_tracking_lock);
341 _eina_tracking = eina_inlist_append(_eina_tracking,
342 EINA_INLIST_GET(cond->lock));
343 pthread_mutex_unlock(&_eina_tracking_lock);
344#endif
345
346 return r;
347}
348
349static inline Eina_Bool
350eina_condition_timedwait(Eina_Condition *cond, double t)
351{
352 struct timespec tv;
353 Eina_Bool r;
354
355#ifdef EINA_HAVE_DEBUG_THREADS
356 assert(_eina_threads_activated);
357 assert(cond->lock != NULL);
358
359 pthread_mutex_lock(&_eina_tracking_lock);
360 _eina_tracking = eina_inlist_remove(_eina_tracking,
361 EINA_INLIST_GET(cond->lock));
362 pthread_mutex_unlock(&_eina_tracking_lock);
363#endif
364
365 tv.tv_sec = t;
366 tv.tv_nsec = (t - (double) tv.tv_sec) * 1000000000;
367
368 r = pthread_cond_timedwait(&(cond->condition),
369 &(cond->lock->mutex),
370 &tv) == 0 ?
371 EINA_TRUE : EINA_FALSE;
372
373#ifdef EINA_HAVE_DEBUG_THREADS
374 pthread_mutex_lock(&_eina_tracking_lock);
375 _eina_tracking = eina_inlist_append(_eina_tracking,
376 EINA_INLIST_GET(cond->lock));
377 pthread_mutex_unlock(&_eina_tracking_lock);
378#endif
379
380 return r;
381}
382
383static inline Eina_Bool
384eina_condition_broadcast(Eina_Condition *cond)
385{
386#ifdef EINA_HAVE_DEBUG_THREADS
387 assert(cond->lock != NULL);
388#endif
389
390 return pthread_cond_broadcast(&(cond->condition)) == 0 ? EINA_TRUE : EINA_FALSE;
391}
392
393static inline Eina_Bool
394eina_condition_signal(Eina_Condition *cond)
395{
396#ifdef EINA_HAVE_DEBUG_THREADS
397 assert(cond->lock != NULL);
398#endif
399
400 return pthread_cond_signal(&(cond->condition)) == 0 ? EINA_TRUE : EINA_FALSE;
401}
402
403static inline Eina_Bool
404eina_rwlock_new(Eina_RWLock *mutex)
405{
406#ifdef EINA_HAVE_DEBUG_THREADS
407 if (!_eina_threads_activated)
408 assert(pthread_equal(_eina_main_loop, pthread_self()));
409#endif
410
411 if (pthread_rwlock_init(&(mutex->mutex), NULL) != 0)
412 return EINA_FALSE;
413 return EINA_TRUE;
414}
415
416static inline void
417eina_rwlock_free(Eina_RWLock *mutex)
418{
419#ifdef EINA_HAVE_DEBUG_THREADS
420 if (!_eina_threads_activated)
421 assert(pthread_equal(_eina_main_loop, pthread_self()));
422#endif
423
424 pthread_rwlock_destroy(&(mutex->mutex));
425}
426
427static inline Eina_Lock_Result
428eina_rwlock_take_read(Eina_RWLock *mutex)
429{
430#ifdef EINA_HAVE_ON_OFF_THREADS
431 if (!_eina_threads_activated)
432 {
433#ifdef EINA_HAVE_DEBUG_THREADS
434 assert(pthread_equal(_eina_main_loop, pthread_self()));
435#endif
436 return EINA_LOCK_SUCCEED;
437 }
438#endif
439
440 if (pthread_rwlock_rdlock(&(mutex->mutex)) != 0)
441 return EINA_LOCK_FAIL;
442 return EINA_LOCK_SUCCEED;
443}
444
445static inline Eina_Lock_Result
446eina_rwlock_take_write(Eina_RWLock *mutex)
447{
448#ifdef EINA_HAVE_ON_OFF_THREADS
449 if (!_eina_threads_activated)
450 {
451#ifdef EINA_HAVE_DEBUG_THREADS
452 assert(pthread_equal(_eina_main_loop, pthread_self()));
453#endif
454 return EINA_LOCK_SUCCEED;
455 }
456#endif
457
458 if (pthread_rwlock_wrlock(&(mutex->mutex)) != 0)
459 return EINA_LOCK_FAIL;
460 return EINA_LOCK_SUCCEED;
461}
462
463static inline Eina_Lock_Result
464eina_rwlock_release(Eina_RWLock *mutex)
465{
466#ifdef EINA_HAVE_ON_OFF_THREADS
467 if (!_eina_threads_activated)
468 {
469#ifdef EINA_HAVE_DEBUG_THREADS
470 assert(pthread_equal(_eina_main_loop, pthread_self()));
471#endif
472 return EINA_LOCK_SUCCEED;
473 }
474#endif
475
476 if (pthread_rwlock_unlock(&(mutex->mutex)) != 0)
477 return EINA_LOCK_FAIL;
478 return EINA_LOCK_SUCCEED;
479}
480
481static inline Eina_Bool
482eina_tls_new(Eina_TLS *key)
483{
484 if (pthread_key_create(key, NULL) != 0)
485 return EINA_FALSE;
486 return EINA_TRUE;
487}
488
489static inline void
490eina_tls_free(Eina_TLS key)
491{
492 pthread_key_delete(key);
493}
494
495static inline void *
496eina_tls_get(Eina_TLS key)
497{
498 return pthread_getspecific(key);
499}
500
501static inline Eina_Bool
502eina_tls_set(Eina_TLS key, const void *data)
503{
504 if (pthread_setspecific(key, data) != 0)
505 return EINA_FALSE;
506 return EINA_TRUE;
507}
508
509#endif
diff --git a/libraries/eina/src/include/eina_inline_lock_void.x b/libraries/eina/src/include/eina_inline_lock_void.x
new file mode 100644
index 0000000..8cb9a49
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_lock_void.x
@@ -0,0 +1,247 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_LOCK_VOID_X_
20#define EINA_INLINE_LOCK_VOID_X_
21
22#ifdef EINA_UNUSED
23# undef EINA_UNUSED
24#endif
25#ifdef __GNUC__
26# define EINA_UNUSED __attribute__((unused))
27#else
28# define EINA_UNUSED
29#endif
30
31/**
32 * @addtogroup Eina_Lock_Group Lock
33 *
34 * @brief These functions provide Mutual Exclusion objects management.
35 *
36 * @note On Windows XP, critical sections are used, while on Windows
37 * CE, standard Mutex objects are used.
38 *
39 * @{
40 */
41
42/**
43 * @typedef Eina_Lock
44 * Abtract type for a mutual exclusive object.
45 */
46typedef void *Eina_Lock;
47typedef void *Eina_RWLock;
48typedef void *Eina_Condition;
49typedef void *Eina_TLS;
50
51/**
52 * @brief Create a new #Eina_Lock.
53 *
54 * @param mutex A pointer to the lock object.
55 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
56 *
57 * This function creates a new #Eina_Lock object and stores it in the
58 * @p mutex buffer. On success, this function returns #EINA_TRUE and
59 * #EINA_FALSE otherwise. To free the resources allocated by this
60 * function, use eina_lock_free(). For performance reasons, no check
61 * is done on @p mutex.
62 */
63static inline Eina_Bool
64eina_lock_new(Eina_Lock *mutex EINA_UNUSED)
65{
66 return EINA_FALSE;
67}
68
69/**
70 * @brief Free the ressources of the given lock object.
71 *
72 * @param mutex The lock object to free.
73 *
74 * This function frees the resources of @p mutex allocated by
75 * eina_lock_new(). For performance reasons, no check is done on
76 * @p mutex.
77 */
78static inline void
79eina_lock_free(Eina_Lock *mutex EINA_UNUSED)
80{
81}
82
83/**
84 * @brief Lock the given mutual exclusion object.
85 *
86 * @param mutex The lock object to lock.
87 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
88 *
89 * This function locks @p mutex. @p mutex must have been created by
90 * eina_lock_new(). On success, this function returns #EINA_TRUE and
91 * #EINA_FALSE otherwise. For performance reasons, no check is done on
92 * @p mutex.
93 */
94static inline Eina_Lock_Result
95eina_lock_take(Eina_Lock *mutex EINA_UNUSED)
96{
97 return EINA_LOCK_FAIL;
98}
99
100/**
101 * @brief Try to lock the given mutual exclusion object.
102 *
103 * @param mutex The lock object to try to lock.
104 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
105 *
106 * This function tries to lock @p mutex. @p mutex must have been created by
107 * eina_lock_new(). If @p mutex can be locked, this function returns
108 * #EINA_TRUE; if @p mutex can not be locked, or is already locked, it
109 * returns #EINA_FALSE. This function does not block and returns
110 * immediately. For performance reasons, no check is done on
111 * @p mutex.
112 *
113 * @note On Windows CE, this function is actually eina_lock_take().
114 */
115static inline Eina_Lock_Result
116eina_lock_take_try(Eina_Lock *mutex EINA_UNUSED)
117{
118 return EINA_LOCK_FAIL;
119}
120
121/**
122 * @brief Unlock the given mutual exclusion object.
123 *
124 * @param mutex The lock object to unlock.
125 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
126 *
127 * This function unlocks @p mutex. @p mutex must have been created by
128 * eina_lock_new(). On success, this function returns #EINA_TRUE and
129 * #EINA_FALSE otherwise. For performance reasons, no check is done on
130 * @p mutex.
131 */
132static inline Eina_Lock_Result
133eina_lock_release(Eina_Lock *mutex EINA_UNUSED)
134{
135 return EINA_LOCK_FAIL;
136}
137
138static inline void
139eina_lock_debug(const Eina_Lock *mutex EINA_UNUSED)
140{
141}
142
143static inline Eina_Bool
144eina_condition_new(Eina_Condition *cond EINA_UNUSED, Eina_Lock *mutex EINA_UNUSED)
145{
146 return EINA_FALSE;
147}
148
149static inline void
150eina_condition_free(Eina_Condition *cond EINA_UNUSED)
151{
152}
153
154static inline Eina_Bool
155eina_condition_wait(Eina_Condition *cond EINA_UNUSED)
156{
157 return EINA_FALSE;
158}
159
160static inline Eina_Bool
161eina_condition_timedwait(Eina_Condition *cond EINA_UNUSED, double val EINA_UNUSED)
162{
163 return EINA_FALSE;
164}
165
166static inline Eina_Bool
167eina_condition_broadcast(Eina_Condition *cond EINA_UNUSED)
168{
169 return EINA_FALSE;
170}
171
172static inline Eina_Bool
173eina_condition_signal(Eina_Condition *cond EINA_UNUSED)
174{
175 return EINA_FALSE;
176}
177
178static inline Eina_Bool
179eina_rwlock_new(Eina_RWLock *mutex EINA_UNUSED)
180{
181 return EINA_FALSE;
182}
183
184static inline void
185 eina_rwlock_free(Eina_RWLock *mutex EINA_UNUSED)
186{
187}
188
189static inline Eina_Lock_Result
190eina_rwlock_read_take(Eina_RWLock *mutex EINA_UNUSED)
191{
192 return EINA_LOCK_FAIL;
193}
194
195static inline Eina_Lock_Result
196eina_rwlock_write_take(Eina_RWLock *mutex EINA_UNUSED)
197{
198 return EINA_LOCK_FAIL;
199}
200
201static inline Eina_Lock_Result
202eina_rwlock_release(Eina_RWLock *mutex EINA_UNUSED)
203{
204 return EINA_LOCK_FAIL;
205}
206
207static inline Eina_Lock_Result
208eina_rwlock_take_read(Eina_RWLock *mutex EINA_UNUSED)
209{
210 return EINA_LOCK_FAIL;
211}
212
213static inline Eina_Lock_Result
214eina_rwlock_take_write(Eina_RWLock *mutex EINA_UNUSED)
215{
216 return EINA_LOCK_FAIL;
217}
218
219static inline Eina_Bool
220eina_tls_new(Eina_TLS *key EINA_UNUSED)
221{
222 return EINA_FALSE;
223}
224
225static inline void
226eina_tls_free(Eina_TLS key EINA_UNUSED)
227{
228}
229
230static inline void *
231eina_tls_get(Eina_TLS key EINA_UNUSED)
232{
233 return NULL;
234}
235
236static inline Eina_Bool
237eina_tls_set(Eina_TLS key EINA_UNUSED, const void *data EINA_UNUSED)
238{
239 return EINA_FALSE;
240}
241
242
243/**
244 * @}
245 */
246
247#endif
diff --git a/libraries/eina/src/include/eina_inline_lock_win32.x b/libraries/eina/src/include/eina_inline_lock_win32.x
new file mode 100644
index 0000000..072095c
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_lock_win32.x
@@ -0,0 +1,466 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_LOCK_WIN32_X_
20#define EINA_INLINE_LOCK_WIN32_X_
21
22#include <windows.h>
23
24typedef CRITICAL_SECTION Eina_Lock;
25typedef struct _Eina_Condition Eina_Condition;
26
27#if _WIN32_WINNT >= 0x0600
28struct _Eina_Condition
29{
30 CRITICAL_SECTION *mutex;
31 CONDITION_VARIABLE condition;
32};
33#else
34struct _Eina_Condition
35{
36 int waiters_count;
37 CRITICAL_SECTION waiters_count_lock;
38 CRITICAL_SECTION *mutex;
39 HANDLE semaphore;
40 HANDLE waiters_done;
41 Eina_Bool was_broadcast;
42};
43#endif
44
45typedef struct _Eina_Win32_RWLock Eina_RWLock;
46
47struct _Eina_Win32_RWLock
48{
49 LONG readers_count;
50 LONG writers_count;
51 int readers;
52 int writers;
53
54 Eina_Lock mutex;
55 Eina_Condition cond_read;
56 Eina_Condition cond_write;
57};
58
59typedef DWORD Eina_TLS;
60
61EAPI extern Eina_Bool _eina_threads_activated;
62
63static inline Eina_Bool
64eina_lock_new(Eina_Lock *mutex)
65{
66 InitializeCriticalSection(mutex);
67
68 return EINA_TRUE;
69}
70
71static inline void
72eina_lock_free(Eina_Lock *mutex)
73{
74 DeleteCriticalSection(mutex);
75}
76
77static inline Eina_Lock_Result
78eina_lock_take(Eina_Lock *mutex)
79{
80#ifdef EINA_HAVE_ON_OFF_THREADS
81 if (!_eina_threads_activated) return EINA_LOCK_SUCCEED;
82#endif
83
84 EnterCriticalSection(mutex);
85
86 return EINA_LOCK_SUCCEED;
87}
88
89static inline Eina_Lock_Result
90eina_lock_take_try(Eina_Lock *mutex)
91{
92#ifdef EINA_HAVE_ON_OFF_THREADS
93 if (!_eina_threads_activated) return EINA_LOCK_SUCCEED;
94#endif
95
96 return TryEnterCriticalSection(mutex) == 0 ? EINA_LOCK_FAIL : EINA_LOCK_SUCCEED;
97}
98
99static inline Eina_Lock_Result
100eina_lock_release(Eina_Lock *mutex)
101{
102#ifdef EINA_HAVE_ON_OFF_THREADS
103 if (!_eina_threads_activated) return EINA_LOCK_SUCCEED;
104#endif
105
106 LeaveCriticalSection(mutex);
107
108 return EINA_LOCK_SUCCEED;
109}
110
111static inline void
112eina_lock_debug(const Eina_Lock *mutex)
113{
114 (void)mutex;
115}
116
117static inline Eina_Bool
118eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
119{
120 cond->mutex = mutex;
121#if _WIN32_WINNT >= 0x0600
122 InitializeConditionVariable(&cond->condition);
123#else
124 cond->waiters_count = 0;
125 cond->was_broadcast = EINA_FALSE;
126 cond->semaphore = CreateSemaphore(NULL, // no security
127 0, // initially 0
128 0x7fffffff, // max count
129 NULL); // unnamed
130 if (!cond->semaphore)
131 return EINA_FALSE;
132
133 InitializeCriticalSection(&cond->waiters_count_lock);
134
135 cond->waiters_done = CreateEvent(NULL, // no security
136 FALSE, // auto-reset
137 FALSE, // non-signaled initially
138 NULL); // unnamed
139 if (!cond->waiters_done)
140 {
141 CloseHandle(cond->semaphore);
142 return EINA_FALSE;
143 }
144
145 return EINA_TRUE;
146#endif
147}
148
149static inline void
150eina_condition_free(Eina_Condition *cond)
151{
152#if _WIN32_WINNT >= 0x0600
153 /* Nothing to do */
154#else
155 CloseHandle(cond->waiters_done);
156 DeleteCriticalSection(&cond->waiters_count_lock);
157 CloseHandle(cond->semaphore);
158#endif
159}
160
161static inline Eina_Bool
162_eina_condition_internal_timedwait(Eina_Condition *cond, DWORD t)
163{
164#if _WIN32_WINNT >= 0x0600
165 SleepConditionVariableCS(&cond->condition, cond->mutex, t);
166#else
167 DWORD ret;
168 Eina_Bool last_waiter;
169
170 /* Avoid race conditions. */
171 EnterCriticalSection(&cond->waiters_count_lock);
172 cond->waiters_count++;
173 LeaveCriticalSection(&cond->waiters_count_lock);
174
175 /*
176 * This call atomically releases the mutex and waits on the
177 * semaphore until <pthread_cond_signal> or <pthread_cond_broadcast>
178 * are called by another thread.
179 */
180 ret = SignalObjectAndWait(cond->mutex, cond->semaphore, t, FALSE);
181 if (ret == WAIT_FAILED)
182 return EINA_FALSE;
183
184 /* Reacquire lock to avoid race conditions. */
185 EnterCriticalSection(&cond->waiters_count_lock);
186
187 /* We're no longer waiting... */
188 cond->waiters_count--;
189
190 /* Check to see if we're the last waiter after <pthread_cond_broadcast>. */
191 last_waiter = (cond->was_broadcast) && (cond->waiters_count == 0);
192
193 LeaveCriticalSection(&cond->waiters_count_lock);
194
195 /*
196 * If we're the last waiter thread during this particular broadcast
197 * then let all the other threads proceed.
198 */
199 if (last_waiter)
200 {
201 /*
202 * This call atomically signals the <waiters_done_> event and waits until
203 * it can acquire the <external_mutex>. This is required to ensure fairness.
204 */
205 ret = SignalObjectAndWait(cond->waiters_done, cond->mutex, t, FALSE);
206 if (ret == WAIT_FAILED)
207 return EINA_FALSE;
208 }
209 else
210 {
211 /*
212 * Always regain the external mutex since that's the guarantee we
213 * give to our callers.
214 */
215 ret = WaitForSingleObject(cond->mutex, t);
216 if (ret == WAIT_FAILED)
217 return EINA_FALSE;
218 }
219#endif
220
221 return EINA_TRUE;
222}
223
224static inline Eina_Bool
225eina_condition_timedwait(Eina_Condition *cond, double val)
226{
227 return _eina_condition_internal_timedwait(cond, (DWORD)(val * 1000));
228}
229
230static inline Eina_Bool
231eina_condition_wait(Eina_Condition *cond)
232{
233 return _eina_condition_internal_timedwait(cond, INFINITE);
234}
235
236static inline Eina_Bool
237eina_condition_broadcast(Eina_Condition *cond)
238{
239#if _WIN32_WINNT >= 0x0600
240 WakeAllConditionVariable(&cond->condition);
241 return EINA_TRUE;
242#else
243 Eina_Bool have_waiters;
244
245 /*
246 * This is needed to ensure that <waiters_count_> and <was_broadcast_> are
247 * consistent relative to each other.
248 */
249 EnterCriticalSection(&cond->waiters_count_lock);
250 have_waiters = EINA_FALSE;
251
252 if (cond->waiters_count > 0)
253 {
254 /*
255 * We are broadcasting, even if there is just one waiter...
256 * Record that we are broadcasting, which helps optimize
257 * <pthread_cond_wait> for the non-broadcast case.
258 */
259 cond->was_broadcast = EINA_TRUE;
260 have_waiters = EINA_TRUE;
261 }
262
263 if (have_waiters)
264 {
265 DWORD ret;
266
267 /* Wake up all the waiters atomically. */
268 ret = ReleaseSemaphore(cond->semaphore, cond->waiters_count, 0);
269 LeaveCriticalSection(&cond->waiters_count_lock);
270 if (!ret) return EINA_FALSE;
271
272 /*
273 * Wait for all the awakened threads to acquire the counting
274 * semaphore.
275 */
276 ret = WaitForSingleObject(cond->waiters_done, INFINITE);
277 if (ret == WAIT_FAILED)
278 return EINA_FALSE;
279 /*
280 * This assignment is okay, even without the <waiters_count_lock_> held
281 * because no other waiter threads can wake up to access it.
282 */
283 cond->was_broadcast = EINA_FALSE;
284 }
285 else
286 LeaveCriticalSection(&cond->waiters_count_lock);
287
288 return EINA_TRUE;
289#endif
290}
291
292static inline Eina_Bool
293eina_condition_signal(Eina_Condition *cond)
294{
295#if _WIN32_WINNT >= 0x0600
296 WakeConditionVariable(&cond->condition);
297#else
298 Eina_Bool have_waiters;
299
300 EnterCriticalSection(&cond->waiters_count_lock);
301 have_waiters = (cond->waiters_count > 0);
302 LeaveCriticalSection(&cond->waiters_count_lock);
303
304 /* If there aren't any waiters, then this is a no-op. */
305 if (have_waiters)
306 {
307 if (!ReleaseSemaphore(cond->semaphore, 1, 0))
308 return EINA_FALSE;
309 }
310
311 return EINA_TRUE;
312#endif
313}
314
315static inline Eina_Bool
316eina_rwlock_new(Eina_RWLock *mutex)
317{
318 if (!eina_lock_new(&(mutex->mutex))) return EINA_FALSE;
319 if (!eina_condition_new(&(mutex->cond_read), &(mutex->mutex)))
320 goto on_error1;
321 if (!eina_condition_new(&(mutex->cond_write), &(mutex->mutex)))
322 goto on_error2;
323
324 return EINA_TRUE;
325
326 on_error2:
327 eina_condition_free(&(mutex->cond_read));
328 on_error1:
329 eina_lock_free(&(mutex->mutex));
330 return EINA_FALSE;
331}
332
333static inline void
334eina_rwlock_free(Eina_RWLock *mutex)
335{
336 eina_condition_free(&(mutex->cond_read));
337 eina_condition_free(&(mutex->cond_write));
338 eina_lock_free(&(mutex->mutex));
339}
340
341static inline Eina_Lock_Result
342eina_rwlock_take_read(Eina_RWLock *mutex)
343{
344 DWORD res;
345
346 if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL)
347 return EINA_LOCK_FAIL;
348
349 if (mutex->writers)
350 {
351 mutex->readers_count++;
352 while (mutex->writers)
353 {
354 EnterCriticalSection(&mutex->cond_write.waiters_count_lock);
355 mutex->cond_read.waiters_count++;
356 LeaveCriticalSection(&mutex->cond_write.waiters_count_lock);
357 res = WaitForSingleObject(mutex->cond_write.semaphore, INFINITE);
358 if (res != WAIT_OBJECT_0) break;
359 }
360 mutex->readers_count--;
361 }
362 if (res == 0)
363 mutex->readers++;
364 eina_lock_release(&(mutex->mutex));
365
366 return EINA_LOCK_SUCCEED;
367}
368
369static inline Eina_Lock_Result
370eina_rwlock_take_write(Eina_RWLock *mutex)
371{
372 DWORD res;
373
374 if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL)
375 return EINA_LOCK_FAIL;
376
377 if (mutex->writers || mutex->readers > 0)
378 {
379 mutex->writers_count++;
380 while (mutex->writers || mutex->readers > 0)
381 {
382 EnterCriticalSection(&mutex->cond_write.waiters_count_lock);
383 mutex->cond_read.waiters_count++;
384 LeaveCriticalSection(&mutex->cond_write.waiters_count_lock);
385 res = WaitForSingleObject(mutex->cond_write.semaphore, INFINITE);
386 if (res != WAIT_OBJECT_0) break;
387 }
388 mutex->writers_count--;
389 }
390 if (res == 0) mutex->writers_count = 1;
391 eina_lock_release(&(mutex->mutex));
392
393 return EINA_LOCK_SUCCEED;
394}
395
396static inline Eina_Lock_Result
397eina_rwlock_release(Eina_RWLock *mutex)
398{
399 if (eina_lock_take(&(mutex->mutex)) == EINA_LOCK_FAIL)
400 return EINA_LOCK_FAIL;
401
402 if (mutex->writers)
403 {
404 mutex->writers = 0;
405 if (mutex->readers_count == 1)
406 {
407 EnterCriticalSection(&mutex->cond_read.waiters_count_lock);
408 if (mutex->cond_read.waiters_count > 0)
409 ReleaseSemaphore(mutex->cond_read.semaphore, 1, 0);
410 LeaveCriticalSection(&mutex->cond_read.waiters_count_lock);
411 }
412 else if (mutex->readers_count > 0)
413 eina_condition_broadcast(&(mutex->cond_read));
414 else if (mutex->writers_count > 0)
415 {
416 EnterCriticalSection (&mutex->cond_write.waiters_count_lock);
417 if (mutex->cond_write.waiters_count > 0)
418 ReleaseSemaphore(mutex->cond_write.semaphore, 1, 0);
419 LeaveCriticalSection (&mutex->cond_write.waiters_count_lock);
420 }
421 }
422 else if (mutex->readers > 0)
423 {
424 mutex->readers--;
425 if (mutex->readers == 0 && mutex->writers_count > 0)
426 {
427 EnterCriticalSection (&mutex->cond_write.waiters_count_lock);
428 if (mutex->cond_write.waiters_count > 0)
429 ReleaseSemaphore(mutex->cond_write.semaphore, 1, 0);
430 LeaveCriticalSection (&mutex->cond_write.waiters_count_lock);
431 }
432 }
433 eina_lock_release(&(mutex->mutex));
434
435 return EINA_LOCK_SUCCEED;
436}
437
438static inline Eina_Bool
439eina_tls_new(Eina_TLS *key)
440{
441 if ((*key = TlsAlloc()) == TLS_OUT_OF_INDEXES)
442 return EINA_FALSE;
443 return EINA_TRUE;
444}
445
446static inline void
447eina_tls_free(Eina_TLS key)
448{
449 TlsFree(key);
450}
451
452static inline void *
453eina_tls_get(Eina_TLS key)
454{
455 return (void*)TlsGetValue(key);
456}
457
458static inline Eina_Bool
459eina_tls_set(Eina_TLS key, const void *data)
460{
461 if (TlsSetValue(key, (LPVOID)data) == 0)
462 return EINA_FALSE;
463 return EINA_TRUE;
464}
465
466#endif
diff --git a/libraries/eina/src/include/eina_inline_lock_wince.x b/libraries/eina/src/include/eina_inline_lock_wince.x
new file mode 100644
index 0000000..965d475
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_lock_wince.x
@@ -0,0 +1,178 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_LOCK_WIN32_X_
20#define EINA_INLINE_LOCK_WIN32_X_
21
22#include <windows.h>
23
24EAPI extern Eina_Bool _threads_activated;
25
26typedef HANDLE Eina_Lock;
27typedef Eina_Lock Eina_RWLock;
28typedef DWORD Eina_TLS;
29
30static inline Eina_Bool
31eina_lock_new(Eina_Lock *mutex)
32{
33 Eina_Lock m;
34
35 m = CreateMutex(NULL, FALSE, NULL);
36 if (m) *mutex = m;
37 return (m != NULL);
38}
39
40static inline void
41eina_lock_free(Eina_Lock *mutex)
42{
43 CloseHandle(*mutex);
44}
45
46static inline Eina_Lock_Result
47eina_lock_take(Eina_Lock *mutex)
48{
49 DWORD res;
50
51#ifdef EINA_HAVE_ON_OFF_THREADS
52 if (!_eina_threads_activated) return EINA_LOCK_FAIL;
53#endif
54
55 res = WaitForSingleObject(*mutex, INFINITE);
56 if ((res == WAIT_ABANDONED) || (res == WAIT_FAILED))
57 return EINA_LOCK_FAIL;
58
59 return EINA_LOCK_SUCCEED;
60}
61
62static inline Eina_Lock_Result
63eina_lock_take_try(Eina_Lock *mutex)
64{
65 return eina_lock_take(*mutex);
66}
67
68static inline Eina_Lock_Result
69eina_lock_release(Eina_Lock *mutex)
70{
71#ifdef EINA_HAVE_ON_OFF_THREADS
72 if (!_eina_threads_activated) return ;
73#endif
74
75 return ReleaseMutex(*mutex) ? EINA_LOCK_SUCCEED : EINA_LOCK_FAIL;
76}
77
78static inline void
79eina_lock_debug(const Eina_Lock *mutex)
80{
81}
82
83static inline Eina_Bool
84eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)
85{
86 return EINA_FALSE;
87}
88
89static inline void
90eina_condition_free(Eina_Condition *cond)
91{
92}
93
94static inline Eina_Bool
95eina_condition_wait(Eina_Condition *cond)
96{
97 return EINA_FALSE;
98}
99
100static inline Eina_Bool
101eina_condition_timedwait(Eina_Condition *cond, double t)
102{
103 return EINA_FALSE;
104}
105
106static inline Eina_Bool
107eina_condition_broadcast(Eina_Condition *cond)
108{
109 return EINA_FALSE;
110}
111
112static inline Eina_Bool
113eina_condition_signal(Eina_Condition *cond)
114{
115 return EINA_FALSE;
116}
117
118static inline Eina_Bool
119eina_rwlock_new(Eina_RWLock *mutex)
120{
121 return eina_lock_new(mutex);
122}
123
124static inline void
125eina_rwlock_free(Eina_RWLock *mutex)
126{
127 return eina_lock_free(mutex);
128}
129
130static inline Eina_Lock_Result
131eina_rwlock_take_read(Eina_RWLock *mutex)
132{
133 return eina_lock_take(mutex);
134}
135
136static inline Eina_Lock_Result
137eina_rwlock_take_write(Eina_RWLock *mutex)
138{
139 return eina_lock_take(mutex);
140}
141
142static inline Eina_Lock_Result
143eina_rwlock_release(Eina_RWLock *mutex)
144{
145 return eina_lock_release(mutex);
146}
147
148static inline Eina_Bool
149eina_tls_new(Eina_TLS *key)
150{
151 if (TlsAlloc() == TLS_OUT_OF_INDEXES)
152 return EINA_FALSE;
153 return EINA_TRUE;
154}
155
156static inline void
157eina_tls_free(Eina_TLS key)
158{
159 TlsFree(key);
160}
161
162static inline void *
163eina_tls_get(Eina_TLS key)
164{
165 return (void*)TlsGetValue(key);
166}
167
168static inline Eina_Bool
169eina_tls_set(Eina_TLS key, const void *data)
170{
171 if (TlsSetValue(key, (LPVOID)data) == 0)
172 return EINA_FALSE;
173 return EINA_TRUE;
174}
175
176
177
178#endif
diff --git a/libraries/eina/src/include/eina_inline_log.x b/libraries/eina/src/include/eina_inline_log.x
new file mode 100644
index 0000000..4cdd7d8
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_log.x
@@ -0,0 +1,197 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_LOG_INLINE_H_
20#define EINA_LOG_INLINE_H_
21
22/**
23 * @addtogroup Eina_Log_Group Log
24 *
25 * @{
26 */
27
28/**
29 * Checks whenever the given level should be printed out.
30 *
31 * This is useful to enable certain blocks of code just when given
32 * level is to be used.
33 *
34 * @code
35 * #include <Eina.h>
36 *
37 * void my_func(void *data)
38 * {
39 * if (eina_log_level_check(EINA_LOG_LEVEL_WARN))
40 * expensive_debugging_code(data);
41 *
42 * my_func_code(data);
43 * }
44 * @endcode
45 *
46 * @return #EINA_TRUE if level is equal or smaller than the current global
47 * logging level.
48 */
49static inline Eina_Bool
50eina_log_level_check(int level)
51{
52 return eina_log_level_get() <= level;
53}
54
55/**
56 * Checks whenever the given level should be printed out.
57 *
58 * This is useful to enable certain blocks of code just when given
59 * level is to be used.
60 *
61 * @code
62 * #include <Eina.h>
63 *
64 * extern int _my_log_dom;
65 *
66 * void my_func(void *data)
67 * {
68 * if (eina_log_domain_level_check(_my_log_dom, EINA_LOG_LEVEL_WARN))
69 * expensive_debugging_code(data);
70 *
71 * my_func_code(data);
72 * }
73 * @endcode
74 *
75 * @return #EINA_TRUE if level is equal or smaller than the current
76 * domain logging level.
77 */
78static inline Eina_Bool
79eina_log_domain_level_check(int domain, int level)
80{
81 int dom_level = eina_log_domain_registered_level_get(domain);
82 if (EINA_UNLIKELY(dom_level == EINA_LOG_LEVEL_UNKNOWN))
83 return EINA_FALSE;
84 return dom_level <= level;
85}
86
87/**
88 * Function to format the level as a 3 character (+1 null byte) string.
89 *
90 * This function converts the given level to a known string name (CRI,
91 * ERR, WRN, INF or DBG) or a zero-padded 3-character string. In any
92 * case the last byte will contain a trailing null byte.
93 *
94 * If extreme level values are used (greater than 999 and smaller than
95 * -99), then the value will just consider the less significant
96 * part. This is so uncommon that users should handle this in their
97 * code.
98 *
99 * @param level what level value to use.
100 * @param name where to write the actual value.
101 *
102 * @return pointer to @p name.
103 */
104static inline const char *
105eina_log_level_name_get(int level, char name[4])
106{
107#define BCPY(A, B, C) \
108 do { name[0] = A; name[1] = B; name[2] = C; } while (0)
109
110 if (EINA_UNLIKELY(level < 0))
111 {
112 name[0] = '-';
113 name[1] = '0' + (-level / 10) % 10;
114 name[2] = '0' + (-level % 10);
115 }
116 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
117 {
118 name[0] = '0' + (level / 100) % 10;
119 name[1] = '0' + (level / 10) % 10;
120 name[2] = '0' + level % 10;
121 }
122 else if (level == 0)
123 BCPY('C', 'R', 'I');
124 else if (level == 1)
125 BCPY('E', 'R', 'R');
126 else if (level == 2)
127 BCPY('W', 'R', 'N');
128 else if (level == 3)
129 BCPY('I', 'N', 'F');
130 else if (level == 4)
131 BCPY('D', 'B', 'G');
132 else
133 BCPY('?', '?', '?');
134
135 name[3] = '\0';
136
137 return name;
138}
139
140/**
141 * Function to get recommended color value for level.
142 *
143 * This function will not check if colors are enabled or not before
144 * returning the level color. If you desire such check, use
145 * eina_log_level_color_if_enabled_get().
146 *
147 * @param level what level value to use.
148 *
149 * @return pointer to null byte terminated ANSI color string to be
150 * used in virtual terminals supporting VT100 color codes.
151 *
152 * @see eina_log_level_color_if_enabled_get()
153 */
154static inline const char *
155eina_log_level_color_get(int level)
156{
157 if (level <= 0)
158 return EINA_COLOR_LIGHTRED;
159 else if (level == 1)
160 return EINA_COLOR_RED;
161 else if (level == 2)
162 return EINA_COLOR_YELLOW;
163 else if (level == 3)
164 return EINA_COLOR_GREEN;
165 else if (level == 4)
166 return EINA_COLOR_LIGHTBLUE;
167 else
168 return EINA_COLOR_BLUE;
169}
170
171/**
172 * Function to get recommended color value for level, if colors are
173 * enabled.
174 *
175 * This function will check if colors are enabled or not before
176 * returning the level color. If colors are disabled, then empty
177 * string is returned.
178 *
179 * @param level what level value to use.
180 *
181 * @return pointer to null byte terminated ANSI color string to be
182 * used in virtual terminals supporting VT100 color codes. If
183 * colors are disabled, the empty string is returned.
184 */
185static inline const char *
186eina_log_level_color_if_enabled_get(int level)
187{
188 if (eina_log_color_disable_get())
189 return "";
190 return eina_log_level_color_get(level);
191}
192
193/**
194 * @}
195 */
196
197#endif /* EINA_LOG_INLINE_H_ */
diff --git a/libraries/eina/src/include/eina_inline_mempool.x b/libraries/eina/src/include/eina_inline_mempool.x
new file mode 100644
index 0000000..a67ec3d
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_mempool.x
@@ -0,0 +1,127 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_MEMPOOL_X_
20#define EINA_INLINE_MEMPOOL_X_
21
22/**
23 * @addtogroup Eina_Memory_Pool_Group Memory Pool
24 *
25 * @{
26 */
27
28/* Memory Pool */
29typedef struct _Eina_Mempool_Backend_ABI1 Eina_Mempool_Backend_ABI1;
30typedef struct _Eina_Mempool_Backend_ABI2 Eina_Mempool_Backend_ABI2;
31
32struct _Eina_Mempool_Backend
33{
34 const char *name;
35 void *(*init)(const char *context, const char *options, va_list args);
36 void (*free)(void *data, void *element);
37 void *(*alloc)(void *data, unsigned int size);
38 void *(*realloc)(void *data, void *element, unsigned int size);
39 void (*garbage_collect)(void *data);
40 void (*statistics)(void *data);
41 void (*shutdown)(void *data);
42 void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
43};
44
45struct _Eina_Mempool_Backend_ABI1
46{
47 const char *name;
48 void *(*init)(const char *context, const char *options, va_list args);
49 void (*free)(void *data, void *element);
50 void *(*alloc)(void *data, unsigned int size);
51 void *(*realloc)(void *data, void *element, unsigned int size);
52 void (*garbage_collect)(void *data);
53 void (*statistics)(void *data);
54 void (*shutdown)(void *data);
55};
56
57struct _Eina_Mempool_Backend_ABI2
58{
59 void (*repack)(void *data, Eina_Mempool_Repack_Cb cb, void *cb_data);
60};
61
62struct _Eina_Mempool
63{
64 Eina_Mempool_Backend_ABI1 backend;
65 void *backend_data;
66 Eina_Mempool_Backend_ABI2 *backend2;
67};
68
69/**
70 * @brief Re-allocate a amount memory by the given mempool.
71 *
72 * @param mp The mempool.
73 * @param element The element to re-allocate.
74 * @param size The size in bytes to re-allocate.
75 * @return The newly re-allocated data.
76 *
77 * This function re-allocates @p element with @p size bytes, using the
78 * mempool @p mp and returns the allocated data. If not used anymore,
79 * the data must be freed with eina_mempool_free(). No check is done
80 * on @p mp, so it must be a valid mempool.
81 */
82static inline void *
83eina_mempool_realloc(Eina_Mempool *mp, void *element, unsigned int size)
84{
85 return mp->backend.realloc(mp->backend_data, element, size);
86}
87
88/**
89 * @brief Allocate a amount memory by the given mempool.
90 *
91 * @param mp The mempool.
92 * @param size The size in bytes to allocate.
93 * @return The newly allocated data.
94 *
95 * This function allocates @p size bytes, using the mempool @p mp and
96 * returns the allocated data. If not used anymore, the data must be
97 * freed with eina_mempool_free(). No check is done on @p mp, so it
98 * must be a valid mempool.
99 */
100static inline void *
101eina_mempool_malloc(Eina_Mempool *mp, unsigned int size)
102{
103 return mp->backend.alloc(mp->backend_data, size);
104}
105
106/**
107 * @brief Free the allocated ressources by the given mempool.
108 *
109 * @param mp The mempool.
110 * @param element The data to free.
111 *
112 * This function frees @p element allocated by @p mp. @p element must
113 * have been obtained by eina_mempool_malloc() or
114 * eina_mempool_realloc(). No check is done on @p mp, so it must be a
115 * valid mempool.
116 */
117static inline void
118eina_mempool_free(Eina_Mempool *mp, void *element)
119{
120 mp->backend.free(mp->backend_data, element);
121}
122
123/**
124 * @}
125 */
126
127#endif
diff --git a/libraries/eina/src/include/eina_inline_rbtree.x b/libraries/eina/src/include/eina_inline_rbtree.x
new file mode 100644
index 0000000..954774b
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_rbtree.x
@@ -0,0 +1,50 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_RBTREE_INLINE_H_
20#define EINA_RBTREE_INLINE_H_
21
22/**
23 * @addtogroup Eina_Rbtree_Group Red-Black tree
24 *
25 * @brief These functions provide Red-Black trees management.
26 *
27 * @{
28 */
29
30static inline Eina_Rbtree *
31eina_rbtree_inline_lookup(const Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp, const void *data)
32{
33 int result;
34
35 while (root)
36 {
37 result = cmp(root, key, length, (void*) data);
38 if (result == 0) return (Eina_Rbtree*) root;
39
40 root = root->son[result < 0 ? 0 : 1];
41 }
42
43 return NULL;
44}
45
46/**
47 * @}
48 */
49
50#endif
diff --git a/libraries/eina/src/include/eina_inline_rectangle.x b/libraries/eina/src/include/eina_inline_rectangle.x
new file mode 100644
index 0000000..29ad24b
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_rectangle.x
@@ -0,0 +1,254 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_RECTANGLE_H__
20#define EINA_INLINE_RECTANGLE_H__
21
22/**
23 * @addtogroup Eina_Rectangle_Group Rectangle
24 *
25 * @brief These functions provide rectangle management.
26 *
27 * @{
28 */
29
30/**
31 * @brief Check if the given spans intersect.
32 *
33 * @param c1 The column of the first span.
34 * @param l1 The length of the first span.
35 * @param c2 The column of the second span.
36 * @param l2 The length of the second span.
37 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
38 *
39 * This function returns #EINA_TRUE if the given spans intersect,
40 * #EINA_FALSE otherwise.
41 */
42static inline int
43eina_spans_intersect(int c1, int l1, int c2, int l2)
44{
45 return (!(((c2 + l2) <= c1) || (c2 >= (c1 + l1))));
46}
47
48/**
49 * @brief Check if the given rectangle is empty.
50 *
51 * @param r The rectangle to check.
52 * @return #EINA_TRUE if the rectangle is empty, #EINA_FALSE otherwise.
53 *
54 * This function returns #EINA_TRUE if @p r is empty, #EINA_FALSE
55 * otherwise. No check is done on @p r, so it must be a valid
56 * rectangle.
57 */
58static inline Eina_Bool
59eina_rectangle_is_empty(const Eina_Rectangle *r)
60{
61 return ((r->w < 1) || (r->h < 1)) ? EINA_TRUE : EINA_FALSE;
62}
63
64/**
65 * @brief Set the coordinates and size of the given rectangle.
66 *
67 * @param r The rectangle.
68 * @param x The top-left x coordinate of the rectangle.
69 * @param y The top-left y coordinate of the rectangle.
70 * @param w The width of the rectangle.
71 * @param h The height of the rectangle.
72 *
73 * This function sets its top-left x coordinate to @p x, its top-left
74 * y coordinate to @p y, its width to @p w and its height to @p h. No
75 * check is done on @p r, so it must be a valid rectangle.
76 */
77static inline void
78eina_rectangle_coords_from(Eina_Rectangle *r, int x, int y, int w, int h)
79{
80 r->x = x;
81 r->y = y;
82 r->w = w;
83 r->h = h;
84}
85
86/**
87 * @brief Check if the given rectangles intersect.
88 *
89 * @param r1 The first rectangle.
90 * @param r2 The second rectangle.
91 * @return #EINA_TRUE if the rectangles intersect, #EINA_FALSE otherwise.
92 *
93 * This function returns #EINA_TRUE if @p r1 and @p r2 intersect,
94 * #EINA_FALSE otherwise. No check is done on @p r1 and @p r2, so they
95 * must be valid rectangles.
96 */
97static inline Eina_Bool
98eina_rectangles_intersect(const Eina_Rectangle *r1, const Eina_Rectangle *r2)
99{
100 return (eina_spans_intersect(r1->x, r1->w, r2->x, r2->w) && eina_spans_intersect(r1->y, r1->h, r2->y, r2->h)) ? EINA_TRUE : EINA_FALSE;
101}
102
103/**
104 * @brief Check if the given x-coordinate is in the rectangle .
105 *
106 * @param r The rectangle.
107 * @param x The x coordinate.
108 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
109 *
110 * This function returns #EINA_TRUE if @p x is in @p r with respect to
111 * the horizontal direction, #EINA_FALSE otherwise. No check is done
112 * on @p r, so it must be a valid rectangle.
113 */
114static inline Eina_Bool
115eina_rectangle_xcoord_inside(const Eina_Rectangle *r, int x)
116{
117 return ((x >= r->x) && (x < (r->x + r->w))) ? EINA_TRUE : EINA_FALSE;
118}
119
120/**
121 * @brief Check if the given y-coordinate is in the rectangle .
122 *
123 * @param r The rectangle.
124 * @param y The y coordinate.
125 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
126 *
127 * This function returns #EINA_TRUE if @p y is in @p r with respect to
128 * the vertical direction, #EINA_FALSE otherwise. No check is done
129 * on @p r, so it must be a valid rectangle.
130 */
131static inline Eina_Bool
132eina_rectangle_ycoord_inside(const Eina_Rectangle *r, int y)
133{
134 return ((y >= r->y) && (y < (r->y + r->h))) ? EINA_TRUE : EINA_FALSE;
135}
136
137/**
138 * @brief Check if the given point is in the rectangle .
139 *
140 * @param r The rectangle.
141 * @param x The x coordinate of the point.
142 * @param y The y coordinate of the point.
143 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
144 *
145 * This function returns #EINA_TRUE if the point of coordinate (@p x,
146 * @p y) is in @p r, #EINA_FALSE otherwise. No check is done on @p r,
147 * so it must be a valid rectangle.
148 */
149static inline Eina_Bool
150eina_rectangle_coords_inside(const Eina_Rectangle *r, int x, int y)
151{
152 return (eina_rectangle_xcoord_inside(r, x) && eina_rectangle_ycoord_inside(r, y)) ? EINA_TRUE : EINA_FALSE;
153}
154
155/**
156 * @brief Get the union of two rectangles.
157 *
158 * @param dst The first rectangle.
159 * @param src The second rectangle.
160 *
161 * This function get the union of the rectangles @p dst and @p src. The
162 * result is stored in @p dst. No check is done on @p dst or @p src,
163 * so they must be valid rectangles.
164 */
165static inline void
166eina_rectangle_union(Eina_Rectangle *dst, const Eina_Rectangle *src)
167{
168 /* left */
169 if (dst->x > src->x)
170 {
171 dst->w += dst->x - src->x;
172 dst->x = src->x;
173 }
174 /* right */
175 if ((dst->x + dst->w) < (src->x + src->w))
176 dst->w = src->x + src->w;
177 /* top */
178 if (dst->y > src->y)
179 {
180 dst->h += dst->y - src->y;
181 dst->y = src->y;
182 }
183 /* bottom */
184 if ((dst->y + dst->h) < (src->y + src->h))
185 dst->h = src->y + src->h;
186}
187
188/**
189 * @brief Get the intersection of two rectangles.
190 *
191 * @param dst The first rectangle.
192 * @param src The second rectangle.
193 * @return #EINA_TRUE if the rectangles intersect, #EINA_FALSE
194 * otherwise.
195 *
196 * This function get the intersection of the rectangles @p dst and
197 * @p src. The result is stored in @p dst. No check is done on @p dst
198 * or @p src, so they must be valid rectangles.
199 */
200static inline Eina_Bool
201eina_rectangle_intersection(Eina_Rectangle *dst, const Eina_Rectangle *src)
202{
203 if (!(eina_rectangles_intersect(dst, src)))
204 return EINA_FALSE;
205
206 /* left */
207 if (dst->x < src->x)
208 {
209 dst->w += dst->x - src->x;
210 dst->x = src->x;
211 if (dst->w < 0)
212 dst->w = 0;
213 }
214 /* right */
215 if ((dst->x + dst->w) > (src->x + src->w))
216 dst->w = src->x + src->w - dst->x;
217 /* top */
218 if (dst->y < src->y)
219 {
220 dst->h += dst->y - src->y;
221 dst->y = src->y;
222 if (dst->h < 0)
223 dst->h = 0;
224 }
225 /* bottom */
226 if ((dst->y + dst->h) > (src->y + src->h))
227 dst->h = src->y + src->h - dst->y;
228
229 return EINA_TRUE;
230}
231
232static inline void
233eina_rectangle_rescale_in(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res)
234{
235 res->x = in->x - out->x;
236 res->y = in->y - out->y;
237 res->w = in->w;
238 res->h = in->h;
239}
240
241static inline void
242eina_rectangle_rescale_out(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res)
243{
244 res->x = out->x + in->x;
245 res->y = out->y + in->y;
246 res->w = out->w;
247 res->h = out->h;
248}
249
250/**
251 * @}
252 */
253
254#endif
diff --git a/libraries/eina/src/include/eina_inline_str.x b/libraries/eina/src/include/eina_inline_str.x
new file mode 100644
index 0000000..2daeb85
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_str.x
@@ -0,0 +1,76 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_STR_INLINE_H_
20#define EINA_STR_INLINE_H_
21
22/**
23 * @addtogroup Eina_String_Group String
24 *
25 * @{
26 */
27
28/**
29 * @brief Count up to a given amount of bytes of the given string.
30 *
31 * @param str The string pointer.
32 * @param maxlen The maximum length to allow.
33 * @return the string size or (size_t)-1 if greater than @a maxlen.
34 *
35 * This function returns the size of @p str, up to @p maxlen
36 * characters. It avoid needless iterations after that size. @p str
37 * must be a valid pointer and MUST not be @c NULL, otherwise this
38 * function will crash. This function returns the string size, or
39 * (size_t)-1 if the size is greater than @a maxlen.
40 */
41static inline size_t
42eina_strlen_bounded(const char *str, size_t maxlen)
43{
44 const char *itr, *str_maxend = str + maxlen;
45 for (itr = str; *itr != '\0'; itr++)
46 if (itr == str_maxend) return (size_t)-1;
47 return itr - str;
48}
49
50/**
51 * @brief Join two strings of known length.
52 *
53 * @param dst The buffer to store the result.
54 * @param size Size (in byte) of the buffer.
55 * @param sep The separator character to use.
56 * @param a First string to use, before @p sep.
57 * @param b Second string to use, after @p sep.
58 * @return The number of characters printed.
59 *
60 * This function is similar to eina_str_join_len(), but will compute
61 * the length of @p a and @p b using strlen().
62 *
63 * @see eina_str_join_len()
64 * @see eina_str_join_static()
65 */
66static inline size_t
67eina_str_join(char *dst, size_t size, char sep, const char *a, const char *b)
68{
69 return eina_str_join_len(dst, size, sep, a, strlen(a), b, strlen(b));
70}
71
72/**
73 * @}
74 */
75
76#endif /* EINA_STR_INLINE_H_ */
diff --git a/libraries/eina/src/include/eina_inline_stringshare.x b/libraries/eina/src/include/eina_inline_stringshare.x
new file mode 100644
index 0000000..bfd7677
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_stringshare.x
@@ -0,0 +1,91 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_STRINGSHARE_INLINE_H_
20#define EINA_STRINGSHARE_INLINE_H_
21
22#include <string.h>
23#include "eina_stringshare.h"
24/**
25 * @addtogroup Eina_Stringshare_Group Stringshare
26 *
27 * @{
28 */
29
30/**
31 * Replace the previously stringshared pointer with new content.
32 *
33 * The string pointed by @a p_str should be previously stringshared or
34 * @c NULL and it will be eina_stringshare_del(). The new string will
35 * be passed to eina_stringshare_add() and then assigned to @c *p_str.
36 *
37 * @param p_str pointer to the stringhare to be replaced. Must not be
38 * @c NULL, but @c *p_str may be @c NULL as it is a valid
39 * stringshare handle.
40 * @param news new string to be stringshared, may be @c NULL.
41 *
42 * @return #EINA_TRUE if the strings were different and thus replaced,
43 * #EINA_FALSE if the strings were the same after shared.
44 */
45static inline Eina_Bool
46eina_stringshare_replace(const char **p_str, const char *news)
47{
48 if (*p_str == news) return EINA_FALSE;
49
50 news = eina_stringshare_add(news);
51 eina_stringshare_del(*p_str);
52 if (*p_str == news)
53 return EINA_FALSE;
54 *p_str = news;
55 return EINA_TRUE;
56}
57
58/**
59 * Replace the previously stringshared pointer with a new content.
60 *
61 * The string pointed by @a p_str should be previously stringshared or
62 * @c NULL and it will be eina_stringshare_del(). The new string will
63 * be passed to eina_stringshare_add_length() and then assigned to @c *p_str.
64 *
65 * @param p_str pointer to the stringhare to be replaced. Must not be
66 * @c NULL, but @c *p_str may be @c NULL as it is a valid
67 * stringshare handle.
68 * @param news new string to be stringshared, may be @c NULL.
69 * @param slen The string size (<= strlen(str)).
70 *
71 * @return #EINA_TRUE if the strings were different and thus replaced,
72 * #EINA_FALSE if the strings were the same after shared.
73 */
74static inline Eina_Bool
75eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen)
76{
77 if (*p_str == news) return EINA_FALSE;
78
79 news = eina_stringshare_add_length(news, slen);
80 eina_stringshare_del(*p_str);
81 if (*p_str == news)
82 return EINA_FALSE;
83 *p_str = news;
84 return EINA_TRUE;
85}
86
87/**
88 * @}
89 */
90
91#endif /* EINA_STRINGSHARE_INLINE_H_ */
diff --git a/libraries/eina/src/include/eina_inline_tiler.x b/libraries/eina/src/include/eina_inline_tiler.x
new file mode 100644
index 0000000..2a8b205
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_tiler.x
@@ -0,0 +1,151 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2009 Rafael Antognolli
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_TILER_INLINE_H_
20#define EINA_TILER_INLINE_H_
21
22#include "eina_safety_checks.h"
23
24/**
25 * @cond LOCAL
26 * This struct should not be accessed directly, it is used by
27 * eina_tile_grid_slicer functions to maintain context and fill "info"
28 * member with correct values for given iteration.
29 */
30struct _Eina_Tile_Grid_Slicer
31{
32 unsigned long col1, col2, row1, row2; // initial and final col,row
33 int tile_w, tile_h; // tile width, height
34 int x_rel, y_rel; // starting x,y coordinates of the first col,row
35 int w1_rel, h1_rel; // width,height of the first col,row
36 int w2_rel, h2_rel; // width,height of the last col,row
37 struct Eina_Tile_Grid_Info info; // info about the current tile
38 Eina_Bool first;
39};
40
41/**
42 * @endcond
43 */
44
45static inline Eina_Bool
46eina_tile_grid_slicer_next(Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect)
47{
48 EINA_SAFETY_ON_NULL_RETURN_VAL(slc, 0);
49
50 if (slc->first)
51 {
52 slc->first = 0;
53 *rect = &slc->info;
54 return EINA_TRUE;
55 }
56
57 slc->info.col++;
58
59 if (slc->info.col > slc->col2)
60 {
61 slc->info.row++;
62 if (slc->info.row > slc->row2)
63 return EINA_FALSE;
64 else if (slc->info.row < slc->row2)
65 slc->info.rect.h = slc->tile_h;
66 else
67 slc->info.rect.h = slc->h2_rel;
68 slc->info.rect.y = 0;
69 slc->info.col = slc->col1;
70 slc->info.rect.x = slc->x_rel;
71 slc->info.rect.w = slc->w1_rel;
72 }
73 else
74 {
75 slc->info.rect.x = 0;
76 if (slc->info.col < slc->col2)
77 slc->info.rect.w = slc->tile_w;
78 else
79 slc->info.rect.w = slc->w2_rel;
80 }
81
82 if (slc->info.rect.w == slc->tile_w && slc->info.rect.h == slc->tile_h)
83 slc->info.full = EINA_TRUE;
84 else
85 slc->info.full = EINA_FALSE;
86
87 *rect = &slc->info;
88
89 return EINA_TRUE;
90}
91
92static inline Eina_Bool
93eina_tile_grid_slicer_setup(Eina_Tile_Grid_Slicer *slc, int x, int y, int w, int h, int tile_w, int tile_h)
94{
95 int tx1, tx2, ty1, ty2;
96
97 EINA_SAFETY_ON_NULL_RETURN_VAL(slc, 0);
98
99 tx1 = x;
100 ty1 = y;
101 tx2 = x + w - 1;
102 ty2 = y + h - 1;
103
104 if (x < 0 || y < 0 || w <= 0 || h <= 0 || tile_w <= 0 || tile_h <= 0)
105 {
106 slc->first = 0;
107 slc->col1 = slc->row1 = 0;
108 slc->col2 = slc->row2 = 0;
109 slc->info.col = slc->col1;
110 slc->info.row = slc->row1;
111 return EINA_TRUE;
112 }
113
114 slc->col1 = tx1 / tile_w;
115 slc->row1 = ty1 / tile_h;
116 slc->col2 = (tx2 - 0) / tile_w;
117 slc->row2 = (ty2 - 0) / tile_h;
118 slc->x_rel = tx1 % tile_w;
119 slc->y_rel = ty1 % tile_h;
120 slc->w1_rel = tile_w - slc->x_rel;
121 slc->h1_rel = tile_h - slc->y_rel;
122 slc->w2_rel = tx2 % tile_w + 1;
123 slc->h2_rel = ty2 % tile_h + 1;
124
125 slc->tile_w = tile_w;
126 slc->tile_h = tile_h;
127
128 slc->first = 1;
129 slc->info.col = slc->col1;
130 slc->info.row = slc->row1;
131 slc->info.rect.x = slc->x_rel;
132 slc->info.rect.y = slc->y_rel;
133
134 if (slc->info.col == slc->col2)
135 slc->w1_rel = slc->w2_rel - slc->x_rel;
136
137 if (slc->info.row == slc->row2)
138 slc->h1_rel = slc->h2_rel - slc->y_rel;
139
140 slc->info.rect.w = slc->w1_rel;
141 slc->info.rect.h = slc->h1_rel;
142
143 if (slc->info.rect.w == slc->tile_w && slc->info.rect.h == slc->tile_h)
144 slc->info.full = EINA_TRUE;
145 else
146 slc->info.full = EINA_FALSE;
147
148 return EINA_TRUE;
149}
150
151#endif
diff --git a/libraries/eina/src/include/eina_inline_trash.x b/libraries/eina/src/include/eina_inline_trash.x
new file mode 100644
index 0000000..4a50611
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_trash.x
@@ -0,0 +1,90 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLINE_TRASH_X__
20#define EINA_INLINE_TRASH_X__
21
22/**
23 * @brief Initialize a trash before using it.
24 *
25 * @param trash The trash.
26 *
27 * This function just set to zero the trash to correctly
28 * initialize it.
29 *
30 * @note You can just set *trash to NULL and you will have
31 * the same result.
32 */
33static inline void
34eina_trash_init(Eina_Trash **trash)
35{
36 *trash = NULL;
37}
38
39/**
40 * @brief Push an unused pointer in the trash instead of freeing it.
41 *
42 * @param trash A pointer to an Eina_Trash.
43 * @param data An unused pointer big enougth to put a (void*).
44 *
45 * Instead of freeing a pointer and put pressure on malloc/free
46 * you can push it in a trash for a later use. This function just
47 * provide a fast way to push a now unused pointer into a trash.
48 *
49 * @note Do never use the pointer after insertion or bad things will
50 * happens.
51 *
52 * @note This trash will not resize, nor do anything with the size of
53 * the region pointed by @p data, so it's your duty to manage the size.
54 */
55static inline void
56eina_trash_push(Eina_Trash **trash, void *data)
57{
58 Eina_Trash *tmp;
59
60 tmp = (Eina_Trash *)data;
61 tmp->next = *trash;
62 *trash = tmp;
63}
64
65/**
66 * @brief Pop an available pointer from the trash if possible.
67 *
68 * @param trash A pointer to an Eina_Trash.
69 *
70 * Instead of calling malloc, and putting pressure on malloc/free
71 * you can recycle the content of the trash, if it's not empty.
72 *
73 * @note This trash will not resize, nor do anything with the size of
74 * the region pointed by pointer inside the trash, so it's your duty
75 * to manage the size of the returned pointer.
76 */
77static inline void*
78eina_trash_pop(Eina_Trash **trash)
79{
80 void *tmp;
81
82 tmp = *trash;
83
84 if (*trash)
85 *trash = (*trash)->next;
86
87 return tmp;
88}
89
90#endif
diff --git a/libraries/eina/src/include/eina_inline_ustringshare.x b/libraries/eina/src/include/eina_inline_ustringshare.x
new file mode 100644
index 0000000..ace6fdc
--- /dev/null
+++ b/libraries/eina/src/include/eina_inline_ustringshare.x
@@ -0,0 +1,93 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Gustavo Sverzut Barbieri
3 Tom Hacohen
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_USTRINGSHARE_INLINE_H_
21#define EINA_USTRINGSHARE_INLINE_H_
22
23#include "eina_unicode.h"
24#include "eina_ustringshare.h"
25
26/**
27 * @addtogroup Eina_UStringshare_Group Unicode Stringshare
28 *
29 * @{
30 */
31
32/**
33 * Replace the previously stringshared pointer with new content.
34 *
35 * The string pointed by @a p_str should be previously stringshared or
36 * @c NULL and it will be eina_ustringshare_del(). The new string will
37 * be passed to eina_ustringshare_add() and then assigned to @c *p_str.
38 *
39 * @param p_str pointer to the stringhare to be replaced. Must not be
40 * @c NULL, but @c *p_str may be @c NULL as it is a valid
41 * stringshare handle.
42 * @param news new string to be stringshared, may be @c NULL.
43 *
44 * @return #EINA_TRUE if the strings were different and thus replaced,
45 * #EINA_FALSE if the strings were the same after shared.
46 */
47static inline Eina_Bool
48eina_ustringshare_replace(const Eina_Unicode **p_str, const Eina_Unicode *news)
49{
50 if (*p_str == news) return EINA_FALSE;
51
52 news = eina_ustringshare_add(news);
53 eina_ustringshare_del(*p_str);
54 if (*p_str == news)
55 return EINA_FALSE;
56 *p_str = news;
57 return EINA_TRUE;
58}
59
60/**
61 * Replace the previously stringshared pointer with a new content.
62 *
63 * The string pointed by @a p_str should be previously stringshared or
64 * @c NULL and it will be eina_ustringshare_del(). The new string will
65 * be passed to eina_ustringshare_add_length() and then assigned to @c *p_str.
66 *
67 * @param p_str pointer to the stringhare to be replaced. Must not be
68 * @c NULL, but @c *p_str may be @c NULL as it is a valid
69 * stringshare handle.
70 * @param news new string to be stringshared, may be @c NULL.
71 * @param slen The string size (<= strlen(str)).
72 *
73 * @return #EINA_TRUE if the strings were different and thus replaced,
74 * #EINA_FALSE if the strings were the same after shared.
75 */
76static inline Eina_Bool
77eina_ustringshare_replace_length(const Eina_Unicode **p_str, const Eina_Unicode *news, unsigned int slen)
78{
79 if (*p_str == news) return EINA_FALSE;
80
81 news = eina_ustringshare_add_length(news, slen);
82 eina_ustringshare_del(*p_str);
83 if (*p_str == news)
84 return EINA_FALSE;
85 *p_str = news;
86 return EINA_TRUE;
87}
88
89/**
90 * @}
91 */
92
93#endif /* EINA_USTRINGSHARE_INLINE_H_ */
diff --git a/libraries/eina/src/include/eina_inlist.h b/libraries/eina/src/include/eina_inlist.h
new file mode 100644
index 0000000..1b3ab27
--- /dev/null
+++ b/libraries/eina/src/include/eina_inlist.h
@@ -0,0 +1,813 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_INLIST_H_
20#define EINA_INLIST_H_
21
22#include "eina_types.h"
23#include "eina_iterator.h"
24#include "eina_accessor.h"
25#include <stddef.h>
26
27/**
28 * @page inlist_01_example_page Eina_Inlist basic usage
29 * @dontinclude eina_inlist_01.c
30 *
31 * To see the full source for this example, click here: @ref
32 * eina_inlist_01_c
33 *
34 * As explained before, inline lists mean its nodes pointers are part of same
35 * memory block/blob. This is done by using the macro @ref EINA_INLIST inside the
36 * data structure that will be used:
37 *
38 * @skip struct
39 * @until };
40 *
41 * The resulting node representing this struct can be exemplified by the
42 * following picture:
43 *
44 * @image html eina_inlist-node_eg1-my-struct.png
45 * @image rtf eina_inlist-node_eg1-my-struct.png
46 * @image latex eina_inlist-node_eg1-my-struct.eps
47 *
48 * Let's define a comparison function that will be used later during the
49 * sorting of the list:
50 *
51 * @skip int
52 * @until }
53 *
54 * The @ref Eina_Inlist can be used exactly the same way as @ref Eina_List when
55 * appending, prepending and removing items. But since we already have the node
56 * pointers inside the structure, they need to be retrieved with the macro @ref
57 * EINA_INLIST_GET :
58 *
59 * @skip malloc
60 * @until append
61 *
62 * Notice that @ref eina_inlist_append always receives the head of the list as
63 * first argument, and its return value should be used as the list pointer
64 * (head):
65 *
66 * @skip malloc
67 * @until append
68 *
69 * After appending 3 items, the list now should look similar to this:
70 *
71 * @image html eina_inlist-node_eg1-inlist.png
72 * @image rtf eina_inlist-node_eg1-inlist.png
73 * @image latex eina_inlist-node_eg1-inlist.eps width=\textwidth
74 *
75 * The macro @ref EINA_INLIST_FOREACH can be used to iterate over the list:
76 *
77 * @skip printf
78 * @until cur->a
79 *
80 * @ref eina_inlist_promote(), @ref eina_inlist_demote(), @ref
81 * eina_inlist_append_relative() and similar functions all work in the same way
82 * as the @ref Eina_List :
83 *
84 * @skip eina_inlist_promote
85 * @until eina_inlist_demote
86 *
87 * Now let's use the @c sort_cb function declared above to sort our list:
88 *
89 * @skipline eina_inlist_sort
90 *
91 * Removing an element from the inlist is also similar to @ref Eina_List :
92 *
93 * @skip inlist_remove
94 * @until free
95 *
96 * Another way of walking through the inlist.
97 *
98 * @skip for
99 * @until }
100 *
101 * Notice that in the previous piece of code, since we only have the pointers to
102 * the inlist nodes, we have to use the @ref EINA_INLIST_CONTAINER_GET macro
103 * that will return the pointer to the entire structure. Of course, in this case
104 * it is the same as the list pointer, since the @ref EINA_INLIST macro was used
105 * in the beginning of the structure.
106 *
107 * Now to finish this example, lets delete this list:
108 *
109 * @skip while
110 * @until }
111 */
112
113/**
114 * @page inlist_02_example_page Eina_Inlist advanced usage - lists and inlists
115 * @dontinclude eina_inlist_02.c
116 *
117 * This example describes the usage of @ref Eina_Inlist mixed with @ref
118 * Eina_List . We create and add elements to an inlist, and the even members
119 * are also added to a normal list. Later we remove the elements divisible by 3
120 * from this normal list.
121 *
122 * The struct that is going to be used is the same used in @ref
123 * inlist_01_example_page , since we still need the @ref EINA_INLIST macro to
124 * declare the inlist node info:
125 *
126 * @skip struct
127 * @until };
128 *
129 * The resulting node representing this struct can be exemplified by the
130 * following picture:
131 *
132 * @image html eina_inlist-node_eg2-my-struct.png
133 * @image rtf eina_inlist-node_eg2-my-struct.png
134 * @image latex eina_inlist-node_eg2-my-struct.eps
135 *
136 * Now we need some pointers and auxiliar variables that will help us iterate on
137 * the lists:
138 *
139 * @skip struct
140 * @until l_next;
141 *
142 * Allocating 100 elements and putting them into an inlist, and the even
143 * elements also go to the normal list:
144 *
145 * @skip for
146 * @until }
147 *
148 * After this point, what we have are two distinct lists that share some
149 * elements. The first list (inlist) is defined by the pointers inside the
150 * elements data structure, while the second list (normal list) has its own node
151 * data structure that is kept outside of the elements.
152 *
153 * The two lists, sharing some elements, can be represented by the following
154 * picture:
155 *
156 * @htmlonly
157 * <img src="eina_inlist-node_eg2-list-inlist.png" style="max-width: 100%;"/>
158 * @endhtmlonly
159 * @image rtf eina_inlist-node_eg2-list-inlist.png
160 * @image latex eina_inlist-node_eg2-list-inlist.eps width=\textwidth
161 *
162 * Accessing both lists is done normally, as if they didn't have any elements in
163 * common:
164 *
165 * @skip printf
166 * @until eina_list_count
167 *
168 * We can remove elements from the normal list, but we just don't free them
169 * because they are still stored in the inlist:
170 *
171 * @skip EINA_LIST_FOREACH_SAFE
172 * @until eina_list_count
173 *
174 * To finish this example, we want to free both lists, we can't just free all
175 * elements on the second list (normal list) because they are still being used
176 * in the inlist. So we first discard the normal list without freeing its
177 * elements, then we free all elements in the inlist (that contains all elements
178 * allocated until now):
179 *
180 * @skip eina_list_free
181 * @until }
182 *
183 * Here is the full source code for this example: @ref eina_inlist_02_c
184 */
185
186/**
187 * @page inlist_03_example_page Eina_Inlist advanced usage - multi-inlists
188 * @dontinclude eina_inlist_03.c
189 *
190 * This example describes the usage of multiple inlists storing the same data.
191 * It means that some data may appear in more than one inlist at the same time.
192 * We will demonstrate this by creating an inlist with 100 numbers, and adding
193 * the odd numbers to the second inlist, then remove the numbers divisible by 3
194 * from the second list.
195 *
196 * To accomplish this, it is necessary to have two inlist pointers in the struct
197 * that is going to be stored. We are using the default inlist member @ref
198 * EINA_INLIST, and adding another member @c even that is of type @ref
199 * Eina_Inlist too:
200 *
201 * @skip struct
202 * @until };
203 *
204 * The representation for this struct is:
205 *
206 * @image html eina_inlist-node_eg3-my-struct.png
207 * @image rtf eina_inlist-node_eg3-my-struct.png
208 * @image latex eina_inlist-node_eg3-my-struct.eps
209 *
210 * And we will define some convenience macros that are equivalent to @ref
211 * EINA_INLIST_GET and @ref EINA_INLIST_CONTAINER_GET :
212 *
213 * @skip define
214 * @until offsetof
215 *
216 * We need two pointers, one for each list, and a pointer that will be used as
217 * an iterator:
218 *
219 * @skipline Eina_Inlist
220 *
221 * Now we allocate and add to the first list every number from 0 to 99. These
222 * nodes data also have the @ref Eina_Inlist node info for the second list (@c
223 * even). We will use them to add just the even numbers to the second list, the
224 * @c list_even. Also notice that we are using our macro @c EVEN_INLIST_GET to
225 * get the pointer to the even list node info:
226 *
227 * @skip for
228 * @until }
229 *
230 * And the resulting lists will be as follow:
231 *
232 * @htmlonly
233 * <img src="eina_inlist-node_eg3-two-inlists.png" style="max-width: 100%;"/>
234 * @endhtmlonly
235 * @image rtf eina_inlist-node_eg3-two-inlists.png
236 * @image latex eina_inlist-node_eg3-two-inlists.eps width=\textwidth
237 *
238 * For the first list, we can use the macro @ref EINA_INLIST_FOREACH to iterate
239 * over its elements:
240 *
241 * @skip FOREACH
242 * @until printf
243 *
244 * But for the second list, we have to do it manually. Of course we could create
245 * a similar macro to @ref EINA_INLIST_FOREACH, but since this macro is more
246 * complex than the other two and we are using it only once, it's better to just
247 * do it manually:
248 *
249 * @skip for
250 * @until }
251 *
252 * Let's just check that the two lists have the expected number of elements:
253 *
254 * @skip list count
255 * @until list_even count
256 *
257 * And removing the numbers divisible by 3 only from the second list:
258 *
259 * @skip itr
260 * @until list_even count
261 *
262 * Now that we don't need the two lists anymore, we can just free all the items.
263 * Since all of the allocated data was put into the first list, and both lists
264 * are made of pointers to inside the data structures, we can free only the
265 * first list (that contains all the elements) and the second list will be gone
266 * with it:
267 *
268 * @skip while
269 * @until free
270 *
271 * To see the full source code for this example, click here: @ref
272 * eina_inlist_03_c
273 *
274 */
275
276/**
277 * @page eina_inlist_01_c eina_inlist_01.c Eina_Inlist basic usage source
278 * @include eina_inlist_01.c
279 */
280
281/**
282 * @page eina_inlist_02_c eina_inlist_02.c Eina_Inlist advanced usage - lists and inlists source
283 * @include eina_inlist_02.c
284 */
285
286/**
287 * @page eina_inlist_03_c eina_inlist_03.c Eina_Inlist advanced usage - multi-inlists source
288 * @include eina_inlist_03.c
289 */
290
291/**
292 * @addtogroup Eina_Inline_List_Group Inline List
293 *
294 * @brief These functions provide inline list management.
295 *
296 * Inline lists mean its nodes pointers are part of same memory as
297 * data. This has the benefit of fragmenting memory less and avoiding
298 * @c node->data indirection, but has the drawback of higher cost for some
299 * common operations like count and sort.
300 *
301 * It is possible to have inlist nodes to be part of regular lists, created with
302 * @ref eina_list_append() or @ref eina_list_prepend(). It's also possible to
303 * have a structure with two inlist pointers, thus be part of two different
304 * inlists at the same time, but the current convenience macros provided won't
305 * work for both of them. Consult @ref inlist_advanced for more info.
306 *
307 * Inline lists have their purposes, but if you don't know what those purposes are, go with
308 * regular lists instead.
309 *
310 * Tip: When using inlists in more than one place (that is, passing them around
311 * functions or keeping a pointer to them in a structure) it's more correct
312 * to keep a pointer to the first container, and not a pointer to the first
313 * inlist item (mostly they are the same, but that's not always correct).
314 * This lets the compiler to do type checking and let the programmer know
315 * exactly what type this list is.
316 *
317 * A simple example demonstrating the basic usage of an inlist can be found
318 * here: @ref inlist_01_example_page
319 *
320 * @section inlist_algo Algorithm
321 *
322 * The basic structure can be represented by the following picture:
323 *
324 * @image html eina_inlist-node.png
325 * @image rtf eina_inlist-node.png
326 * @image latex eina_inlist-node.eps
327 *
328 * One data structure will also have the node information, with three pointers:
329 * @a prev, @a next and @a last. The @a last pointer is just valid for the first
330 * element (the list head), otherwise each insertion in the list would have to
331 * be done updating every node with the correct pointer. This means that it's
332 * always very important to keep a pointer to the first element of the list,
333 * since it is the only one that has the correct information to allow a proper
334 * O(1) append to the list.
335 *
336 * @section inlist_perf Performance
337 *
338 * Due to the nature of the inlist, there's no accounting information, and no
339 * easy access to the last element from each list node. This means that @ref
340 * eina_inlist_count() is order-N, while @ref eina_list_count() is order-1 (constant
341 * time).
342 *
343 * For the same reasons, @ref eina_inlist_sort() is slower than @ref
344 * eina_list_sort() . If the list is intended to have faster access, be
345 * sorted/merged frequently, or needs to have other complex operations, consider
346 * using @ref Eina_List instead.
347 *
348 * @section inlist_advanced Advanced Usage
349 *
350 * The basic usage considers a struct that will have the user data, and also
351 * have an inlist node information (prev, next and last pointers) created with
352 * @ref EINA_INLIST during the struct declaration. This allows one to use the
353 * convenience macros @ref EINA_INLIST_GET(), @ref EINA_INLIST_CONTAINER_GET(),
354 * @ref EINA_INLIST_FOREACH() and so. This happens because the @ref EINA_INLIST
355 * macro declares a struct member with the name @a __inlist, and all the other
356 * macros assume that this struct member has this name.
357 *
358 * It may be the case that someone needs to have some inlist nodes added to a
359 * @ref Eina_List too. If this happens, the inlist nodes can be added to the
360 * @ref Eina_List without any problems. This example demonstrates this case:
361 * @ref inlist_02_example_page
362 *
363 * It's also possible to have some data that is part of two different inlists.
364 * If this is the case, then it won't be possible to use the convenience macros
365 * to both of the lists. It will be necessary to create a new set of macros that
366 * will allow access to the second list node info. An example for this usage can
367 * be found here:
368 * @ref inlist_03_example_page
369 *
370 * List of examples:
371 * @li @ref inlist_01_example_page
372 * @li @ref inlist_02_example_page
373 * @li @ref inlist_03_example_page
374 */
375
376/**
377 * @addtogroup Eina_Data_Types_Group Data Types
378 *
379 * @{
380 */
381
382/**
383 * @addtogroup Eina_Containers_Group Containers
384 *
385 * @{
386 */
387
388/**
389 * @defgroup Eina_Inline_List_Group Inline List
390 *
391 * @{
392 */
393
394/**
395 * @typedef Eina_Inlist
396 * Inlined list type.
397 */
398typedef struct _Eina_Inlist Eina_Inlist;
399
400/**
401 * @typedef Eina_Inlist_Sorted_State
402 * @since 1.1.0
403 * State of sorted Eina_Inlist
404 */
405typedef struct _Eina_Inlist_Sorted_State Eina_Inlist_Sorted_State;
406
407/**
408 * @struct _Eina_Inlist
409 * Inlined list type.
410 */
411struct _Eina_Inlist
412{
413 Eina_Inlist *next; /**< next node */
414 Eina_Inlist *prev; /**< previous node */
415 Eina_Inlist *last; /**< last node */
416};
417/** Used for declaring an inlist member in a struct */
418#define EINA_INLIST Eina_Inlist __in_list
419/** Utility macro to get the inlist object of a struct */
420#define EINA_INLIST_GET(Inlist) (& ((Inlist)->__in_list))
421/** Utility macro to get the container object of an inlist */
422#define EINA_INLIST_CONTAINER_GET(ptr, \
423 type) ((type *)((char *)ptr - \
424 offsetof(type, __in_list)))
425
426
427/**
428 * Add a new node to end of a list.
429 *
430 * @note this code is meant to be fast: appends are O(1) and do not
431 * walk @a list.
432 *
433 * @note @a new_l is considered to be in no list. If it was in another
434 * list before, eina_inlist_remove() it before adding. No
435 * check of @a new_l prev and next pointers is done, so it's safe
436 * to have them uninitialized.
437 *
438 * @param list existing list head or NULL to create a new list.
439 * @param new_l new list node, must not be NULL.
440 *
441 * @return the new list head. Use it and not @a list anymore.
442 */
443EAPI Eina_Inlist *eina_inlist_append(Eina_Inlist *in_list,
444 Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
445
446/**
447 * Add a new node to beginning of list.
448 *
449 * @note this code is meant to be fast: appends are O(1) and do not
450 * walk @a list.
451 *
452 * @note @a new_l is considered to be in no list. If it was in another
453 * list before, eina_inlist_remove() it before adding. No
454 * check of @a new_l prev and next pointers is done, so it's safe
455 * to have them uninitialized.
456 *
457 * @param list existing list head or NULL to create a new list.
458 * @param new_l new list node, must not be NULL.
459 *
460 * @return the new list head. Use it and not @a list anymore.
461 */
462EAPI Eina_Inlist *eina_inlist_prepend(Eina_Inlist *in_list,
463 Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
464
465/**
466 * Add a new node after the given relative item in list.
467 *
468 * @note this code is meant to be fast: appends are O(1) and do not
469 * walk @a list.
470 *
471 * @note @a new_l is considered to be in no list. If it was in another
472 * list before, eina_inlist_remove() it before adding. No
473 * check of @a new_l prev and next pointers is done, so it's safe
474 * to have them uninitialized.
475 *
476 * @note @a relative is considered to be inside @a list, no checks are
477 * done to confirm that and giving nodes from different lists
478 * will lead to problems. Giving NULL @a relative is the same as
479 * eina_list_append().
480 *
481 * @param list existing list head or NULL to create a new list.
482 * @param new_l new list node, must not be NULL.
483 * @param relative reference node, @a new_l will be added after it.
484 *
485 * @return the new list head. Use it and not @a list anymore.
486 */
487EAPI Eina_Inlist *eina_inlist_append_relative(Eina_Inlist *in_list,
488 Eina_Inlist *in_item,
489 Eina_Inlist *in_relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
490
491/**
492 * Add a new node before the given relative item in list.
493 *
494 * @note this code is meant to be fast: appends are O(1) and do not
495 * walk @a list.
496 *
497 * @note @a new_l is considered to be in no list. If it was in another
498 * list before, eina_inlist_remove() it before adding. No
499 * check of @a new_l prev and next pointers is done, so it's safe
500 * to have them uninitialized.
501 *
502 * @note @a relative is considered to be inside @a list, no checks are
503 * done to confirm that and giving nodes from different lists
504 * will lead to problems. Giving NULL @a relative is the same as
505 * eina_list_prepend().
506 *
507 * @param list existing list head or NULL to create a new list.
508 * @param new_l new list node, must not be NULL.
509 * @param relative reference node, @a new_l will be added before it.
510 *
511 * @return the new list head. Use it and not @a list anymore.
512 */
513EAPI Eina_Inlist *eina_inlist_prepend_relative(Eina_Inlist *in_list,
514 Eina_Inlist *in_item,
515 Eina_Inlist *in_relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
516
517/**
518 * Remove node from list.
519 *
520 * @note this code is meant to be fast: appends are O(1) and do not
521 * walk @a list.
522 *
523 * @note @a item is considered to be inside @a list, no checks are
524 * done to confirm that and giving nodes from different lists
525 * will lead to problems, especially if @a item is the head since
526 * it will be different from @a list and the wrong new head will
527 * be returned.
528 *
529 * @param list existing list head, must not be NULL.
530 * @param item existing list node, must not be NULL.
531 *
532 * @return the new list head. Use it and not @a list anymore.
533 */
534EAPI Eina_Inlist *eina_inlist_remove(Eina_Inlist *in_list,
535 Eina_Inlist *in_item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
536
537/**
538 * Find given node in list, returns itself if found, NULL if not.
539 *
540 * @warning this is an expensive call and has O(n) cost, possibly
541 * walking the whole list.
542 *
543 * @param list existing list to search @a item in, must not be NULL.
544 * @param item what to search for, must not be NULL.
545 *
546 * @return @a item if found, NULL if not.
547 */
548EAPI Eina_Inlist *eina_inlist_find(Eina_Inlist *in_list,
549 Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
550
551/**
552 * Move existing node to beginning of list.
553 *
554 * @note this code is meant to be fast: appends are O(1) and do not
555 * walk @a list.
556 *
557 * @note @a item is considered to be inside @a list. No checks are
558 * done to confirm this, and giving nodes from different lists
559 * will lead to problems.
560 *
561 * @param list existing list head or NULL to create a new list.
562 * @param item list node to move to beginning (head), must not be NULL.
563 *
564 * @return the new list head. Use it and not @a list anymore.
565 */
566EAPI Eina_Inlist *eina_inlist_promote(Eina_Inlist *list,
567 Eina_Inlist *item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
568
569/**
570 * Move existing node to end of list.
571 *
572 * @note this code is meant to be fast: appends are O(1) and do not
573 * walk @a list.
574 *
575 * @note @a item is considered to be inside @a list. No checks are
576 * done to confirm this, and giving nodes from different lists
577 * will lead to problems.
578 *
579 * @param list existing list head or NULL to create a new list.
580 * @param item list node to move to end (tail), must not be NULL.
581 *
582 * @return the new list head. Use it and not @a list anymore.
583 */
584EAPI Eina_Inlist *eina_inlist_demote(Eina_Inlist *list,
585 Eina_Inlist *item) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
586
587/**
588 * @brief Get the count of the number of items in a list.
589 *
590 * @param list The list whose count to return.
591 * @return The number of members in the list.
592 *
593 * This function returns how many members @p list contains. If the
594 * list is @c NULL, 0 is returned.
595 *
596 * @warning This is an order-N operation and so the time will depend
597 * on the number of elements on the list, so, it might become
598 * slow for big lists!
599 */
600EAPI unsigned int eina_inlist_count(const Eina_Inlist *list) EINA_WARN_UNUSED_RESULT;
601
602
603/**
604 * @brief Returns a new iterator associated to @a list.
605 *
606 * @param list The list.
607 * @return A new iterator.
608 *
609 * This function returns a newly allocated iterator associated to @p
610 * list. If @p list is @c NULL or the count member of @p list is less
611 * or equal than 0, this function still returns a valid iterator that
612 * will always return false on eina_iterator_next(), thus keeping API
613 * sane.
614 *
615 * If the memory can not be allocated, NULL is returned and
616 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
617 * returned.
618 *
619 * @warning if the list structure changes then the iterator becomes
620 * invalid, and if you add or remove nodes iterator
621 * behavior is undefined, and your program may crash!
622 */
623EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
624
625/**
626 * @brief Returns a new accessor associated to a list.
627 *
628 * @param list The list.
629 * @return A new accessor.
630 *
631 * This function returns a newly allocated accessor associated to
632 * @p list. If @p list is @c NULL or the count member of @p list is
633 * less or equal than 0, this function returns NULL. If the memory can
634 * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
635 * set. Otherwise, a valid accessor is returned.
636 */
637EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
638
639/**
640 * @brief Insert a new node into a sorted list.
641 *
642 * @param list The given linked list, @b must be sorted.
643 * @param item list node to insert, must not be NULL.
644 * @param func The function called for the sort.
645 * @return A list pointer.
646 * @since 1.1.0
647 *
648 * This function inserts item into a linked list assuming it was
649 * sorted and the result will be sorted. If @p list is @c NULLL, item
650 * is returned. On success, a new list pointer that should be
651 * used in place of the one given to this function is
652 * returned. Otherwise, the old pointer is returned. See eina_error_get().
653 *
654 * @note O(log2(n)) comparisons (calls to @p func) average/worst case
655 * performance. As said in eina_list_search_sorted_near_list(),
656 * lists do not have O(1) access time, so walking to the correct node
657 * can be costly, consider worst case to be almost O(n) pointer
658 * dereference (list walk).
659 */
660EAPI Eina_Inlist *eina_inlist_sorted_insert(Eina_Inlist *list, Eina_Inlist *item, Eina_Compare_Cb func) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
661
662/**
663 * @brief Create state with valid data in it.
664 *
665 * @return A valid Eina_Inlist_Sorted_State.
666 * @since 1.1.0
667 *
668 * See eina_inlist_sorted_state_insert() for more information.
669 */
670EAPI Eina_Inlist_Sorted_State *eina_inlist_sorted_state_new(void);
671
672/**
673 * @brief Force an Eina_Inlist_Sorted_State to match the content of a list.
674 *
675 * @param state The state to update
676 * @param list The list to match
677 * @return The number of item in the actually in the list
678 * @since 1.1.0
679 *
680 * See eina_inlist_sorted_state_insert() for more information. This function is
681 * usefull if you didn't use eina_inlist_sorted_state_insert() at some point, but
682 * still think you have a sorted list. It will only correctly work on a sorted list.
683 */
684EAPI int eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list);
685
686/**
687 * @brief Free an Eina_Inlist_Sorted_State.
688 *
689 * @param state The state to destroy
690 * @since 1.1.0
691 *
692 * See eina_inlist_sorted_state_insert() for more information.
693 */
694EAPI void eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state);
695
696/**
697 * @brief Insert a new node into a sorted list.
698 *
699 * @param list The given linked list, @b must be sorted.
700 * @param item list node to insert, must not be NULL.
701 * @param func The function called for the sort.
702 * @param state The current array for initial dichotomic search
703 * @return A list pointer.
704 * @since 1.1.0
705 *
706 * This function inserts item into a linked list assuming @p state match
707 * the exact content order of the list. It use @p state to do a fast
708 * first step dichotomic search before starting to walk the inlist itself.
709 * This make this code much faster than eina_inlist_sorted_insert() as it
710 * doesn't need to walk the list at all. The result is of course a sorted
711 * list with an updated state.. If @p list is @c NULLL, item
712 * is returned. On success, a new list pointer that should be
713 * used in place of the one given to this function is
714 * returned. Otherwise, the old pointer is returned. See eina_error_get().
715 *
716 * @note O(log2(n)) comparisons (calls to @p func) average/worst case
717 * performance. As said in eina_list_search_sorted_near_list(),
718 * lists do not have O(1) access time, so walking to the correct node
719 * can be costly, but this version try to minimize that by making it a
720 * O(log2(n)) for number small number. After n == 256, it start to add a
721 * linear cost again. Consider worst case to be almost O(n) pointer
722 * dereference (list walk).
723 */
724EAPI Eina_Inlist *eina_inlist_sorted_state_insert(Eina_Inlist *list,
725 Eina_Inlist *item,
726 Eina_Compare_Cb func,
727 Eina_Inlist_Sorted_State *state);
728/**
729 * @brief Sort a list according to the ordering func will return.
730 *
731 * @param list The list handle to sort.
732 * @param func A function pointer that can handle comparing the list data
733 * nodes.
734 * @return the new head of list.
735 *
736 * This function sorts all the elements of @p list. @p func is used to
737 * compare two elements of @p list. If @p list or @p func are @c NULL,
738 * this function returns @c NULL.
739 *
740 * @note @b in-place: this will change the given list, so you should
741 * now point to the new list head that is returned by this function.
742 *
743 * @note worst case is O(n * log2(n)) comparisons (calls to func()),
744 * O(n) comparisons average case. That means that for 1,000,000 list
745 * elements, sort will usually do 1,000,000 comparisons, but may do up
746 * to 20,000,000.
747 *
748 * Example:
749 * @code
750 * typedef struct _Sort_Ex Sort_Ex;
751 * struct _Sort_Ex
752 * {
753 * INLIST;
754 * const char *text;
755 * };
756 *
757 * int
758 * sort_cb(const Inlist *l1, const Inlist *l2)
759 * {
760 * const Sort_Ex *x1;
761 * const Sort_Ex *x2;
762 *
763 * x1 = EINA_INLIST_CONTAINER_GET(l1, Sort_Ex);
764 * x2 = EINA_INLIST_CONTAINER_GET(l2, Sort_Ex);
765 *
766 * return(strcmp(x1->text, x2->text));
767 * }
768 * extern Eina_Inlist *list;
769 *
770 * list = eina_inlist_sort(list, sort_cb);
771 * @endcode
772 */
773EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
774
775/* This two macros are helpers for the _FOREACH ones, don't use them */
776#define _EINA_INLIST_OFFSET(ref) ((char *)&(ref)->__in_list - (char *)(ref))
777
778#if !defined(__cplusplus)
779#define _EINA_INLIST_CONTAINER(ref, ptr) (void *)((char *)(ptr) - \
780 _EINA_INLIST_OFFSET(ref))
781#else
782/*
783 * In C++ we can't assign a "type*" pointer to void* so we rely on GCC's typeof
784 * operator.
785 */
786#define _EINA_INLIST_CONTAINER(ref, ptr) (typeof(ref))((char *)(ptr) - \
787 _EINA_INLIST_OFFSET(ref))
788#endif
789
790#define EINA_INLIST_FOREACH(list, l) \
791 for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL); l; \
792 l = (EINA_INLIST_GET(l)->next ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->next) : NULL))
793#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \
794 for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \
795 l; \
796 l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL)
797#define EINA_INLIST_REVERSE_FOREACH(list, l) \
798 for (l = NULL, l = (list ? _EINA_INLIST_CONTAINER(l, list->last) : NULL); \
799 l; l = (EINA_INLIST_GET(l)->prev ? _EINA_INLIST_CONTAINER(l, EINA_INLIST_GET(l)->prev) : NULL))
800
801/**
802 * @}
803 */
804
805/**
806 * @}
807 */
808
809/**
810 * @}
811 */
812
813#endif /*EINA_INLIST_H_*/
diff --git a/libraries/eina/src/include/eina_iterator.h b/libraries/eina/src/include/eina_iterator.h
new file mode 100644
index 0000000..1c8e6ce
--- /dev/null
+++ b/libraries/eina/src/include/eina_iterator.h
@@ -0,0 +1,337 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_ITERATOR_H__
20#define EINA_ITERATOR_H__
21
22#include "eina_config.h"
23
24#include "eina_types.h"
25#include "eina_magic.h"
26
27/**
28 * @page eina_iterator_example Eina_Iterator usage
29 * @dontinclude eina_iterator_01.c
30 *
31 * As always when using eina we need to include it:
32 * @skip #include
33 * @until Eina.h
34 *
35 * Here we a declare an unimpressive @ref Eina_Each_Cb "function" that prints
36 * some data:
37 * @until }
38 * @note Returning EINA_TRUE is important so we don't stop iterating over the
39 * container.
40 *
41 * And here a more interesting function, it uses an iterator to print the
42 * contents of a container. What's interesting about it is that it doesn't care
43 * the type of container, it works for anything that can provide an iterator:
44 * @until }
45 *
46 * And on to our main function were we declare some variables and initialize
47 * eina, nothing too special:
48 * @until eina_init
49 *
50 * Next we populate both an array and a list with our strings, for more details
51 * see @ref eina_list_01_example and @ref eina_array_01_example:
52 * @until }
53 *
54 * And now we create an array and because the first element of the container
55 * doesn't interest us we skip it:
56 * @until iterator_next
57 *
58 * Having our iterator now pointing to interesting data we go ahead and print:
59 * @until print_eina_container
60 *
61 * As always once data with a structure we free it, but just because we can we
62 * do it by asking the iterator for it's container, and then of course free the
63 * iterator itself:
64 * @until eina_iterator_free
65 *
66 * But so far you're not impressed in @ref eina_array_01_example an array is
67 * also printed, so now we go to the cool stuff and use an iterator to do same
68 * stuff to a list:
69 * @until eina_iterator_free
70 * @note The only significant diference to the block above is in the
71 * function used to create the iterator.
72 *
73 * And now we free the list and shut eina down:
74 * @until }
75 */
76
77/**
78 * @page eina_iterator_01_c Eina_Iterator usage
79 * @page eina_iterator_01_c Eina_Iterator usage
80 *
81 * @include eina_iterator_01.c
82 * @example eina_iterator_01.c
83 */
84
85/**
86 * @addtogroup Eina_Iterator_Group Iterator Functions
87 *
88 * @brief These functions manage iterators on containers.
89 *
90 * These functions allow to access elements of a container in a
91 * generic way, without knowing which container is used (a bit like
92 * iterators in the C++ STL). Iterators only allows sequential access
93 * (that is, from an element to the next one). For random access, see
94 * @ref Eina_Accessor_Group.
95 *
96 * An iterator is created from container data types, so no creation
97 * function is available here. An iterator is deleted with
98 * eina_iterator_free(). To get the data and iterate, use
99 * eina_iterator_next(). To call a function on all the elements of a
100 * container, use eina_iterator_foreach().
101 *
102 * Here an @ref eina_iterator_example "example"
103 */
104
105/**
106 * @addtogroup Eina_Content_Access_Group Content Access
107 *
108 * @{
109 */
110
111/**
112 * @defgroup Eina_Iterator_Group Iterator Functions
113 *
114 * @{
115 */
116
117/**
118 * @typedef Eina_Iterator
119 * Abstract type for iterators.
120 */
121typedef struct _Eina_Iterator Eina_Iterator;
122
123/**
124 * @typedef Eina_Iterator_Next_Callback
125 * Type for a callback that returns the next element in a container.
126 */
127typedef Eina_Bool (*Eina_Iterator_Next_Callback)(Eina_Iterator *it, void **data);
128
129/**
130 * @typedef Eina_Iterator_Get_Container_Callback
131 * Type for a callback that returns the container.
132 */
133typedef void *(*Eina_Iterator_Get_Container_Callback)(Eina_Iterator *it);
134
135/**
136 * @typedef Eina_Iterator_Free_Callback
137 * Type for a callback that frees the container.
138 */
139typedef void (*Eina_Iterator_Free_Callback)(Eina_Iterator *it);
140
141/**
142 * @typedef Eina_Iterator_Lock_Callback
143 * Type for a callback that lock the container.
144 */
145typedef Eina_Bool (*Eina_Iterator_Lock_Callback)(Eina_Iterator *it);
146
147/**
148 * @struct _Eina_Iterator
149 * structure of an iterator
150 */
151struct _Eina_Iterator
152{
153#define EINA_ITERATOR_VERSION 1
154 int version; /**< Version of the Iterator API. */
155
156 Eina_Iterator_Next_Callback next EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT; /**< Callback called when a next element is requested. */
157 Eina_Iterator_Get_Container_Callback get_container EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is requested. */
158 Eina_Iterator_Free_Callback free EINA_ARG_NONNULL(1); /**< Callback called when the container is freed. */
159
160 Eina_Iterator_Lock_Callback lock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is locked. */
161 Eina_Iterator_Lock_Callback unlock EINA_WARN_UNUSED_RESULT; /**< Callback called when the container is unlocked. */
162
163#define EINA_MAGIC_ITERATOR 0x98761233
164 EINA_MAGIC
165};
166
167/**
168 * @def FUNC_ITERATOR_NEXT(Function)
169 * Helper macro to cast @p Function to a Eina_Iterator_Next_Callback.
170 */
171#define FUNC_ITERATOR_NEXT(Function) ((Eina_Iterator_Next_Callback)Function)
172
173/**
174 * @def FUNC_ITERATOR_GET_CONTAINER(Function)
175 * Helper macro to cast @p Function to a Eina_Iterator_Get_Container_Callback.
176 */
177#define FUNC_ITERATOR_GET_CONTAINER(Function) ((Eina_Iterator_Get_Container_Callback)Function)
178
179/**
180 * @def FUNC_ITERATOR_FREE(Function)
181 * Helper macro to cast @p Function to a Eina_Iterator_Free_Callback.
182 */
183#define FUNC_ITERATOR_FREE(Function) ((Eina_Iterator_Free_Callback)Function)
184
185/**
186 * @def FUNC_ITERATOR_LOCK(Function)
187 * Helper macro to cast @p Function to a Eina_Iterator_Lock_Callback.
188 */
189#define FUNC_ITERATOR_LOCK(Function) ((Eina_Iterator_Lock_Callback)Function)
190
191
192/**
193 * @brief Free an iterator.
194 *
195 * @param iterator The iterator to free.
196 *
197 * This function frees @p iterator if it is not @c NULL;
198 */
199EAPI void eina_iterator_free(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
200
201
202/**
203 * @brief Return the container of an iterator.
204 *
205 * @param iterator The iterator.
206 * @return The container which created the iterator.
207 *
208 * This function returns the container which created @p iterator. If
209 * @p iterator is @c NULL, this function returns @c NULL.
210 */
211EAPI void *eina_iterator_container_get(Eina_Iterator *iterator) EINA_ARG_NONNULL(1) EINA_PURE;
212
213/**
214 * @brief Return the value of the current element and go to the next one.
215 *
216 * @param iterator The iterator.
217 * @param data The data of the element.
218 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
219 *
220 * This function returns the value of the current element pointed by
221 * @p iterator in @p data, then goes to the next element. If @p
222 * iterator is @c NULL or if a problem occurred, #EINA_FALSE is
223 * returned, otherwise #EINA_TRUE is returned.
224 */
225EAPI Eina_Bool eina_iterator_next(Eina_Iterator *iterator,
226 void **data) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
227
228
229/**
230 * @brief Iterate over the container and execute a callback on each element.
231 *
232 * @param iterator The iterator.
233 * @param callback The callback called on each iteration.
234 * @param fdata The data passed to the callback.
235 *
236 * This function iterates over the elements pointed by @p iterator,
237 * beginning from the current element. For Each element, the callback
238 * @p cb is called with the data @p fdata. If @p iterator is @c NULL,
239 * the function returns immediately. Also, if @p cb returns @c
240 * EINA_FALSE, the iteration stops at that point, if @p cb returns @c EINA_TRUE
241 * the iteration continues.
242 */
243EAPI void eina_iterator_foreach(Eina_Iterator *iterator,
244 Eina_Each_Cb callback,
245 const void *fdata) EINA_ARG_NONNULL(1, 2);
246
247
248/**
249 * @brief Lock the container of the iterator.
250 *
251 * @param iterator The iterator.
252 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
253 *
254 * If the container of the @p iterator permits it, it will be locked. When a
255 * container is locked calling eina_iterator_foreach() on it will return
256 * immediately. If @p iterator is @c NULL or if a problem occurred, #EINA_FALSE
257 * is returned, otherwise #EINA_TRUE is returned. If the container isn't
258 * lockable, it will return EINA_TRUE.
259 *
260 * @warning None of the existing eina data structures are lockable.
261 */
262EAPI Eina_Bool eina_iterator_lock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
263
264/**
265 * @brief Unlock the container of the iterator.
266 *
267 * @param iterator The iterator.
268 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
269 *
270 * If the container of the @p iterator permits it and was previously
271 * locked, it will be unlocked. If @p iterator is @c NULL or if a
272 * problem occurred, #EINA_FALSE is returned, otherwise #EINA_TRUE
273 * is returned. If the container is not lockable, it will return
274 * EINA_TRUE.
275 *
276 * @warning None of the existing eina data structures are lockable.
277 */
278EAPI Eina_Bool eina_iterator_unlock(Eina_Iterator *iterator) EINA_ARG_NONNULL(1);
279
280/**
281 * @def EINA_ITERATOR_FOREACH
282 * @brief Macro to iterate over all elements easily.
283 *
284 * @param itr The iterator to use.
285 * @param data Where to store * data, must be a pointer support getting
286 * its address since * eina_iterator_next() requires a pointer
287 * to pointer!
288 *
289 * This macro is a convenient way to use iterators, very similar to
290 * EINA_LIST_FOREACH().
291 *
292 * This macro can be used for freeing the data of a list, like in the
293 * following example. It has the same goal as the one documented in
294 * EINA_LIST_FOREACH(), but using iterators:
295 *
296 * @code
297 * Eina_List *list;
298 * Eina_Iterator *itr;
299 * char *data;
300 *
301 * // list is already filled,
302 * // its elements are just duplicated strings
303 *
304 * itr = eina_list_iterator_new(list);
305 * EINA_ITERATOR_FOREACH(itr, data)
306 * free(data);
307 * eina_iterator_free(itr);
308 * eina_list_free(list);
309 * @endcode
310 *
311 * @note this example is not optimal algorithm to release a list since
312 * it will walk the list twice, but it serves as an example. For
313 * optimized version use EINA_LIST_FREE()
314 *
315 * @warning The order in which the elements will be traversed depends on the
316 * underlying container and @b shouldn't be relied upon.
317 *
318 * @warning unless explicitly stated in functions returning iterators,
319 * do not modify the iterated object while you walk it, in this
320 * example using lists, do not remove list nodes or you might
321 * crash! This is not a limitiation of iterators themselves,
322 * rather in the iterators implementations to keep them as simple
323 * and fast as possible.
324 */
325#define EINA_ITERATOR_FOREACH(itr, \
326 data) while (eina_iterator_next((itr), \
327 (void **)(void *)&(data)))
328
329/**
330 * @}
331 */
332
333/**
334 * @}
335 */
336
337#endif
diff --git a/libraries/eina/src/include/eina_lalloc.h b/libraries/eina/src/include/eina_lalloc.h
new file mode 100644
index 0000000..dcb8773
--- /dev/null
+++ b/libraries/eina/src/include/eina_lalloc.h
@@ -0,0 +1,60 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_LALLOC_H_
20#define EINA_LALLOC_H_
21
22#include "eina_types.h"
23
24/**
25 * @addtogroup Eina_Tools_Group Tools
26 *
27 * @{
28 */
29
30/**
31 * @defgroup Eina_Lalloc_Group Lazy allocator
32 *
33 * @{
34 */
35
36typedef Eina_Bool (*Eina_Lalloc_Alloc)(void *user_data, int num);
37#define EINA_LALLOC_ALLOC(function) ((Eina_Lalloc_Alloc)function)
38typedef void (*Eina_Lalloc_Free)(void *user_data);
39#define EINA_LALLOC_FREE(function) ((Eina_Lalloc_Free)function)
40
41typedef struct _Eina_Lalloc Eina_Lalloc;
42
43EAPI Eina_Lalloc *eina_lalloc_new(void *data,
44 Eina_Lalloc_Alloc alloc_cb,
45 Eina_Lalloc_Free free_cb,
46 int num_init) EINA_ARG_NONNULL(2, 3);
47EAPI void eina_lalloc_free(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
48EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a,
49 int num) EINA_ARG_NONNULL(1);
50EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a) EINA_ARG_NONNULL(1);
51
52/**
53 * @}
54 */
55
56/**
57 * @}
58 */
59
60#endif /* EINA_LALLOC_H_ */
diff --git a/libraries/eina/src/include/eina_list.h b/libraries/eina/src/include/eina_list.h
new file mode 100644
index 0000000..8a8f25e
--- /dev/null
+++ b/libraries/eina/src/include/eina_list.h
@@ -0,0 +1,1631 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_LIST_H_
20#define EINA_LIST_H_
21
22#include <stdlib.h>
23
24#include "eina_config.h"
25
26#include "eina_types.h"
27#include "eina_iterator.h"
28#include "eina_accessor.h"
29#include "eina_magic.h"
30
31/**
32 * @page list_01_example_page Adding elements to Eina_List
33 * @dontinclude eina_list_01.c
34 *
35 * Creating an @ref Eina_List and adding elements to it is very easy and can be
36 * understood from an example:
37 * First thing is always to include Eina.h, for this example we also
38 * include stdio.h so we can use printf.
39 * @skip #include
40 * @until Eina.h
41 *
42 * Just some boilerplate code, declaring some variable and initializing eina.
43 * @until eina_init
44 * Here we add a sequence of elements to our list. By using append we add
45 * elements to the end of the list, so the list will look like this:@n
46 * @htmlonly
47 * <img src="eina_list_example_01_a.png" style="max-width: 100%;" />
48 * <a href="eina_list_example_01_a.png">Full-size</a>
49 * @endhtmlonly
50 * @image rtf eina_list_example_01_a.png
51 * @image latex eina_list_example_01_a.eps width=\textwidth
52 * @until roslin
53 * There are a couple of interesting things happening here, first is that we are
54 * passing a NULL pointer to the first @ref eina_list_append() call, when this
55 * is done a list is created. The other @b very important detail to notice is
56 * that the return value is attributed to the @a list variable, this needs to
57 * be done every time we use a a function that alters the contents of the list.
58 *
59 * Now that we have a list we some elements in it we can look at it's contents.
60 * @until printf
61 *
62 * There are many ways of accessing elements in the list, including by it's
63 * index:
64 * @until nth
65 * @note It should be noted that the index starts at 0.
66 *
67 * @ref eina_list_append() is not the only way to add elements to a a list. A
68 * common requirement is to add an element in a specific position this can be
69 * accomplished using @ref eina_list_append_relative() and
70 * @ref eina_list_append_relative_list():
71 * @until zarek
72 * First @a "cain" is added after the second element(remember that indexes are
73 * 0 based) and then we add @a "zarek" after @a "cain".
74 *
75 * @ref Eina_List also has prepend analogs to append functions we have used so
76 * far:
77 * @until lampkin
78 * With this additions our list now looks like this:@n
79 * @htmlonly
80 * <img src="eina_list_example_01_b.png" style="max-width: 100%;" />
81 * <a href="eina_list_example_01_b.png">Full-size</a>
82 * @endhtmlonly
83 * @image rtf eina_list_example_01_b.png
84 * @image latex eina_list_example_01_b.eps width=\textwidth
85 *
86 * Once done using the list it needs to be freed, and since we are done with
87 * eina that also need to be shutdown:
88 * @until }
89 *
90 * The full source code can be found on the examples folder
91 * on the @ref eina_list_01_c "eina_list_01.c" file.
92 */
93
94/**
95 * @page eina_list_01_c Adding elements to Eina_List example
96 *
97 * @include eina_list_01.c
98 * @example eina_list_01.c
99 */
100
101/**
102 * @page list_02_example_page Sorting Eina_List elements
103 * @dontinclude eina_list_02.c
104 *
105 * If you don't know how to create lists see
106 * @ref list_01_example_page.
107 *
108 * @skip #include
109 * @until boomer
110 * This is the code we have already seen to create a list. Now if we need to
111 * search the list we can do it like this:
112 * @until return
113 *
114 * However if searching the list multiple times it probably is better to sort
115 * the list since the sorted_search functions are much faster:
116 * @until return
117 *
118 * Once the list is sorted it's not a good idea to use append/prepend functions
119 * since that would add the element in the wrong place, instead elements should
120 * be added with @ref eina_list_sorted_insert():
121 * @until sorted_insert
122 *
123 * A noteworthy use case is adding an element to a list only if it doesn't exist
124 * already, this can accomplished by searching for the element that is closest
125 * to what is being added, and if that doesn't match add:
126 * @until append
127 * @note @ref eina_list_search_sorted_near_list() will tell you not only the
128 * nearest node to what was searched for but how it compares to your term, this
129 * way it is easy to know if you have to add before or after that node.
130 *
131 * It is sometimes useful to get a portion of the list as another list, here we
132 * take every element that comes after "boomer" and split it into "other_list":
133 * @until split_list
134 *
135 * It is also possible to add entire lists of elements using
136 * @ref eina_list_sorted_merge():
137 * @until sorted_merge
138 *
139 * And as always release memory and shutdown eina before ending:
140 * @until }
141 *
142 * The full source code can be found on the examples folder
143 * on the @ref eina_list_02_c "eina_list_02.c" file.
144 */
145
146/**
147 * @page eina_list_02_c Sorting Eina_List elements example
148 *
149 * @include eina_list_02.c
150 * @example eina_list_02.c
151 */
152
153/**
154 * @page list_03_example_page Reordering Eina_List elments
155 * @dontinclude eina_list_03.c
156 *
157 * If you don't know how to create lists see
158 * @ref list_01_example_page.
159 *
160 * We start out with code that should be familiar by now:
161 * @skip #include
162 * @until gemenon
163 *
164 * You can move elements around in a list using @ref eina_list_move() or using
165 * @ref eina_list_promote_list() and @ref eina_list_demote_list() which move a
166 * list node to the head and end of the list respectevely:
167 * @until demote
168 *
169 * Removing elements from a list can be done with ease:
170 * @until sagitarius
171 *
172 * To replace an element in the list it is not necessary to remove it and then
173 * add with the new value, it is possible to just change the value of a node:
174 * @until aquarius
175 *
176 * We will now take a peek to see if the list still has the right number of
177 * elements:
178 * @until printf
179 *
180 * Now that the list is in alphabetical order let's create a copy of it in
181 * reverse order and print every element to see if worked as expected:
182 * @until iterator_free
183 * @note Always remember to free your iterators when done using them.
184 *
185 * And as always release memory and shutdown eina before ending:
186 * @until }
187 *
188 * The full source code can be found on the examples folder
189 * on the @ref eina_list_03_c "eina_list_03.c" file.
190 */
191
192/**
193 * @page eina_list_03_c Reordering Eina_List elments example
194 *
195 * @include eina_list_03.c
196 * @example eina_list_03.c
197 */
198
199/**
200 * @page list_04_example_page Eina_List and memory allocation
201 * @dontinclude eina_list_04.c
202 *
203 * If you don't know how to create lists see
204 * @ref list_01_example_page. In this example we also use
205 * @ref eina_stringshare, however it should be possible to understand the code
206 * regardless of previous knowledge about it.
207 *
208 * Here we have the usual list creation code with a twist, now we are using as
209 * data for the list memory that has to be freed later on.
210 * @skip #include
211 * @until Sharon
212 *
213 * This time we are going to iterate over our list in a different way:
214 * @until printf
215 *
216 * And now we are going to iterate over the list backwards:
217 * @until printf
218 *
219 * And now we need to free up the memory allocated during creation of the list:
220 * @until stringshare_del
221 * @note We don't need to use eina_list_free() since @ref EINA_LIST_FREE takes
222 * care of that.
223 *
224 * And shut everything down:
225 * @until }
226 *
227 * The full source code can be found on the examples folder
228 * on the @ref eina_list_04_c "eina_list_04.c" file.
229 */
230
231/**
232 * @page eina_list_04_c Eina_List and memory allocation example
233 *
234 * @include eina_list_04.c
235 * @example eina_list_04.c
236 */
237
238/**
239 * @addtogroup Eina_List_Group List
240 *
241 * @brief These functions provide double linked list management.
242 *
243 * Eina_List is a doubly linked list. It can store data of any type in the
244 * form of void pointers. It has convenience functions to do all the common
245 * operations which means it should rarely if ever be necessary to directly
246 * access the struct's fields. Nevertheless it can be useful to understand the
247 * inner workings of the data structure being used.
248 *
249 * @ref Eina_List nodes keep references to the previous node, the next node, its
250 * data and to an accounting structure.
251 *
252 * @htmlonly
253 * <img src="eina_list.png" style="max-width: 100%;" />
254 * <a href="eina_list.png">Full-size</a>
255 * @endhtmlonly
256 * @image rtf eina_list.png
257 * @image latex eina_list.eps width=5cm
258 *
259 * @ref Eina_List_Accounting is used to improve the performance of some
260 * functions. It is private and <b>should not</b> be modified. It contains a
261 * reference to the end of the list and the number of elements in the list.
262 *
263 * @note Every function that modifies the contents of the list returns a pointer
264 * to the head of the list and it is essential that this be pointer be used in
265 * any future references to the list.
266 *
267 * Most functions have two versions that have the same effect but operate on
268 * different arguments, the @a plain functions operate over data(eg.:
269 * @ref eina_list_append_relative, @ref eina_list_remove,
270 * @ref eina_list_data_find), the @a list versions of these functions operate
271 * on @ref Eina_List nodes.
272 *
273 * @warning You must @b always use the pointer to the first element of the list
274 * as the list!
275 * @warning You must @b never use a pointer to an element in the middle of the
276 * list as the list!
277 *
278 * Here are some examples of @ref Eina_List usage:
279 * @li @ref list_01_example_page
280 * @li @ref list_02_example_page
281 * @li @ref list_03_example_page
282 * @li @ref list_04_example_page
283 */
284
285/**
286 * @addtogroup Eina_Data_Types_Group Data Types
287 *
288 * @{
289 */
290
291/**
292 * @addtogroup Eina_Containers_Group Containers
293 *
294 * @{
295 */
296
297/**
298 * @defgroup Eina_List_Group List
299 *
300 * @{
301 */
302
303/**
304 * @typedef Eina_List
305 * Type for a generic double linked list.
306 */
307typedef struct _Eina_List Eina_List;
308
309/**
310 * @typedef Eina_List_Accounting
311 * Cache used to store the last element of a list and the number of
312 * elements, for fast access.
313 */
314typedef struct _Eina_List_Accounting Eina_List_Accounting;
315
316/**
317 * @struct _Eina_List
318 * Type for a generic double linked list.
319 */
320struct _Eina_List
321{
322 void *data; /**< Pointer to list element payload */
323 Eina_List *next; /**< Next member in the list */
324 Eina_List *prev; /**< Previous member in the list */
325 Eina_List_Accounting *accounting; /**< Private list accounting info - don't touch */
326
327 EINA_MAGIC
328};
329
330/**
331 * @struct _Eina_List_Accounting
332 * Cache used to store the last element of a list and the number of
333 * elements, for fast access. It is for private used and must not be
334 * touched.
335 */
336struct _Eina_List_Accounting
337{
338 Eina_List *last; /**< Pointer to the last element of the list - don't touch */
339 unsigned int count; /**< Number of elements of the list - don't touch */
340 EINA_MAGIC
341};
342
343
344/**
345 * @brief Append the given data to the given linked list.
346 *
347 * @param list The given list.
348 * @param data The data to append.
349 * @return A list pointer.
350 *
351 * This function appends @p data to @p list. If @p list is @c NULL, a
352 * new list is returned. On success, a new list pointer that should be
353 * used in place of the one given to this function is
354 * returned. Otherwise, the old pointer is returned.
355 *
356 * The following example code demonstrates how to ensure that the
357 * given data has been successfully appended.
358 *
359 * @code
360 * Eina_List *list = NULL;
361 * extern void *my_data;
362 *
363 * list = eina_list_append(list, my_data);
364 * if (eina_error_get())
365 * {
366 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
367 * exit(-1);
368 * }
369 * @endcode
370 *
371 * @warning @p list must be a pointer to the first element of the list(or NULL).
372 */
373EAPI Eina_List *eina_list_append(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
374
375
376/**
377 * @brief Prepends the given data to the given linked list.
378 *
379 * @param list The given list.
380 * @param data The data to prepend.
381 * @return A list pointer.
382 *
383 * This function prepends @p data to @p list. If @p list is @c NULL, a
384 * new list is returned. On success, a new list pointer that should be
385 * used in place of the one given to this function is
386 * returned. Otherwise, the old pointer is returned.
387 *
388 * The following example code demonstrates how to ensure that the
389 * given data has been successfully prepended.
390 *
391 * Example:
392 * @code
393 * Eina_List *list = NULL;
394 * extern void *my_data;
395 *
396 * list = eina_list_prepend(list, my_data);
397 * if (eina_error_get())
398 * {
399 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
400 * exit(-1);
401 * }
402 * @endcode
403 *
404 * @warning @p list must be a pointer to the first element of the list.
405 */
406EAPI Eina_List *eina_list_prepend(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
407
408
409/**
410 * @brief Insert the given data into the given linked list after the specified data.
411 *
412 * @param list The given linked list.
413 * @param data The data to insert.
414 * @param relative The data to insert after.
415 * @return A list pointer.
416 *
417 * This function inserts @p data to @p list after @p relative. If
418 * @p relative is not in the list, @p data is appended to the end of
419 * the list. If @p list is @c NULL, a new list is returned. If there
420 * are multiple instances of @p relative in the list, @p data is
421 * inserted after the first instance.On success, a new list pointer
422 * that should be used in place of the one given to this function is
423 * returned. Otherwise, the old pointer is returned.
424 *
425 * The following example code demonstrates how to ensure that the
426 * given data has been successfully inserted.
427 *
428 * @code
429 * Eina_List *list = NULL;
430 * extern void *my_data;
431 * extern void *relative_member;
432 *
433 * list = eina_list_append(list, relative_member);
434 * if (eina_error_get())
435 * {
436 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
437 * exit(-1);
438 * }
439 * list = eina_list_append_relative(list, my_data, relative_member);
440 * if (eina_error_get())
441 * {
442 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
443 * exit(-1);
444 * }
445 * @endcode
446 *
447 * @warning @p list must be a pointer to the first element of the list.
448 */
449EAPI Eina_List *eina_list_append_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
450
451
452/**
453 * @brief Append a list node to a linked list after the specified member
454 *
455 * @param list The given linked list.
456 * @param data The data to insert.
457 * @param relative The list node to insert after.
458 * @return A list pointer.
459 *
460 * This function inserts @p data to @p list after the list node
461 * @p relative. If @p list or @p relative are @c NULL, @p data is just
462 * appended to @p list using eina_list_append(). If @p list is
463 * @c NULL, a new list is returned. If there are multiple instances
464 * of @p relative in the list, @p data is inserted after the first
465 * instance. On success, a new list pointer that should be used in
466 * place of the one given to this function is returned. Otherwise, the
467 * old pointer is returned.
468 *
469 * @warning @p list must be a pointer to the first element of the list.
470 */
471EAPI Eina_List *eina_list_append_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
472
473
474/**
475 * @brief Prepend a data pointer to a linked list before the specified member
476 *
477 * @param list The given linked list.
478 * @param data The data to insert.
479 * @param relative The data to insert before.
480 * @return A list pointer.
481 *
482 * This function inserts @p data to @p list before @p relative. If
483 * @p relative is not in the list, @p data is prepended to the list
484 * with eina_list_prepend(). If @p list is @c NULL, a new list is
485 * returned. If there are multiple instances of @p relative in the
486 * list, @p data is inserted before the first instance. On success, a
487 * new list pointer that should be used in place of the one given to
488 * this function is returned. Otherwise, the old pointer is returned.
489 *
490 * The following code example demonstrates how to ensure that the
491 * given data has been successfully inserted.
492 *
493 * @code
494 * Eina_List *list = NULL;
495 * extern void *my_data;
496 * extern void *relative_member;
497 *
498 * list = eina_list_append(list, relative_member);
499 * if (eina_error_get_error())
500 * {
501 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
502 * exit(-1);
503 * }
504 * list = eina_list_prepend_relative(list, my_data, relative_member);
505 * if (eina_error_get())
506 * {
507 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
508 * exit(-1);
509 * }
510 * @endcode
511 *
512 * @warning @p list must be a pointer to the first element of the list.
513 */
514EAPI Eina_List *eina_list_prepend_relative(Eina_List *list, const void *data, const void *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
515
516
517/**
518 * @brief Prepend a list node to a linked list before the specified member
519 *
520 * @param list The given linked list.
521 * @param data The data to insert.
522 * @param relative The list node to insert before.
523 * @return A list pointer.
524 *
525 * This function inserts @p data to @p list before the list node
526 * @p relative. If @p list or @p relative are @c NULL, @p data is just
527 * prepended to @p list using eina_list_prepend(). If @p list is
528 * @c NULL, a new list is returned. If there are multiple instances
529 * of @p relative in the list, @p data is inserted before the first
530 * instance. On success, a new list pointer that should be used in
531 * place of the one given to this function is returned. Otherwise, the
532 * old pointer is returned.
533 *
534 * @warning @p list must be a pointer to the first element of the list.
535 */
536EAPI Eina_List *eina_list_prepend_relative_list(Eina_List *list, const void *data, Eina_List *relative) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
537
538
539/**
540 * @brief Insert a new node into a sorted list.
541 *
542 * @param list The given linked list, @b must be sorted.
543 * @param func The function called for the sort.
544 * @param data The data to insert sorted.
545 * @return A list pointer.
546 *
547 * This function inserts values into a linked list assuming it was
548 * sorted and the result will be sorted. If @p list is @c NULLL, a new
549 * list is returned. On success, a new list pointer that should be
550 * used in place of the one given to this function is
551 * returned. Otherwise, the old pointer is returned. See eina_error_get().
552 *
553 * @note O(log2(n)) comparisons (calls to @p func) average/worst case
554 * performance as it uses eina_list_search_sorted_near_list() and thus
555 * is bounded to that. As said in eina_list_search_sorted_near_list(),
556 * lists do not have O(1) access time, so walking to the correct node
557 * can be costly, consider worst case to be almost O(n) pointer
558 * dereference (list walk).
559 *
560 * @warning @p list must be a pointer to the first element of the list.
561 */
562EAPI Eina_List *eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
563
564
565/**
566 * @brief Remove the first instance of the specified data from the given list.
567 *
568 * @param list The given list.
569 * @param data The specified data.
570 * @return A list pointer.
571 *
572 * This function removes the first instance of @p data from
573 * @p list. If the specified data is not in the given list (tihis
574 * include the case where @p data is @c NULL), nothing is done. If
575 * @p list is @c NULL, @c NULL is returned, otherwise a new list
576 * pointer that should be used in place of the one passed to this
577 * function.
578 *
579 * @warning @p list must be a pointer to the first element of the list.
580 */
581EAPI Eina_List *eina_list_remove(Eina_List *list, const void *data) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
582
583
584/**
585 * @brief Remove the specified data.
586 *
587 * @param list The given linked list.
588 * @param remove_list The list node which is to be removed.
589 * @return A list pointer.
590 *
591 * This function removes the list node @p remove_list from @p list and
592 * frees the list node structure @p remove_list. If @p list is
593 * @c NULL, this function returns @c NULL. If @p remove_list is
594 * @c NULL, it returns @p list, otherwise, a new list pointer that
595 * should be used in place of the one passed to this function.
596 *
597 * The following code gives an example (notice we use EINA_LIST_FOREACH
598 * instead of EINA_LIST_FOREACH_SAFE because we stop the loop after
599 * removing the current node).
600 *
601 * @code
602 * extern Eina_List *list;
603 * Eina_List *l;
604 * extern void *my_data;
605 * void *data
606 *
607 * EINA_LIST_FOREACH(list, l, data)
608 * {
609 * if (data == my_data)
610 * {
611 * list = eina_list_remove_list(list, l);
612 * break;
613 * }
614 * }
615 * @endcode
616 *
617 * @warning @p list must be a pointer to the first element of the list.
618 */
619EAPI Eina_List *eina_list_remove_list(Eina_List *list, Eina_List *remove_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
620
621
622/**
623 * @brief Move the specified data to the head of the list.
624 *
625 * @param list The list handle to move the data.
626 * @param move_list The list node to move.
627 * @return A new list handle to replace the old one
628 *
629 * This function move @p move_list to the front of @p list. If list is
630 * @c NULL, @c NULL is returned. If @p move_list is @c NULL,
631 * @p list is returned. Otherwise, a new list pointer that should be
632 * used in place of the one passed to this function.
633 *
634 * Example:
635 * @code
636 * extern Eina_List *list;
637 * Eina_List *l;
638 * extern void *my_data;
639 * void *data;
640 *
641 * EINA_LIST_FOREACH(list, l, data)
642 * {
643 * if (data == my_data)
644 * {
645 * list = eina_list_promote_list(list, l);
646 * break;
647 * }
648 * }
649 * @endcode
650 *
651 * @warning @p list must be a pointer to the first element of the list.
652 */
653EAPI Eina_List *eina_list_promote_list(Eina_List *list, Eina_List *move_list) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
654
655
656/**
657 * @brief Move the specified data to the tail of the list.
658 *
659 * @param list The list handle to move the data.
660 * @param move_list The list node to move.
661 * @return A new list handle to replace the old one
662 *
663 * This function move @p move_list to the back of @p list. If list is
664 * @c NULL, @c NULL is returned. If @p move_list is @c NULL,
665 * @p list is returned. Otherwise, a new list pointer that should be
666 * used in place of the one passed to this function.
667 *
668 * Example:
669 * @code
670 * extern Eina_List *list;
671 * Eina_List *l;
672 * extern void *my_data;
673 * void *data;
674 *
675 * EINA_LIST_FOREACH(list, l, data)
676 * {
677 * if (data == my_data)
678 * {
679 * list = eina_list_demote_list(list, l);
680 * break;
681 * }
682 * }
683 * @endcode
684 *
685 * @warning @p list must be a pointer to the first element of the list.
686 */
687EAPI Eina_List *eina_list_demote_list(Eina_List *list, Eina_List *move_list);
688
689
690/**
691 * @brief Find a member of a list and return the member.
692 *
693 * @param list The list to search for a data.
694 * @param data The data pointer to find in the list.
695 * @return The found member data pointer if found, @c NULL otherwise.
696 *
697 * This function searches in @p list from beginning to end for the
698 * first member whose data pointer is @p data. If it is found, @p data
699 * will be returned, otherwise NULL will be returned.
700 *
701 * Example:
702 * @code
703 * extern Eina_List *list;
704 * extern void *my_data;
705 *
706 * if (eina_list_data_find(list, my_data) == my_data)
707 * {
708 * printf("Found member %p\n", my_data);
709 * }
710 * @endcode
711 *
712 * @warning @p list must be a pointer to the first element of the list.
713 */
714EAPI void *eina_list_data_find(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
715
716/**
717 * @brief Find a member of a list and return the list node containing that member.
718 *
719 * @param list The list to search for data.
720 * @param data The data pointer to find in the list.
721 * @return The found members list node on success, @c NULL otherwise.
722 *
723 * This function searches in @p list from beginning to end for the
724 * first member whose data pointer is @p data. If it is found, the
725 * list node containing the specified member is returned, otherwise
726 * @c NULL is returned.
727 *
728 * @warning @p list must be a pointer to the first element of the list.
729 */
730EAPI Eina_List *eina_list_data_find_list(const Eina_List *list, const void *data) EINA_PURE EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT;
731
732
733/**
734 * @brief Move a data pointer from one list to another
735 *
736 * @param to The list to move the data to
737 * @param from The list to move from
738 * @param data The data to move
739 * @return #EINA_TRUE on success, else #EINA_FALSE
740 *
741 * This function is a shortcut for doing the following:
742 * to = eina_list_append(to, data);
743 * from = eina_list_remove(from, data);
744 *
745 * @warning @p list must be a pointer to the first element of the list.
746 */
747EAPI Eina_Bool eina_list_move(Eina_List **to, Eina_List **from, void *data);
748
749/**
750 * @brief Move a list node from one list to another
751 *
752 * @param to The list to move the data to
753 * @param from The list to move from
754 * @param data The list node containing the data to move
755 * @return #EINA_TRUE on success, else #EINA_FALSE
756 *
757 * This function is a shortcut for doing the following:
758 * to = eina_list_append(to, data->data);
759 * from = eina_list_remove_list(from, data);
760 *
761 * @warning @p list must be a pointer to the first element of the list.
762 */
763EAPI Eina_Bool eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data);
764
765
766/**
767 * @brief Free an entire list and all the nodes, ignoring the data contained.
768
769 * @param list The list to free
770 * @return A NULL pointer
771 *
772 * This function frees all the nodes of @p list. It does not free the
773 * data of the nodes. To free them, use #EINA_LIST_FREE.
774 */
775EAPI Eina_List *eina_list_free(Eina_List *list);
776
777
778/**
779 * @brief Get the nth member's data pointer in a list.
780 *
781 * @param list The list to get the specified member number from.
782 * @param n The number of the element (0 being the first).
783 * @return The data pointer stored in the specified element.
784 *
785 * This function returns the data pointer of element number @p n, in
786 * the @p list. The first element in the array is element number 0. If
787 * the element number @p n does not exist, @c NULL is
788 * returned. Otherwise, the data of the found element is returned.
789 *
790 * @note Worst case is O(n).
791 *
792 * @warning @p list must be a pointer to the first element of the list.
793 */
794EAPI void *eina_list_nth(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT;
795
796
797/**
798 * @brief Get the nth member's list node in a list.
799 *
800 * @param list The list to get the specfied member number from.
801 * @param n The number of the element (0 being the first).
802 * @return The list node stored in the numbered element.
803 *
804 * This function returns the list node of element number @p n, in
805 * @p list. The first element in the array is element number 0. If the
806 * element number @p n does not exist or @p list is @c NULL or @p n is
807 * greater than the count of elements in @p list minus 1, @c NULL is
808 * returned. Otherwise the list node stored in the numbered element is
809 * returned.
810 *
811 * @note Worst case is O(n).
812 *
813 * @warning @p list must be a pointer to the first element of the list.
814 */
815EAPI Eina_List *eina_list_nth_list(const Eina_List *list, unsigned int n) EINA_PURE EINA_WARN_UNUSED_RESULT;
816
817
818/**
819 * @brief Reverse all the elements in the list.
820 *
821 * @param list The list to reverse.
822 * @return The list head after it has been reversed.
823 *
824 * This function reverses the order of all elements in @p list, so the
825 * last member is now first, and so on. If @p list is @c NULL, this
826 * functon returns @c NULL.
827 *
828 * @note @b in-place: this will change the given list, so you should
829 * now point to the new list head that is returned by this function.
830 *
831 * @warning @p list must be a pointer to the first element of the list.
832 *
833 * @see eina_list_reverse_clone()
834 * @see eina_list_iterator_reversed_new()
835 */
836EAPI Eina_List *eina_list_reverse(Eina_List *list) EINA_WARN_UNUSED_RESULT;
837
838
839/**
840 * @brief Clone (copy) all the elements in the list in reverse order.
841 *
842 * @param list The list to reverse.
843 * @return The new list that has been reversed.
844 *
845 * This function reverses the order of all elements in @p list, so the
846 * last member is now first, and so on. If @p list is @c NULL, this
847 * functon returns @c NULL. This returns a copy of the given list.
848 *
849 * @note @b copy: this will copy the list and you should then
850 * eina_list_free() when it is not required anymore.
851 *
852 * @warning @p list must be a pointer to the first element of the list.
853 *
854 * @see eina_list_reverse()
855 * @see eina_list_clone()
856 */
857EAPI Eina_List *eina_list_reverse_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
858
859
860/**
861 * @brief Clone (copy) all the elements in the list in exactly same order.
862 *
863 * @param list The list to clone.
864 * @return The new list that has been cloned.
865 *
866 * This function clone in order of all elements in @p list. If @p list
867 * is @c NULL, this functon returns @c NULL. This returns a copy of
868 * the given list.
869 *
870 * @note @b copy: this will copy the list and you should then
871 * eina_list_free() when it is not required anymore.
872 *
873 * @warning @p list must be a pointer to the first element of the list.
874 *
875 * @see eina_list_reverse_clone()
876 */
877EAPI Eina_List *eina_list_clone(const Eina_List *list) EINA_WARN_UNUSED_RESULT;
878
879
880/**
881 * @brief Sort a list according to the ordering func will return.
882 *
883 * @param list The list handle to sort.
884 * @param size The length of the list to sort.
885 * @param func A function pointer that can handle comparing the list data
886 * nodes.
887 * @return the new head of list.
888 *
889 * This function sorts @p list. @p size if the number of the first
890 * element to sort. If @p size is 0 or greater than the number of
891 * elements in @p list, all the elements are sorted. @p func is used to
892 * compare two elements of @p list. If @p list or @p func are @c NULL,
893 * this function returns @c NULL.
894 *
895 * @note @b in-place: this will change the given list, so you should
896 * now point to the new list head that is returned by this function.
897 *
898 * @note worst case is O(n * log2(n)) comparisons (calls to func()),
899 * O(n) comparisons average case. That means that for 1,000,000 list
900 * elements, sort will usually do 1,000,000 comparisons, but may do up
901 * to 20,000,000.
902 *
903 * Example:
904 * @code
905 * int
906 * sort_cb(const void *d1, const void *d2)
907 * {
908 * const char *txt = d1;
909 * const char *txt2 = d2;
910 *
911 * if(!txt) return(1);
912 * if(!txt2) return(-1);
913 *
914 * return(strcmp(txt, txt2));
915 * }
916 * extern Eina_List *list;
917 *
918 * list = eina_list_sort(list, eina_list_count(list), sort_cb);
919 * @endcode
920 *
921 * @warning @p list must be a pointer to the first element of the list.
922 */
923EAPI Eina_List *eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
924
925
926/**
927 * @brief Merge two list.
928 *
929 * @param left Head list to merge.
930 * @param right Tail list to merge.
931 * @return A new merged list.
932 *
933 * This function puts right at the end of left and return the head.
934 *
935 * Both left and right does not exist anymore after the merge.
936 *
937 * @note merge cost is O(n), being @b n the size of the smallest
938 * list. This is due the need to fix accounting of that segment,
939 * making count and last access O(1).
940 *
941 * @warning @p list must be a pointer to the first element of the list.
942 */
943EAPI Eina_List *eina_list_merge(Eina_List *left, Eina_List *right) EINA_WARN_UNUSED_RESULT;
944
945
946/**
947 * @brief Merge two sorted list according to the ordering func will return.
948 *
949 * @param left First list to merge.
950 * @param right Second list to merge.
951 * @param func A function pointer that can handle comparing the list data
952 * nodes.
953 * @return A new sorted list.
954 *
955 * This function compares the head of @p left and @p right, and choose the
956 * smallest one to be head of the returned list. It will continue this process
957 * for all entry of both list.
958 *
959 * Both left and right does not exist anymore after the merge.
960 * If @p func is NULL, it will return NULL.
961 *
962 * Example:
963 * @code
964 * int
965 * sort_cb(void *d1, void *d2)
966 * {
967 * const char *txt = NULL;
968 * const char *txt2 = NULL;
969 *
970 * if(!d1) return(1);
971 * if(!d2) return(-1);
972 *
973 * return(strcmp((const char*)d1, (const char*)d2));
974 * }
975 * extern Eina_List *sorted1;
976 * extern Eina_List *sorted2;
977 *
978 * list = eina_list_sorted_merge(sorted1, sorted2, sort_cb);
979 * @endcode
980 *
981 * @warning @p list must be a pointer to the first element of the list.
982 */
983EAPI Eina_List *eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func) EINA_ARG_NONNULL(3) EINA_WARN_UNUSED_RESULT;
984
985
986/**
987 * @brief Split a list into 2 lists.
988 *
989 * @param list List to split.
990 * @param relative The list will be split after @p relative.
991 * @param right The head of the new right list.
992 * @return The new left list
993 *
994 * This function splits @p list into two lists ( left and right ) after the node @p relative. @p Relative
995 * will become the last node of the left list. If @p list or @p right are NULL list is returns.
996 * If @p relative is NULL right is set to @p list and NULL is returns.
997 * If @p relative is the last node of @p list list is returns and @p right is set to NULL.
998 *
999 * list does not exist anymore after the split.
1000 *
1001 * @warning @p list must be a pointer to the first element of the list.
1002 */
1003EAPI Eina_List *eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) EINA_WARN_UNUSED_RESULT;
1004
1005
1006/**
1007 * @brief Returns node nearest to data is in the sorted list.
1008 *
1009 * @param list The list to search for data, @b must be sorted.
1010 * @param func A function pointer that can handle comparing the list data nodes.
1011 * @param data reference value to search.
1012 * @param result_cmp if provided returns the result of
1013 * func(node->data, data) node being the last (returned) node. If node
1014 * was found (exact match), then it is 0. If returned node is smaller
1015 * than requested data, it is less than 0 and if it's bigger it's
1016 * greater than 0. It is the last value returned by func().
1017 * @return the nearest node, NULL if not found.
1018 *
1019 * This function searches for a node containing @p data as it's data in @p list,
1020 * if such a node exists it will be returned and @p result_cmp will be @p 0. If
1021 * the data of no node in @p list is equal to @p data, the node with the nearest
1022 * value to that will be returned and @p result_cmp will be the return value of
1023 * @p func with @p data and the returned node's data as arguments.
1024 *
1025 * This function is useful for inserting an element in the list only in case it
1026 * isn't already present in the list, the naive way of doing this would be:
1027 * @code
1028 * void *ptr = eina_list_data_find(list, "my data");
1029 * if (!ptr)
1030 * eina_list_sorted_insert(list, "my data");
1031 * @endcode
1032 *
1033 * However this has the downside of walking through the list twice, once to
1034 * check if the data is already present and another to insert the element in the
1035 * corret position. This can be done more eficiently:
1036 * @code
1037 * int cmp_result;
1038 * l = eina_list_search_sorted_near_list(list, cmp_func, "my data",
1039 * &cmp_result);
1040 * if (cmp_result > 0)
1041 * list = eina_list_prepend_relative_list(list, "my data", l);
1042 * else if (cmp_result < 0)
1043 * list = eina_list_append_relative_list(list, "my data", l);
1044 * @endcode
1045 *
1046 * If @a cmp_result is 0 the element is already in the list and we need not
1047 * insert it, if @a cmp_result is greater than zero @a "my @a data" needs to
1048 * come after @a l(the nearest node present), if less than zero before.
1049 *
1050 * @note O(log2(n)) average/worst case performance, for 1,000,000
1051 * elements it will do a maximum of 20 comparisons. This is much
1052 * faster than the 1,000,000 comparisons made naively walking the list
1053 * from head to tail, so depending on the number of searches and
1054 * insertions, it may be worth to eina_list_sort() the list and do the
1055 * searches later. As lists do not have O(1) access time, walking to
1056 * the correct node can be costly, consider worst case to be almost
1057 * O(n) pointer dereference (list walk).
1058 *
1059 * @warning @p list must be a pointer to the first element of the list.
1060 *
1061 * @see eina_list_search_sorted_list()
1062 * @see eina_list_sort()
1063 * @see eina_list_sorted_merge()
1064 */
1065EAPI Eina_List *eina_list_search_sorted_near_list(const Eina_List *list, Eina_Compare_Cb func, const void *data, int *result_cmp);
1066
1067
1068/**
1069 * @brief Returns node if data is in the sorted list.
1070 *
1071 * @param list The list to search for data, @b must be sorted.
1072 * @param func A function pointer that can handle comparing the list data nodes.
1073 * @param data reference value to search.
1074 * @return the node if func(node->data, data) == 0, NULL if not found.
1075 *
1076 * This can be used to check if some value is inside the list and get
1077 * the container node in this case. It should be used when list is
1078 * known to be sorted as it will do binary search for results.
1079 *
1080 * Example: imagine user gives a string, you check if it's in the list
1081 * before duplicating its contents.
1082 *
1083 * @note O(log2(n)) average/worst case performance, for 1,000,000
1084 * elements it will do a maximum of 20 comparisons. This is much
1085 * faster than the 1,000,000 comparisons made by
1086 * eina_list_search_unsorted_list(), so depending on the number of
1087 * searches and insertions, it may be worth to eina_list_sort() the
1088 * list and do the searches later. As said in
1089 * eina_list_search_sorted_near_list(), lists do not have O(1) access
1090 * time, so walking to the correct node can be costly, consider worst
1091 * case to be almost O(n) pointer dereference (list walk).
1092 *
1093 * @warning @p list must be a pointer to the first element of the list.
1094 *
1095 * @see eina_list_search_sorted()
1096 * @see eina_list_sort()
1097 * @see eina_list_sorted_merge()
1098 * @see eina_list_search_unsorted_list()
1099 * @see eina_list_search_sorted_near_list()
1100 */
1101EAPI Eina_List *eina_list_search_sorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
1102
1103
1104/**
1105 * @brief Returns node data if it is in the sorted list.
1106 *
1107 * @param list The list to search for data, @b must be sorted.
1108 * @param func A function pointer that can handle comparing the list data nodes.
1109 * @param data reference value to search.
1110 * @return the node value (@c node->data) if func(node->data, data) == 0,
1111 * NULL if not found.
1112 *
1113 * This can be used to check if some value is inside the list and get
1114 * the existing instance in this case. It should be used when list is
1115 * known to be sorted as it will do binary search for results.
1116 *
1117 * Example: imagine user gives a string, you check if it's in the list
1118 * before duplicating its contents.
1119 *
1120 * @note O(log2(n)) average/worst case performance, for 1,000,000
1121 * elements it will do a maximum of 20 comparisons. This is much
1122 * faster than the 1,000,000 comparisons made by
1123 * eina_list_search_unsorted(), so depending on the number of
1124 * searches and insertions, it may be worth to eina_list_sort() the
1125 * list and do the searches later. As said in
1126 * eina_list_search_sorted_near_list(), lists do not have O(1) access
1127 * time, so walking to the correct node can be costly, consider worst
1128 * case to be almost O(n) pointer dereference (list walk).
1129 *
1130 * @warning @p list must be a pointer to the first element of the list.
1131 *
1132 * @see eina_list_search_sorted_list()
1133 * @see eina_list_sort()
1134 * @see eina_list_sorted_merge()
1135 * @see eina_list_search_unsorted_list()
1136 */
1137EAPI void *eina_list_search_sorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
1138
1139
1140/**
1141 * @brief Returns node if data is in the unsorted list.
1142 *
1143 * @param list The list to search for data, may be unsorted.
1144 * @param func A function pointer that can handle comparing the list data nodes.
1145 * @param data reference value to search.
1146 * @return the node if func(node->data, data) == 0, NULL if not found.
1147 *
1148 * This can be used to check if some value is inside the list and get
1149 * the container node in this case.
1150 *
1151 * Example: imagine user gives a string, you check if it's in the list
1152 * before duplicating its contents.
1153 *
1154 * @note this is expensive and may walk the whole list, it's order-N,
1155 * that is for 1,000,000 elements list it may walk and compare
1156 * 1,000,000 nodes.
1157 *
1158 * @warning @p list must be a pointer to the first element of the list.
1159 *
1160 * @see eina_list_search_sorted_list()
1161 * @see eina_list_search_unsorted()
1162 */
1163EAPI Eina_List *eina_list_search_unsorted_list(const Eina_List *list, Eina_Compare_Cb func, const void *data);
1164
1165
1166/**
1167 * @brief Returns node data if it is in the unsorted list.
1168 *
1169 * @param list The list to search for data, may be unsorted.
1170 * @param func A function pointer that can handle comparing the list data nodes.
1171 * @param data reference value to search.
1172 * @return the node value (@c node->data) if func(node->data, data) == 0,
1173 * NULL if not found.
1174 *
1175 * This can be used to check if some value is inside the list and get
1176 * the existing instance in this case.
1177 *
1178 * Example: imagine user gives a string, you check if it's in the list
1179 * before duplicating its contents.
1180 *
1181 * @note this is expensive and may walk the whole list, it's order-N,
1182 * that is for 1,000,000 elements list it may walk and compare
1183 * 1,000,000 nodes.
1184 *
1185 * @warning @p list must be a pointer to the first element of the list.
1186 *
1187 * @see eina_list_search_sorted()
1188 * @see eina_list_search_unsorted_list()
1189 */
1190EAPI void *eina_list_search_unsorted(const Eina_List *list, Eina_Compare_Cb func, const void *data);
1191
1192/**
1193 * @brief Get the last list node in the list.
1194 *
1195 * @param list The list to get the last list node from.
1196 * @return The last list node in the list.
1197 *
1198 * This function returns the last list node in the list @p list. If
1199 * @p list is @c NULL or empty, @c NULL is returned.
1200 *
1201 * This is a order-1 operation (it takes the same short time
1202 * regardless of the length of the list).
1203 *
1204 * @warning @p list must be a pointer to the first element of the list.
1205 */
1206static inline Eina_List *eina_list_last(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT;
1207
1208/**
1209 * @brief Get the next list node after the specified list node.
1210 *
1211 * @param list The list node to get the next list node from
1212 * @return The next list node on success, @c NULL otherwise.
1213 *
1214 * This function returns the next list node after the current one in
1215 * @p list. It is equivalent to list->next. If @p list is @c NULL or
1216 * if no next list node exists, it returns @c NULL.
1217 *
1218 * @warning @p list must be a pointer to the first element of the list.
1219 */
1220static inline Eina_List *eina_list_next(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT;
1221
1222/**
1223 * @brief Get the previous list node before the specified list node.
1224 *
1225 * @param list The list node to get the previous list node from.
1226 * @return The previous list node o success, @c NULL otherwise.
1227 * if no previous list node exists
1228 *
1229 * This function returns the previous list node before the current one
1230 * in @p list. It is equivalent to list->prev. If @p list is @c NULL or
1231 * if no previous list node exists, it returns @c NULL.
1232 *
1233 * @warning @p list must be a pointer to the first element of the list.
1234 */
1235static inline Eina_List *eina_list_prev(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT;
1236
1237/**
1238 * @brief Get the list node data member.
1239 *
1240 * @param list The list node to get the data member of.
1241 * @return The data member from the list node.
1242 *
1243 * This function returns the data member of the specified list node @p
1244 * list. It is equivalent to list->data. If @p list is @c NULL, this
1245 * function returns @c NULL.
1246 *
1247 * @warning @p list must be a pointer to the first element of the list.
1248 */
1249static inline void *eina_list_data_get(const Eina_List *list) EINA_PURE EINA_WARN_UNUSED_RESULT;
1250
1251/**
1252 * @brief Set the list node data member.
1253 *
1254 * @param list The list node to get the data member of.
1255 * @param data The data member to the list node.
1256 * @return The previous data value.
1257 *
1258 * This function set the data member @p data of the specified list node
1259 * @p list. It returns the previous data of the node. If @p list is
1260 * @c NULL, this function returns @c NULL.
1261 *
1262 * @warning @p list must be a pointer to the first element of the list.
1263 */
1264static inline void *eina_list_data_set(Eina_List *list, const void *data);
1265
1266/**
1267 * @brief Get the count of the number of items in a list.
1268 *
1269 * @param list The list whose count to return.
1270 * @return The number of members in the list.
1271 *
1272 * This function returns how many members @p list contains. If the
1273 * list is @c NULL, 0 is returned.
1274 *
1275 * NB: This is an order-1 operation and takes the same time regardless
1276 * of the length of the list.
1277 *
1278 * @warning @p list must be a pointer to the first element of the list.
1279 */
1280static inline unsigned int eina_list_count(const Eina_List *list) EINA_PURE;
1281
1282
1283/**
1284 * @brief Returned a new iterator associated to a list.
1285 *
1286 * @param list The list.
1287 * @return A new iterator.
1288 *
1289 * This function returns a newly allocated iterator associated to @p
1290 * list. If @p list is @c NULL or the count member of @p list is less
1291 * or equal than 0, this function still returns a valid iterator that
1292 * will always return false on eina_iterator_next(), thus keeping API
1293 * sane.
1294 *
1295 * If the memory can not be allocated, NULL is returned and
1296 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
1297 * returned.
1298 *
1299 * @warning @p list must be a pointer to the first element of the list.
1300 *
1301 * @warning if the list structure changes then the iterator becomes
1302 * invalid! That is, if you add or remove nodes this iterator
1303 * behavior is undefined and your program may crash!
1304 */
1305EAPI Eina_Iterator *eina_list_iterator_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
1306
1307
1308/**
1309 * @brief Returned a new reversed iterator associated to a list.
1310 *
1311 * @param list The list.
1312 * @return A new iterator.
1313 *
1314 * This function returns a newly allocated iterator associated to @p
1315 * list. If @p list is @c NULL or the count member of @p list is less
1316 * or equal than 0, this function still returns a valid iterator that
1317 * will always return false on eina_iterator_next(), thus keeping API
1318 * sane.
1319 *
1320 * Unlike eina_list_iterator_new(), this will walk the list backwards.
1321 *
1322 * If the memory can not be allocated, NULL is returned and
1323 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
1324 * returned.
1325 *
1326 * @warning @p list must be a pointer to the first element of the list.
1327 *
1328 * @warning if the list structure changes then the iterator becomes
1329 * invalid! That is, if you add or remove nodes this iterator
1330 * behavior is undefined and your program may crash!
1331 */
1332EAPI Eina_Iterator *eina_list_iterator_reversed_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
1333
1334
1335/**
1336 * @brief Returned a new accessor associated to a list.
1337 *
1338 * @param list The list.
1339 * @return A new accessor.
1340 *
1341 * This function returns a newly allocated accessor associated to
1342 * @p list. If @p list is @c NULL or the count member of @p list is
1343 * less or equal than 0, this function returns NULL. If the memory can
1344 * not be allocated, NULL is returned and #EINA_ERROR_OUT_OF_MEMORY is
1345 * set. Otherwise, a valid accessor is returned.
1346 *
1347 * @warning @p list must be a pointer to the first element of the list.
1348 */
1349EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List *list) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
1350
1351/**
1352 * @def EINA_LIST_FOREACH
1353 * @brief Macro to iterate over a list.
1354 *
1355 * @param list The list to iterate over.
1356 * @param l A list that is used as an iterator and points to the current node.
1357 * @param data Current item's data.
1358 *
1359 * This macro iterates over @p list from the first element to
1360 * the last. @p data is the data related to the current element.
1361 * @p l is an #Eina_List used as the list iterator.
1362 *
1363 * The following diagram ilustrates this macro iterating over a list of four
1364 * elements("one", "two", "three" and "four"):
1365 * @htmlonly
1366 * <img src="eina-list-foreach.png" style="max-width: 100%;" />
1367 * <a href="eina-list-foreach.png">Full-size</a>
1368 * @endhtmlonly
1369 * @image latex eina-list-foreach.eps width=\textwidth
1370 *
1371 * It can be used to free list data, as in the following example:
1372 *
1373 * @code
1374 * Eina_List *list;
1375 * Eina_List *l;
1376 * char *data;
1377 *
1378 * // list is already filled,
1379 * // its elements are just duplicated strings,
1380 * // EINA_LIST_FOREACH will be used to free those strings
1381 *
1382 * EINA_LIST_FOREACH(list, l, data)
1383 * free(data);
1384 * eina_list_free(list);
1385 * @endcode
1386 *
1387 * @note This is not the optimal way to release memory allocated to
1388 * a list, since it iterates over the list twice.
1389 * For an optimized algorithm, use EINA_LIST_FREE().
1390 *
1391 * @warning @p list must be a pointer to the first element of the list.
1392 *
1393 * @warning Be careful when deleting list nodes.
1394 * If you remove the current node and continue iterating,
1395 * the code will fail because the macro will not be able
1396 * to get the next node. Notice that it's OK to remove any
1397 * node if you stop the loop after that.
1398 * For destructive operations such as this, consider
1399 * using EINA_LIST_FOREACH_SAFE().
1400 */
1401#define EINA_LIST_FOREACH(list, l, data) \
1402 for (l = list, \
1403 data = eina_list_data_get(l); \
1404 l; \
1405 l = eina_list_next(l), \
1406 data = eina_list_data_get(l))
1407
1408/**
1409 * @def EINA_LIST_REVERSE_FOREACH
1410 * @brief Macro to iterate over a list in the reverse order.
1411 *
1412 * @param list The list to iterate over.
1413 * @param l A list that is used as an iterator and points to the current node.
1414 * @param data Current item's data.
1415 *
1416 * This macro works like EINA_LIST_FOREACH, but iterates from the
1417 * last element of a list to the first.
1418 * @p data is the data related to the current element, while @p l
1419 * is an #Eina_List that is used as the list iterator.
1420 *
1421 * The following diagram ilustrates this macro iterating over a list of four
1422 * elements("one", "two", "three" and "four"):
1423 * @htmlonly
1424 * <img src="eina-list-reverse-foreach.png" style="max-width: 100%;" />
1425 * <a href="eina-list-reverse-foreach.png">Full-size</a>
1426 * @endhtmlonly
1427 * @image latex eina-list-reverse-foreach.eps width=\textwidth
1428 *
1429 * It can be used to free list data, as in the following example:
1430 *
1431 * @code
1432 * Eina_List *list;
1433 * Eina_List *l;
1434 * char *data;
1435 *
1436 * // list is already filled,
1437 * // its elements are just duplicated strings,
1438 * // EINA_LIST_REVERSE_FOREACH will be used to free those strings
1439 *
1440 * EINA_LIST_REVERSE_FOREACH(list, l, data)
1441 * free(data);
1442 * eina_list_free(list);
1443 * @endcode
1444 *
1445 * @note This is not the optimal way to release memory allocated to
1446 * a list, since it iterates over the list twice.
1447 * For an optimized algorithm, use EINA_LIST_FREE().
1448 *
1449 * @warning @p list must be a pointer to the first element of the list.
1450 *
1451 * @warning Be careful when deleting list nodes.
1452 * If you remove the current node and continue iterating,
1453 * the code will fail because the macro will not be able
1454 * to get the next node. Notice that it's OK to remove any
1455 * node if you stop the loop after that.
1456 * For destructive operations such as this, consider
1457 * using EINA_LIST_REVERSE_FOREACH_SAFE().
1458 */
1459#define EINA_LIST_REVERSE_FOREACH(list, l, data) \
1460 for (l = eina_list_last(list), \
1461 data = eina_list_data_get(l); \
1462 l; \
1463 l = eina_list_prev(l), \
1464 data = eina_list_data_get(l))
1465
1466/**
1467 * @def EINA_LIST_FOREACH_SAFE
1468 * @brief Macro to iterate over a list with support for node deletion.
1469 *
1470 * @param list The list to iterate over.
1471 * @param l A list that is used as an iterator and points to the current node.
1472 * @param l_next A list that is used as an iterator and points to the next node.
1473 * @param data Current item's data.
1474 *
1475 * This macro iterates over @p list from the first element to
1476 * the last. @p data is the data related to the current element.
1477 * @p l is an #Eina_List used as the list iterator.
1478 *
1479 * Since this macro stores a pointer to the next list node in @p l_next,
1480 * deleting the current node and continuing looping is safe.
1481 *
1482 * The following diagram ilustrates this macro iterating over a list of four
1483 * elements("one", "two", "three" and "four"):
1484 * @htmlonly
1485 * <img src="eina-list-foreach-safe.png" style="max-width: 100%;" />
1486 * <a href="eina-list-foreach-safe.png">Full-size</a>
1487 * @endhtmlonly
1488 * @image latex eina-list-foreach-safe.eps width=\textwidth
1489 *
1490 * This macro can be used to free list nodes, as in the following example:
1491 *
1492 * @code
1493 * Eina_List *list;
1494 * Eina_List *l;
1495 * Eina_List *l_next;
1496 * char *data;
1497 *
1498 * // list is already filled,
1499 * // its elements are just duplicated strings,
1500 * // EINA_LIST_FOREACH_SAFE will be used to free elements that match "key".
1501 *
1502 * EINA_LIST_FOREACH_SAFE(list, l, l_next, data)
1503 * if (strcmp(data, "key") == 0) {
1504 * free(data);
1505 * list = eina_list_remove_list(list, l);
1506 * }
1507 * @endcode
1508 *
1509 * @warning @p list must be a pointer to the first element of the list.
1510 */
1511#define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) \
1512 for (l = list, \
1513 l_next = eina_list_next(l), \
1514 data = eina_list_data_get(l); \
1515 l; \
1516 l = l_next, \
1517 l_next = eina_list_next(l), \
1518 data = eina_list_data_get(l))
1519
1520/**
1521 * @def EINA_LIST_REVERSE_FOREACH_SAFE
1522 * @brief Macro to iterate over a list in the reverse order with support
1523 * for deletion.
1524 *
1525 * @param list The list to iterate over.
1526 * @param l A list that is used as an iterator and points to the current node.
1527 * @param l_prev A list that is used as an iterator and points to the previous node.
1528 * @param data Current item's data.
1529 *
1530 * This macro works like EINA_LIST_FOREACH_SAFE, but iterates from the
1531 * last element of a list to the first.
1532 * @p data is the data related to the current element, while @p l
1533 * is an #Eina_List that is used as the list iterator.
1534 *
1535 * Since this macro stores a pointer to the previous list node in @p l_prev,
1536 * deleting the current node and continuing looping is safe.
1537 *
1538 * The following diagram ilustrates this macro iterating over a list of four
1539 * elements("one", "two", "three" and "four"):
1540 * @htmlonly
1541 * <img src="eina-list-reverse-foreach-safe.png" style="max-width: 100%;" />
1542 * <a href="eina-list-reverse-foreach-safe.png">Full-size</a>
1543 * @endhtmlonly
1544 * @image latex eina-list-reverse-foreach-safe.eps width=\textwidth
1545 *
1546 * This macro can be used to free list nodes, as in the following example:
1547 *
1548 * @code
1549 * Eina_List *list;
1550 * Eina_List *l;
1551 * Eina_List *l_prev;
1552 * char *data;
1553 *
1554 * // list is already filled,
1555 * // its elements are just duplicated strings,
1556 * // EINA_LIST_REVERSE_FOREACH_SAFE will be used to free elements that match "key".
1557 *
1558 * EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data)
1559 * if (strcmp(data, "key") == 0) {
1560 * free(data);
1561 * list = eina_list_remove_list(list, l);
1562 * }
1563 * @endcode
1564 *
1565 * @warning @p list must be a pointer to the first element of the list.
1566 */
1567#define EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) \
1568 for (l = eina_list_last(list), \
1569 l_prev = eina_list_prev(l), \
1570 data = eina_list_data_get(l); \
1571 l; \
1572 l = l_prev, \
1573 l_prev = eina_list_prev(l), \
1574 data = eina_list_data_get(l))
1575
1576/**
1577 * @def EINA_LIST_FREE
1578 * @brief Macro to remove each list node while having access to each node's data.
1579 *
1580 * @param list The list that will be cleared.
1581 * @param data Current node's data.
1582 *
1583 * This macro will call #eina_list_remove_list for each list node, and store
1584 * the data contained in the current node in @p data.
1585 *
1586 * The following diagram ilustrates this macro iterating over a list of four
1587 * elements("one", "two", "three" and "four"):
1588 * @htmlonly
1589 * <img src="eina-list-free.png" style="max-width: 100%;" />
1590 * <a href="eina-list-free.png">Full-size</a>
1591 * @endhtmlonly
1592 * @image latex eina-list-free.eps width=\textwidth
1593 *
1594 * If you do not need to release node data, it is easier to call #eina_list_free().
1595 *
1596 * @code
1597 * Eina_List *list;
1598 * char *data;
1599 *
1600 * // list is already filled,
1601 * // its elements are just duplicated strings,
1602 *
1603 * EINA_LIST_FREE(list, data)
1604 * free(data);
1605 * @endcode
1606 *
1607 * @warning @p list must be a pointer to the first element of the list.
1608 *
1609 * @see eina_list_free()
1610 */
1611#define EINA_LIST_FREE(list, data) \
1612 for (data = eina_list_data_get(list); \
1613 list; \
1614 list = eina_list_remove_list(list, list), \
1615 data = eina_list_data_get(list))
1616
1617#include "eina_inline_list.x"
1618
1619/**
1620 * @}
1621 */
1622
1623/**
1624 * @}
1625 */
1626
1627/**
1628 * @}
1629 */
1630
1631#endif /* EINA_LIST_H_ */
diff --git a/libraries/eina/src/include/eina_lock.h b/libraries/eina/src/include/eina_lock.h
new file mode 100644
index 0000000..7c26dc0
--- /dev/null
+++ b/libraries/eina/src/include/eina_lock.h
@@ -0,0 +1,125 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_LOCK_H_
20#define EINA_LOCK_H_
21
22#include "eina_config.h"
23#include "eina_types.h"
24#include "eina_error.h"
25
26/**
27 * @addtogroup Eina_Tools_Group Tools
28 *
29 * @{
30 */
31
32/**
33 * @defgroup Eina_Lock_Group Lock
34 *
35 * @{
36 */
37
38typedef enum
39{
40 EINA_LOCK_FAIL = EINA_FALSE,
41 EINA_LOCK_SUCCEED = EINA_TRUE,
42 EINA_LOCK_DEADLOCK
43} Eina_Lock_Result;
44
45#ifdef EINA_HAVE_THREADS
46# ifdef _WIN32_WCE
47# include "eina_inline_lock_wince.x"
48# elif defined(_WIN32)
49# include "eina_inline_lock_win32.x"
50# else
51# include "eina_inline_lock_posix.x"
52# endif
53#else
54# include "eina_inline_lock_void.x"
55#endif
56
57EAPI extern Eina_Error EINA_ERROR_NOT_MAIN_LOOP;
58
59static inline Eina_Bool eina_lock_new(Eina_Lock *mutex);
60static inline void eina_lock_free(Eina_Lock *mutex);
61static inline Eina_Lock_Result eina_lock_take(Eina_Lock *mutex);
62static inline Eina_Lock_Result eina_lock_take_try(Eina_Lock *mutex);
63static inline Eina_Lock_Result eina_lock_release(Eina_Lock *mutex);
64static inline void eina_lock_debug(const Eina_Lock *mutex);
65
66static inline Eina_Bool eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex);
67static inline void eina_condition_free(Eina_Condition *cond);
68static inline Eina_Bool eina_condition_wait(Eina_Condition *cond);
69static inline Eina_Bool eina_condition_timedwait(Eina_Condition *cond, double t);
70static inline Eina_Bool eina_condition_broadcast(Eina_Condition *cond);
71static inline Eina_Bool eina_condition_signal(Eina_Condition *cond);
72
73static inline Eina_Bool eina_rwlock_new(Eina_RWLock *mutex);
74static inline void eina_rwlock_free(Eina_RWLock *mutex);
75static inline Eina_Lock_Result eina_rwlock_take_read(Eina_RWLock *mutex);
76static inline Eina_Lock_Result eina_rwlock_take_write(Eina_RWLock *mutex);
77static inline Eina_Lock_Result eina_rwlock_release(Eina_RWLock *mutex);
78
79static inline Eina_Bool eina_tls_new(Eina_TLS *key);
80static inline void eina_tls_free(Eina_TLS key);
81static inline void *eina_tls_get(Eina_TLS key);
82static inline Eina_Bool eina_tls_set(Eina_TLS key, const void *data);
83
84
85#ifdef EINA_HAVE_DEBUG_THREADS
86# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \
87 do { \
88 if (EINA_UNLIKELY(!eina_main_loop_is())) \
89 { \
90 eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \
91 EINA_LOG_ERR("You are calling %s from outside" \
92 "of the main loop threads in %s at line %i", \
93 __FUNCTION__, \
94 __FILE__, \
95 __LINE__); \
96 return val; \
97 } \
98 } while (0)
99# define EINA_MAIN_LOOP_CHECK_RETURN \
100 do { \
101 if (EINA_UNLIKELY(!eina_main_loop_is())) \
102 { \
103 eina_error_set(EINA_ERROR_NOT_MAIN_LOOP); \
104 EINA_LOG_ERR("You are calling %s from outside" \
105 "of the main loop threads in %s at line %i", \
106 __FUNCTION__, \
107 __FILE__, \
108 __LINE__); \
109 return ; \
110 } \
111 } while (0)
112#else
113# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val)
114# define EINA_MAIN_LOOP_CHECK_RETURN
115#endif
116
117/**
118 * @}
119 */
120
121/**
122 * @}
123 */
124
125#endif
diff --git a/libraries/eina/src/include/eina_log.h b/libraries/eina/src/include/eina_log.h
new file mode 100644
index 0000000..5cd7c59
--- /dev/null
+++ b/libraries/eina/src/include/eina_log.h
@@ -0,0 +1,888 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_LOG_H_
20#define EINA_LOG_H_
21
22#include <stdlib.h>
23#include <stdarg.h>
24
25#include "eina_types.h"
26
27#define EINA_COLOR_LIGHTRED "\033[31;1m"
28#define EINA_COLOR_RED "\033[31m"
29#define EINA_COLOR_LIGHTBLUE "\033[34;1m"
30#define EINA_COLOR_BLUE "\033[34m"
31#define EINA_COLOR_GREEN "\033[32;1m"
32#define EINA_COLOR_YELLOW "\033[33;1m"
33#define EINA_COLOR_ORANGE "\033[0;33m"
34#define EINA_COLOR_WHITE "\033[37;1m"
35#define EINA_COLOR_LIGHTCYAN "\033[36;1m"
36#define EINA_COLOR_CYAN "\033[36m"
37#define EINA_COLOR_RESET "\033[0m"
38#define EINA_COLOR_HIGH "\033[1m"
39
40
41/**
42 * @page tutorial_log_page Log Tutorial
43 *
44 * @section tutorial_log_introduction Introduction
45 *
46 * The Eina Log module provides logging facilities for libraries and
47 * applications. It provides colored logging, basic logging levels (error,
48 * warning, debug, info, critical) and loggers - called logging domains -
49 * which will be covered on next sections.
50 *
51 * @section tutorial_log_basic_usage Basic Usage
52 *
53 * Log messages can be displayed using the following macros:
54 *
55 * @li EINA_LOG_ERR(),
56 * @li EINA_LOG_INFO(),
57 * @li EINA_LOG_WARN(),
58 * @li EINA_LOG_DBG().
59 *
60 * Here is an example:
61 *
62 * @include eina_log_02.c
63 *
64 * If you compiled Eina without debug mode, execution will yield only one log
65 * message, which is "argument is negative".
66 *
67 * Here we introduce the concept of logging domains (or loggers), which might
68 * already be familiar to readers. It is basically a way to separate a set of
69 * log messages into a context (e.g. a module) and provide a way of controlling
70 * this set as a whole.
71 *
72 * For example, suppose you have 3 different modules on your application and you
73 * want to get logging only from one of them (e.g. create some sort of filter).
74 * For achieving that, all you need to do is create a logging domain for each
75 * module so that all logging inside a module can be considered as a whole.
76 *
77 * Logging domains are specified by a name, color applied to the name and the
78 * level. The first two (name and color) are set through code, that is, inside
79 * your application/module/library.
80 *
81 * The level is used for controlling which messages should appear. It
82 * specifies the lowest level that should be displayed (e.g. a message
83 * with level 11 being logged on a domain with level set to 10 would be
84 * displayed, while a message with level 9 wouldn't).
85 *
86 * The domain level is set during runtime (in contrast with the name and
87 * color) through the environment variable EINA_LOG_LEVELS. This variable
88 * expects a list in the form domain_name1:level1,domain_name2:level2,... . For
89 * example:
90 *
91 * @verbatim EINA_LOG_LEVELS=mymodule1:5,mymodule2:2,mymodule3:0 ./myapp@endverbatim
92 *
93 * This line would set mymodule1 level to 5, mymodule2 level to 2 and mymodule3
94 * level to 0.
95 *
96 * There's also a global logger to which EINA_LOG_(ERR, DBG, INFO, CRIT, WARN)
97 * macros do log on. It is a logger that is created internally by Eina Log with
98 * an empty name and can be used for general logging (where logging domains do
99 * not apply).
100 *
101 * Since this global logger doesn't have a name, you can't set its level through
102 * EINA_LOG_LEVELS variable. Here we introduce a second environment variable
103 * that is a bit more special: EINA_LOG_LEVEL.
104 *
105 * This variable specifies the level of the global logging domain and the level
106 * of domains that haven't been set through EINA_LOG_LEVELS. Here's an example:
107 *
108 * @verbatim EINA_LOG_LEVEL=3 EINA_LOG_LEVELS=module1:10,module3:2 ./myapp@endverbatim
109 *
110 * Supposing you have modules named "module1", "module2" and "module3", this
111 * line would result in module1 with level 10, module2 with level 3 and module3
112 * with level 2. Note that module2's level wasn't specified, so it's level is
113 * set to the global level. This way we can easily apply filters to multiple
114 * domains with only one parameter (EINA_LOG_LEVEL=num).
115 *
116 * The global level (EINA_LOG_LEVEL) can also be set through code, using
117 * eina_log_level_set() function.
118 *
119 * While developing your libraries or applications, you may notice that
120 * EINA_LOG_DOM_(ERR, DBG, INFO, CRIT, WARN) macros also print out
121 * messages from eina itself. Here we introduce another environment variable
122 * that is a bit more special: EINA_LOG_LEVELS_GLOB.
123 *
124 * This variable allows you to disable the logging of any/all code in eina itself.
125 * This is useful when developing your libraries or applications so that you can
126 * see your own domain's messages easier without having to sift through a lot of
127 * internal eina debug messages. Here's an example:
128 *
129 * @verbatim EINA_LOG_LEVEL=3 EINA_LOG_LEVELS_GLOB=eina_*:0 ./myapp@endverbatim
130 *
131 * This will disable eina_log output from all internal eina code thus allowing
132 * you to see your own domain messages easier.
133 *
134 * @section tutorial_log_advanced_display Advanced usage of print callbacks
135 *
136 * The log module allows the user to change the way
137 * eina_log_print() displays the messages. It suffices to pass to
138 * eina_log_print_cb_set() the function used to display the
139 * message. That function must be of type #Eina_Log_Print_Cb. As a
140 * custom data can be passed to that callback, powerful display
141 * messages can be displayed.
142 *
143 * It is suggested to not use __FILE__, __FUNCTION__ or __LINE__ when
144 * writing that callback, but when defining macros (like
145 * EINA_LOG_ERR() and other macros).
146 *
147 * Here is an example of custom callback, whose behavior can be
148 * changed at runtime:
149 *
150 * @include eina_log_03.c
151 * @example eina_log_02.c
152 * @example eina_log_03.c
153 */
154
155/**
156 * @addtogroup Eina_Log_Group Log
157 *
158 * @brief Full-featured logging system.
159 *
160 * Eina provides eina_log_print(), a standard function to manage all
161 * logging messages. This function may be called directly or using the
162 * helper macros such as EINA_LOG_DBG(), EINA_LOG_ERR() or those that
163 * take a specific domain as argument EINA_LOG_DOM_DBG(),
164 * EINA_LOG_DOM_ERR(). Internally, eina_log_print() will call the
165 * function defined with eina_log_print_cb_set(), that defaults to
166 * eina_log_print_cb_stderr(), but may be changed to do whatever you
167 * need, such as networking or syslog logging.
168 *
169 * The logging system is thread safe once initialized with
170 * eina_log_threads_enable(). The thread that calls this function
171 * first is considered "main thread" and other threads will have their
172 * thread id (pthread_self()) printed in the log message so it is easy
173 * to detect from where it is coming.
174 *
175 * Log domains is the Eina way to differentiate messages. There might
176 * be different domains to represent different modules, different
177 * feature-set, different categories and so on. Filtering can be
178 * applied to domain names by means of @c EINA_LOG_LEVELS environment
179 * variable or eina_log_domain_level_set().
180 *
181 * The different logging levels serve to customize the amount of
182 * debugging one want to take and may be used to automatically call
183 * abort() once some given level message is printed. This is
184 * controlled by environment variable @c EINA_LOG_ABORT and the level
185 * to be considered critical with @c EINA_LOG_ABORT_LEVEL. These can
186 * be changed with eina_log_abort_on_critical_set() and
187 * eina_log_abort_on_critical_level_set().
188 *
189 * The default maximum level to print is defined by environment
190 * variable @c EINA_LOG_LEVEL, but may be set per-domain with @c
191 * EINA_LOG_LEVELS. It will default to #EINA_LOG_ERR. This can be
192 * changed with eina_log_level_set().
193 *
194 * To use the log system Eina must be initialized with eina_init() and
195 * later shut down with eina_shutdown(). Here is a straightforward
196 * example:
197 *
198 * @include eina_log_01.c
199 *
200 * Compile this code with the following command:
201 *
202 * @verbatim gcc -Wall -o eina_log_01 eina_log_01.c `pkg-config --cflags --libs eina`@endverbatim
203 *
204 * Now execute the program with:
205 *
206 * @verbatim EINA_LOG_LEVEL=2 ./eina_log_01@endverbatim
207 *
208 * You should see a message displayed in the terminal.
209 *
210 * For more information, you can look at the @ref tutorial_log_page.
211 *
212 * @example eina_log_01.c
213 */
214
215/**
216 * @addtogroup Eina_Tools_Group Tools
217 *
218 * @{
219 */
220
221/**
222 * @defgroup Eina_Log_Group Log
223 *
224 * @{
225 */
226
227/**
228 * EINA_LOG_DOMAIN_GLOBAL is the general purpose log domain to be
229 * used, it is always registered and available everywhere.
230 */
231EAPI extern int EINA_LOG_DOMAIN_GLOBAL;
232
233#ifndef EINA_LOG_DOMAIN_DEFAULT
234
235/**
236 * @def EINA_LOG_DOMAIN_DEFAULT
237 * This macro defines the domain to use with the macros EINA_LOG_DOM_DBG(),
238 * EINA_LOG_DOM_INFO(), EINA_LOG_DOM_WARN(), EINA_LOG_DOM_ERR() and
239 * EINA_LOG_DOM_CRIT().
240 *
241 * If not defined prior to the inclusion of this header, then it
242 * defaults to #EINA_LOG_DOMAIN_GLOBAL.
243 *
244 * @note One may like to redefine this in its code to avoid typing too
245 * much. In this case the recommended way is:
246 *
247 * @code
248 * #include <Eina.h>
249 * #undef EINA_LOG_DOMAIN_DEFAULT
250 * #define EINA_LOG_DOMAIN_DEFAULT _log_dom
251 * static int _log_dom = -1;
252 *
253 * int main(void)
254 * {
255 * eina_init();
256 * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN);
257 * EINA_LOG_ERR("using my own domain");
258 * return 0;
259 * }
260 * @endcode
261 *
262 * @warning If one defines the domain prior to inclusion of this
263 * header, the defined log domain symbol must be defined
264 * prior as well, otherwise the inlined functions defined by
265 * Eina will fail to find the symbol, causing build failure.
266 *
267 * @code
268 * #define EINA_LOG_DOMAIN_DEFAULT _log_dom
269 * static int _log_dom = -1; // must come before inclusion of Eina.h!
270 * #include <Eina.h>
271 *
272 * int main(void)
273 * {
274 * eina_init();
275 * _log_dom = eina_log_domain_register("mydom", EINA_COLOR_CYAN);
276 * EINA_LOG_ERR("using my own domain");
277 * return 0;
278 * }
279 * @endcode
280 *
281 */
282# define EINA_LOG_DOMAIN_DEFAULT EINA_LOG_DOMAIN_GLOBAL
283
284#endif /* EINA_LOG_DOMAIN_DEFAULT */
285
286/**
287 * @def EINA_LOG(DOM, LEVEL, fmt, ...)
288 * Logs a message on the specified domain, level and format.
289 *
290 * @note if @c EINA_LOG_LEVEL_MAXIMUM is defined, then messages larger
291 * than this value will be ignored regardless of current domain
292 * level, the eina_log_print() is not even called! Most
293 * compilers will just detect the two integers make the branch
294 * impossible and remove the branch and function call all
295 * together. Take this as optimization tip and possible remove
296 * debug messages from binaries to be deployed, saving on hot
297 * paths. Never define @c EINA_LOG_LEVEL_MAXIMUM on public
298 * header files.
299 */
300#ifdef EINA_LOG_LEVEL_MAXIMUM
301#define EINA_LOG(DOM, LEVEL, fmt, ...) \
302 do { \
303 if (LEVEL <= EINA_LOG_LEVEL_MAXIMUM) { \
304 eina_log_print(DOM, LEVEL, __FILE__, __FUNCTION__, __LINE__, \
305 fmt, ## __VA_ARGS__); } \
306 } while (0)
307#else
308#define EINA_LOG(DOM, LEVEL, fmt, ...) \
309 eina_log_print(DOM, \
310 LEVEL, \
311 __FILE__, \
312 __FUNCTION__, \
313 __LINE__, \
314 fmt, \
315 ## __VA_ARGS__)
316#endif
317
318/**
319 * @def EINA_LOG_DOM_CRIT(DOM, fmt, ...)
320 * Logs a message with level CRITICAL on the specified domain and format.
321 */
322#define EINA_LOG_DOM_CRIT(DOM, fmt, ...) \
323 EINA_LOG(DOM, EINA_LOG_LEVEL_CRITICAL, fmt, ## __VA_ARGS__)
324
325/**
326 * @def EINA_LOG_DOM_ERR(DOM, fmt, ...)
327 * Logs a message with level ERROR on the specified domain and format.
328 */
329#define EINA_LOG_DOM_ERR(DOM, fmt, ...) \
330 EINA_LOG(DOM, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__)
331
332/**
333 * @def EINA_LOG_DOM_INFO(DOM, fmt, ...)
334 * Logs a message with level INFO on the specified domain and format.
335 */
336#define EINA_LOG_DOM_INFO(DOM, fmt, ...) \
337 EINA_LOG(DOM, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__)
338
339/**
340 * @def EINA_LOG_DOM_DBG(DOM, fmt, ...)
341 * Logs a message with level DEBUG on the specified domain and format.
342 */
343#define EINA_LOG_DOM_DBG(DOM, fmt, ...) \
344 EINA_LOG(DOM, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__)
345
346/**
347 * @def EINA_LOG_DOM_WARN(DOM, fmt, ...)
348 * Logs a message with level WARN on the specified domain and format.
349 */
350#define EINA_LOG_DOM_WARN(DOM, fmt, ...) \
351 EINA_LOG(DOM, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__)
352
353/**
354 * @def EINA_LOG_CRIT(fmt, ...)
355 * Logs a message with level CRITICAL on the default domain with the specified
356 * format.
357 */
358#define EINA_LOG_CRIT(fmt, ...) \
359 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, \
360 EINA_LOG_LEVEL_CRITICAL, \
361 fmt, \
362 ## __VA_ARGS__)
363
364/**
365 * @def EINA_LOG_ERR(fmt, ...)
366 * Logs a message with level ERROR on the default domain with the specified
367 * format.
368 */
369#define EINA_LOG_ERR(fmt, ...) \
370 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_ERR, fmt, ## __VA_ARGS__)
371
372/**
373 * @def EINA_LOG_INFO(fmt, ...)
374 * Logs a message with level INFO on the default domain with the specified
375 * format.
376 */
377#define EINA_LOG_INFO(fmt, ...) \
378 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_INFO, fmt, ## __VA_ARGS__)
379
380/**
381 * @def EINA_LOG_WARN(fmt, ...)
382 * Logs a message with level WARN on the default domain with the specified
383 * format.
384 */
385#define EINA_LOG_WARN(fmt, ...) \
386 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_WARN, fmt, ## __VA_ARGS__)
387
388/**
389 * @def EINA_LOG_DBG(fmt, ...)
390 * Logs a message with level DEBUG on the default domain with the specified
391 * format.
392 */
393#define EINA_LOG_DBG(fmt, ...) \
394 EINA_LOG(EINA_LOG_DOMAIN_DEFAULT, EINA_LOG_LEVEL_DBG, fmt, ## __VA_ARGS__)
395
396/**
397 * @typedef Eina_Log_Domain
398 * The domain used for logging.
399 */
400typedef struct _Eina_Log_Domain Eina_Log_Domain;
401
402/**
403 * @struct _Eina_Log_Domain
404 * The domain used for logging.
405 */
406struct _Eina_Log_Domain
407{
408 int level; /**< Max level to log */
409 const char *domain_str; /**< Formatted string with color to print */
410 const char *name; /**< Domain name */
411 size_t namelen; /**< strlen(name) */
412
413 /* Private */
414 Eina_Bool deleted : 1; /**< Flags deletion of domain, a free slot */
415};
416
417/**
418 * Enable logging module to handle threads.
419 *
420 * There is no disable option on purpose, if it is enabled, there is
421 * no way back until you call the last eina_shutdown().
422 *
423 * There is no function to retrieve if threads are enabled as one is
424 * not supposed to know this from outside.
425 *
426 * After this call is executed at least once, if Eina was compiled
427 * with threads support then logging will lock around debug messages
428 * and threads that are not the main thread will have its identifier
429 * printed.
430 *
431 * The main thread is considered the thread where the first
432 * eina_init() was called.
433 */
434EAPI void eina_log_threads_enable(void);
435
436/**
437 * @enum _Eina_Log_Level
438 * List of available logging levels.
439 */
440typedef enum _Eina_Log_Level
441{
442 EINA_LOG_LEVEL_CRITICAL, /**< Critical log level */
443 EINA_LOG_LEVEL_ERR, /**< Error log level */
444 EINA_LOG_LEVEL_WARN, /**< Warning log level */
445 EINA_LOG_LEVEL_INFO, /**< Information log level */
446 EINA_LOG_LEVEL_DBG, /**< Debug log level */
447 EINA_LOG_LEVELS, /**< Count of default log levels */
448 EINA_LOG_LEVEL_UNKNOWN = (-2147483647 - 1) /**< Unknown level */
449} Eina_Log_Level;
450
451/**
452 * @typedef Eina_Log_Print_Cb
453 * Type for print callbacks.
454 */
455typedef void (*Eina_Log_Print_Cb)(const Eina_Log_Domain *d,
456 Eina_Log_Level level,
457 const char *file, const char *fnc, int line,
458 const char *fmt, void *data, va_list args);
459
460/*
461 * Customization
462 */
463
464/**
465 * Sets logging method to use.
466 *
467 * @param cb The callback to call when printing a log.
468 * @param data The data to pass to the callback.
469 *
470 * By default, eina_log_print_cb_stderr() is used.
471 *
472 * @note MT: safe to call from any thread.
473 *
474 * @note MT: given function @a cb will be called protected by mutex.
475 * This means you're safe from other calls but you should never
476 * call eina_log_print(), directly or indirectly.
477 */
478EAPI void eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data) EINA_ARG_NONNULL(1);
479
480
481/**
482 * @brief Set the default log level.
483 *
484 * @param level The log level.
485 *
486 * This function sets the log level @p level. It is used in
487 * eina_log_print().
488 *
489 * @note this is initially set to envvar EINA_LOG_LEVEL by eina_init().
490 *
491 * @see eina_log_level_get()
492 */
493EAPI void eina_log_level_set(int level);
494
495/**
496 * @brief Get the default log level.
497 *
498 * @return the log level that limits eina_log_print().
499 *
500 * @see eina_log_level_set()
501 */
502EAPI int eina_log_level_get(void) EINA_WARN_UNUSED_RESULT;
503
504static inline Eina_Bool eina_log_level_check(int level);
505
506/**
507 * Checks if current thread is the main thread.
508 *
509 * @return #EINA_TRUE if threads were enabled and the current thread
510 * is the one that called eina_log_threads_init(). If there is
511 * no thread support (compiled with --disable-pthreads) or
512 * they were not enabled, then #EINA_TRUE is also
513 * returned. The only case where #EINA_FALSE is returned is
514 * when threads were successfully enabled but the current
515 * thread is not the main (one that called
516 * eina_log_threads_init()).
517 */
518EAPI Eina_Bool eina_log_main_thread_check(void) EINA_CONST EINA_WARN_UNUSED_RESULT;
519
520
521/**
522 * @brief Set if color logging should be disabled.
523 *
524 * @param disabled if #EINA_TRUE, color logging should be disabled.
525 *
526 * @note this is initially set to envvar EINA_LOG_COLOR_DISABLE by eina_init().
527 *
528 * @see eina_log_color_disable_get()
529 */
530EAPI void eina_log_color_disable_set(Eina_Bool disabled);
531
532/**
533 * @brief Get if color logging should be disabled.
534 *
535 * @return if #EINA_TRUE, color logging should be disabled.
536 *
537 * @see eina_log_color_disable_set()
538 */
539EAPI Eina_Bool eina_log_color_disable_get(void) EINA_WARN_UNUSED_RESULT;
540
541/**
542 * @brief Set if originating file name logging should be disabled.
543 *
544 * @param disabled if #EINA_TRUE, file name logging should be disabled.
545 *
546 * @note this is initially set to envvar EINA_LOG_FILE_DISABLE by eina_init().
547 *
548 * @see eina_log_file_disable_get()
549 */
550EAPI void eina_log_file_disable_set(Eina_Bool disabled);
551
552/**
553 * @brief Get if originating file name logging should be disabled.
554 *
555 * @return if #EINA_TRUE, file name logging should be disabled.
556 *
557 * @see eina_log_file_disable_set()
558 */
559EAPI Eina_Bool eina_log_file_disable_get(void) EINA_WARN_UNUSED_RESULT;
560
561/**
562 * @brief Set if originating function name logging should be disabled.
563 *
564 * @param disabled if #EINA_TRUE, function name logging should be disabled.
565 *
566 * @note this is initially set to envvar EINA_LOG_FUNCTION_DISABLE by
567 * eina_init().
568 *
569 * @see eina_log_function_disable_get()
570 */
571EAPI void eina_log_function_disable_set(Eina_Bool disabled);
572
573/**
574 * @brief Get if originating function name logging should be disabled.
575 *
576 * @return if #EINA_TRUE, function name logging should be disabled.
577 *
578 * @see eina_log_function_disable_set()
579 */
580EAPI Eina_Bool eina_log_function_disable_get(void) EINA_WARN_UNUSED_RESULT;
581
582/**
583 * @brief Set if critical messages should abort the program.
584 *
585 * @param abort_on_critical if #EINA_TRUE, messages with level equal
586 * or smaller than eina_log_abort_on_critical_level_get() will
587 * abort the program.
588 *
589 * @note this is initially set to envvar EINA_LOG_ABORT by
590 * eina_init().
591 *
592 * @see eina_log_abort_on_critical_get()
593 * @see eina_log_abort_on_critical_level_set()
594 */
595EAPI void eina_log_abort_on_critical_set(Eina_Bool abort_on_critical);
596
597/**
598 * @brief Get if critical messages should abort the program.
599 *
600 * @return if #EINA_TRUE, any messages with level equal or smaller
601 * than eina_log_abort_on_critical_level_get() will abort the
602 * program.
603 *
604 * @see eina_log_abort_on_critical_set()
605 * @see eina_log_abort_on_critical_level_set()
606 */
607EAPI Eina_Bool eina_log_abort_on_critical_get(void) EINA_WARN_UNUSED_RESULT;
608
609/**
610 * @brief Set level that triggers abort if abort-on-critical is set.
611 *
612 * @param critical_level levels equal or smaller than the given value
613 * will trigger program abortion if
614 * eina_log_abort_on_critical_get() returns #EINA_TRUE.
615 *
616 * @note this is initially set to envvar EINA_LOG_ABORT_LEVEL by
617 * eina_init().
618 *
619 * @see eina_log_abort_on_critical_level_get()
620 * @see eina_log_abort_on_critical_get()
621 */
622EAPI void eina_log_abort_on_critical_level_set(int critical_level);
623
624/**
625 * @brief Get level that triggers abort if abort-on-critical is set.
626 *
627 * @return critical level equal or smaller than value will trigger
628 * program abortion if eina_log_abort_on_critical_get() returns
629 * #EINA_TRUE.
630 *
631 * @see eina_log_abort_on_critical_level_set()
632 * @see eina_log_abort_on_critical_get()
633 */
634EAPI int eina_log_abort_on_critical_level_get(void) EINA_WARN_UNUSED_RESULT;
635
636
637/**
638 * Set the domain level given its name.
639 *
640 * This call has the same effect as setting
641 * EINA_LOG_LEVELS=&lt;@p domain_name&gt;:&lt;@p level&gt;
642 *
643 * @param domain_name domain name to change the level. It may be of a
644 * still not registered domain. If the domain is not registered
645 * yet, it will be saved as a pending set and applied upon
646 * registration.
647 * @param level level to use to limit eina_log_print() for given domain.
648 */
649EAPI void eina_log_domain_level_set(const char *domain_name, int level) EINA_ARG_NONNULL(1);
650
651/**
652 * Get the domain level given its name.
653 *
654 * @param domain_name domain name to retrieve the level. It may be of
655 * a still not registered domain. If the domain is not
656 * registered yet, but there is a pending value, either from
657 * eina_log_domain_level_set(),EINA_LOG_LEVELS environment
658 * variable or from EINA_LOG_LEVELS_GLOB, these are
659 * returned. If nothing else was found, then the global/default
660 * level (eina_log_level_get()) is returned.
661 *
662 * @return level to use to limit eina_log_print() for given
663 * domain. On error (@p domain_name == NULL),
664 * EINA_LOG_LEVEL_UNKNOWN is returned.
665 *
666 * @see eina_log_domain_level_set()
667 * @see eina_log_domain_registered_level_get()
668 */
669EAPI int eina_log_domain_level_get(const char *domain_name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
670
671/**
672 * Get the domain level given its identifier.
673 *
674 * @param domain identifier, so it must be previously registered with
675 * eina_log_domain_register(). It's a much faster version of
676 * eina_log_domain_level_get(), but relies on domain being
677 * present.
678 *
679 * @return level to use to limit eina_log_print() for given domain. On
680 * error EINA_LOG_LEVEL_UNKNOWN is returned.
681 */
682EAPI int eina_log_domain_registered_level_get(int domain) EINA_WARN_UNUSED_RESULT;
683
684static inline Eina_Bool eina_log_domain_level_check(int domain, int level);
685
686/*
687 * Logging domains
688 */
689
690/**
691 * @param name Domain name
692 * @param color Color of the domain name
693 *
694 * @return Domain index that will be used as the DOMAIN parameter on log
695 * macros. A negative return value means an log occurred.
696 *
697 * @note MT: safe to call from any thread.
698 */
699EAPI int eina_log_domain_register(const char *name, const char *color) EINA_ARG_NONNULL(1);
700
701/**
702 * Forget about a logging domain registered by eina_log_domain_register()
703 *
704 * @param domain domain identifier as reported by eina_log_domain_register(),
705 * must be >= 0.
706 *
707 * @note MT: safe to call from any thread.
708 */
709EAPI void eina_log_domain_unregister(int domain);
710
711/*
712 * Logging functions.
713 */
714
715/**
716 * Print out log message using given domain and level.
717 *
718 * @note Usually you'll not use this function directly but the helper
719 * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and
720 * so on. See eina_log.h
721 *
722 * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if
723 * you registered none. It is recommended that modules and
724 * applications have their own logging domain.
725 * @param level message level, those with level greater than user
726 * specified value (eina_log_level_set() or environment
727 * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored.
728 * @param file filename that originated the call, must @b not be @c NULL.
729 * @param fnc function that originated the call, must @b not be @c NULL.
730 * @param line originating line in @a file.
731 * @param fmt printf-like format to use. Should not provide trailing
732 * '\n' as it is automatically included.
733 *
734 * @note MT: this function may be called from different threads if
735 * eina_log_threads_enable() was called before.
736 */
737EAPI void eina_log_print(int domain,
738 Eina_Log_Level level,
739 const char *file,
740 const char *function,
741 int line,
742 const char *fmt,
743 ...) EINA_ARG_NONNULL(3, 4, 6) EINA_PRINTF(6, 7) EINA_NOINSTRUMENT;
744
745/**
746 * Print out log message using given domain and level.
747 *
748 * @note Usually you'll not use this function directly but the helper
749 * macros EINA_LOG(), EINA_LOG_DOM_CRIT(), EINA_LOG_CRIT() and
750 * so on. See eina_log.h
751 *
752 * @param domain logging domain to use or @c EINA_LOG_DOMAIN_GLOBAL if
753 * you registered none. It is recommended that modules and
754 * applications have their own logging domain.
755 * @param level message level, those with level greater than user
756 * specified value (eina_log_level_set() or environment
757 * variables EINA_LOG_LEVEL, EINA_LOG_LEVELS) will be ignored.
758 * @param file filename that originated the call, must @b not be @c NULL.
759 * @param fnc function that originated the call, must @b not be @c NULL.
760 * @param line originating line in @a file.
761 * @param fmt printf-like format to use. Should not provide trailing
762 * '\n' as it is automatically included.
763 * @param args the arguments needed by the format.
764 *
765 * @note MT: this function may be called from different threads if
766 * eina_log_threads_enable() was called before.
767 *
768 * @see eina_log_print()
769 */
770EAPI void eina_log_vprint(int domain,
771 Eina_Log_Level level,
772 const char *file,
773 const char *fnc,
774 int line,
775 const char *fmt,
776 va_list args) EINA_ARG_NONNULL(3, 4, 6) EINA_NOINSTRUMENT;
777
778/*
779 * Logging methods (change how logging is done).
780 */
781
782/**
783 * Alternative logging method, this will output to standard output stream.
784 *
785 * @param d The domain.
786 * @param level The level.
787 * @param file The file which is logged.
788 * @param fnc The function which is logged.
789 * @param line The line which is logged.
790 * @param fmt The ouptut format to use.
791 * @param data Not used.
792 * @param args The arguments needed by the format.
793 *
794 * This method will colorize output based on domain provided color and
795 * message logging level. To disable color, set environment variable
796 * EINA_LOG_COLOR_DISABLE=1. Similarly, to disable file and line
797 * information, set EINA_LOG_FILE_DISABLE=1 or
798 * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is
799 * not acceptable to have both EINA_LOG_FILE_DISABLE and
800 * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just
801 * EINA_LOG_FUNCTION_DISABLE will be considered and file information
802 * will be printed anyways.
803 *
804 * @note MT: if threads are enabled, this function is called within locks.
805 * @note MT: Threads different from main thread will have thread id
806 * appended to domain name.
807 */
808EAPI void eina_log_print_cb_stdout(const Eina_Log_Domain *d,
809 Eina_Log_Level level,
810 const char *file,
811 const char *fnc,
812 int line,
813 const char *fmt,
814 void *data,
815 va_list args);
816
817/**
818 * Default logging method, this will output to standard error stream.
819 *
820 * This method will colorize output based on domain provided color and
821 * message logging level.
822 *
823 * To disable color, set environment variable
824 * EINA_LOG_COLOR_DISABLE=1. To enable color, even if directing to a
825 * file or when using a non-supported color terminal, use
826 * EINA_LOG_COLOR_DISABLE=0. If EINA_LOG_COLOR_DISABLE is unset (or
827 * -1), then Eina will disable color if terminal ($TERM) is
828 * unsupported or if redirecting to a file.
829
830 . Similarly, to disable file and line
831 * information, set EINA_LOG_FILE_DISABLE=1 or
832 * EINA_LOG_FUNCTION_DISABLE=1 to avoid function name in output. It is
833 * not acceptable to have both EINA_LOG_FILE_DISABLE and
834 * EINA_LOG_FUNCTION_DISABLE at the same time, in this case just
835 * EINA_LOG_FUNCTION_DISABLE will be considered and file information
836 * will be printed anyways.
837 *
838 * @note MT: if threads are enabled, this function is called within locks.
839 * @note MT: Threads different from main thread will have thread id
840 * appended to domain name.
841 */
842EAPI void eina_log_print_cb_stderr(const Eina_Log_Domain *d,
843 Eina_Log_Level level,
844 const char *file,
845 const char *fnc,
846 int line,
847 const char *fmt,
848 void *data,
849 va_list args);
850
851/**
852 * Alternative logging method, this will output to given file stream.
853 *
854 * @param d The domain.
855 * @param level Not used.
856 * @param file The file which is logged.
857 * @param fnc The function which is logged.
858 * @param line The line which is logged.
859 * @param fmt The ouptut format to use.
860 * @param data The file which will store the output (as a FILE *).
861 * @param args The arguments needed by the format.
862 *
863 * This method will never output color.
864 *
865 * @note MT: if threads are enabled, this function is called within locks.
866 * @note MT: Threads different from main thread will have thread id
867 * appended to domain name.
868 */
869EAPI void eina_log_print_cb_file(const Eina_Log_Domain *d,
870 Eina_Log_Level level,
871 const char *file,
872 const char *fnc,
873 int line,
874 const char *fmt,
875 void *data,
876 va_list args);
877
878#include "eina_inline_log.x"
879
880/**
881 * @}
882 */
883
884/**
885 * @}
886 */
887
888#endif /* EINA_LOG_H_ */
diff --git a/libraries/eina/src/include/eina_magic.h b/libraries/eina/src/include/eina_magic.h
new file mode 100644
index 0000000..44cd4e9
--- /dev/null
+++ b/libraries/eina/src/include/eina_magic.h
@@ -0,0 +1,322 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_MAGIC_H_
20#define EINA_MAGIC_H_
21
22#include "eina_config.h"
23#include "eina_types.h"
24
25/**
26 * @page eina_magic_example_01_page
27 * @dontinclude eina_magic_01.c
28 *
29 * Whenever using Eina we must include it:
30 * @skipline #include
31 *
32 * For this example we are going to define two classes, person and pilot, and
33 * since every pilot is a person we use inheritance. To be type safe we are
34 * going to add EINA_MAGIC to our classes:
35 * @until struct _pilot pilot
36 * @note The values of BASETYPE_MAGIC and SUBTYPE_MAGIC have no meaning, the
37 * only important thing about them is that they be unique.
38 *
39 * Here we have a function to create a perso given a name, nothing too fancy:
40 * @until }
41 *
42 * And now the counterpart, a function the free a person.
43 * @until {
44 * Before we start releasing resources we check that the pointer we were given
45 * actually points to a person, and if not we will print an error message and
46 * quit:
47 * @until }
48 * @note EINA_MAGIC_FAIL is a macro that make's it easy to print an appropriate
49 * (and consistent) error message.
50 * Now knowing that ptr is indeed of type person we prooced to set EINA_MAGIC to
51 * EINA_MAGIC_NONE and free alocated memory:
52 * @until }
53 * @note Setting EINA_MAGIC to EINA_MAGIC_NONE is important to prevent the
54 * struct from being used after freed.
55 *
56 * Now we have our function to create a pilot, this one is a little more complex
57 * because we need to set EINA_MAGIC for the pilot and pilot->base, this is very
58 * important so that checking the EINA_MAGIC of (person*)my_pilot will work:
59 * @until }
60 *
61 * The function to free a pilot is not too different from the one that frees a
62 * person:
63 * @until }
64 * @until }
65 *
66 * We also create functions to print a person or a pilot that check the type of
67 * the pointers they receive:
68 * @until }
69 * @until }
70 *
71 * And on to our main function where we declare some variables and initialize
72 * Eina:
73 * @until eina_init
74 *
75 * For Eina to be able to provide more informative error messages we are going
76 * to give names to our EINA_MAGIC types:
77 * @until string_set
78 *
79 * Since our types won't live longer than the scope of the current function we
80 * can set the name without eina making a copy of the string:
81 * @until static_set
82 *
83 * Now we create a person, a pilot and print both as persons:
84 * @until person *
85 *
86 * Now we try to print both as pilots, which will obvisouly not work since base
87 * is not a pilot:
88 * @until pilot(sub
89 *
90 * That's all folks:
91 * @until }
92 *
93 * See full source @ref eina_magic_example_01_c "here".
94 */
95/**
96 * @page eina_magic_example_01_c Eina_Magic
97 * @include eina_magic_01.c
98 * @example eina_magic_01.c
99 */
100/**
101 * @addtogroup Eina_Tools_Group Tools
102 *
103 * @{
104 */
105/**
106 * @defgroup Eina_Magic_Group Magic
107 *
108 * @brief Eina_Magic provides run-time type-checking.
109 *
110 * C is a weak statically typed language, in other words, it will just check for
111 * types during compile time and any cast will make the compiler believe the
112 * type is correct.
113 *
114 * In real world code we often need to deal with casts, either explicit or
115 * implicit by means of @c void*. We also need to resort to casts when doing
116 * inheritance in C.
117 *
118 * Eina_Magic give us a way to do casts and still be certain of the type we are
119 * opearting on.
120 *
121 * @note It should be noted that it is considered good practice to @b disable
122 * Eina_Magic for production code. The reasoning is that any Eina_Magic errors
123 * should have been caught during testing and therefore there is no reason to
124 * incur the performance downside of Eina_Magic.
125 *
126 * An @ref eina_magic_example_01_page "example" should elucidate matters.
127 *
128 * @{
129 */
130
131/**
132 * An abstract type for a magic number.
133 */
134typedef unsigned int Eina_Magic;
135
136/**
137 * @brief Return the string associated to the given magic identifier.
138 *
139 * @param magic The magic identifier.
140 * @return The string associated to the identifier.
141 *
142 * This function returns the string associated to @p magic. Even if none are
143 * found this function still returns non @c NULL, in this case an identifier
144 * such as "(none)", "(undefined)" or "(unknown)".
145 *
146 * The following identifiers may be returned whenever magic is
147 * invalid, with their meanings:
148 *
149 * - (none): no magic was registered exists at all.
150 * - (undefined): magic was registered and found, but no string associated.
151 * - (unknown): magic was not found in the registry.
152 *
153 * @warning The returned value must not be freed.
154 */
155EAPI const char *eina_magic_string_get(Eina_Magic magic) EINA_WARN_UNUSED_RESULT;
156/**
157 * @brief Set the string associated to the given magic identifier.
158 *
159 * @param magic The magic identifier.
160 * @param magic_name The string associated to the identifier, must not
161 * be @c NULL.
162 *
163 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
164 *
165 * This function sets the string @p magic_name to @p magic. It is not
166 * checked if number or string are already set, in which case you will end with
167 * duplicates. Internally, eina will make a copy of @p magic_name.
168 *
169 * @see eina_magic_string_static_set()
170 */
171EAPI Eina_Bool eina_magic_string_set(Eina_Magic magic,
172 const char *magic_name) EINA_ARG_NONNULL(2);
173
174/**
175 * @brief Set the string associated to the given magic identifier.
176 *
177 * @param magic The magic identifier.
178 * @param magic_name The string associated to the identifier, must not be
179 * @c NULL.
180 *
181 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
182 *
183 * This function sets the string @p magic_name to @p magic. It is not checked if
184 * number or string are already set, in which case you might end with
185 * duplicates. Eina will @b not make a copy of @p magic_name, this means that
186 * @p magic_name has to be a valid pointer for as long as @p magic is used.
187 *
188 * @see eina_magic_string_set()
189 */
190EAPI Eina_Bool eina_magic_string_static_set(Eina_Magic magic,
191 const char *magic_name) EINA_ARG_NONNULL(2);
192
193/**
194 * @def EINA_MAGIC_NONE
195 * Random value for specifying that a structure using the magic
196 * feature has already been freed. It is used by eina_magic_fail().
197 *
198 * If the magic feature of Eina is disabled, #EINA_MAGIC_NONE is just
199 * @c 0.
200 */
201#define EINA_MAGIC_NONE 0x1234fedc
202
203#ifdef EINA_MAGIC_DEBUG
204
205/**
206 * @def EINA_MAGIC
207 * Declaration of a variable of type #Eina_Magic. To put in a structure
208 * when one wants to use the magic feature of Eina with the functions
209 * of that structure, like that:
210 *
211 * @code
212 * struct Foo
213 * {
214 * int i;
215 *
216 * EINA_MAGIC
217 * };
218 * @endcode
219 *
220 * If the magic feature of Eina is disabled, #EINA_MAGIC does nothing.
221 */
222#define EINA_MAGIC Eina_Magic __magic;
223
224/**
225 * @def EINA_MAGIC_SET(d, m)
226 * Set the magic number of @p d to @p m. @p d must be a valid pointer
227 * to a structure holding an Eina magic number declaration. Use
228 * #EINA_MAGIC to add such declaration.
229 *
230 * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just
231 * the value @c 0.
232 */
233#define EINA_MAGIC_SET(d, m) (d)->__magic = (m)
234
235/**
236 * @def EINA_MAGIC_CHECK(d, m)
237 * Test if @p d is @c NULL or not, and if not @c NULL, if
238 * @p d->__eina_magic is equal to @p m. @p d must be a structure that
239 * holds an Eina magic number declaration. Use #EINA_MAGIC to add such
240 * declaration.
241 *
242 * If the magic feature of Eina is disabled, #EINA_MAGIC_CHECK is just
243 * the value @c 1.
244 */
245#define EINA_MAGIC_CHECK(d, m) ((d) && ((d)->__magic == (m)))
246
247/**
248 * @def EINA_MAGIC_FAIL(d, m)
249 * Call eina_magic_fail() with the parameters @p d, @p d->__magic, @p
250 * m, __FILE__, __FUNCTION__ and __LINE__. @p d must be a structure that
251 * holds an Eina magic number declaration. Use #EINA_MAGIC to add such
252 * declaration.
253 *
254 * If the magic feature of Eina is disabled, #EINA_MAGIC_FAIL does
255 * nothing.
256 */
257#define EINA_MAGIC_FAIL(d, m) \
258 eina_magic_fail((void *)(d), \
259 (d) ? (d)->__magic : 0, \
260 (m), \
261 __FILE__, \
262 __FUNCTION__, \
263 __LINE__);
264
265/**
266 * @brief Display a message or abort if a magic check failed.
267 *
268 * @param d The checked data pointer.
269 * @param m The magic identifer to check.
270 * @param req_m The requested magic identifier to check.
271 * @param file The file in which the magic check failed.
272 * @param fnc The function in which the magic check failed.
273 * @param line The line at which the magic check failed.
274 *
275 * @warning You should @b strongly consider using @ref EINA_MAGIC_FAIL(d, m)
276 * instead.
277 *
278 * This function displays an error message if a magic check has
279 * failed, using the following logic in the following order:
280 * @li If @p d is @c NULL, a message warns about a @c NULL pointer.
281 * @li Otherwise, if @p m is equal to #EINA_MAGIC_NONE, a message
282 * warns about a handle that was already freed.
283 * @li Otherwise, if @p m is equal to @p req_m, a message warns about
284 * a handle that is of wrong type.
285 * @li Otherwise, a message warns you about ab-using that function...
286 *
287 * If the environment variable EINA_LOG_ABORT is set, abort() is
288 * called and the program stops. It is useful for debugging programs
289 * with gdb.
290 */
291EAPI void eina_magic_fail(void *d, Eina_Magic m, Eina_Magic req_m,
292 const char *file, const char *fnc,
293 int line) EINA_ARG_NONNULL(4, 5);
294
295#else
296
297/**
298 * @cond LOCAL
299 */
300
301#define EINA_MAGIC
302#define EINA_MAGIC_SET(d, m) ((void)0)
303#define EINA_MAGIC_CHECK(d, m) (1)
304#define EINA_MAGIC_FAIL(d, m) ((void)0)
305
306#define eina_magic_fail(d, m, req_m, file, fnx, line) ((void)0)
307
308/**
309 * @endcond
310 */
311
312#endif
313
314/**
315 * @}
316 */
317
318/**
319 * @}
320 */
321
322#endif /* EINA_MAGIC_H_ */
diff --git a/libraries/eina/src/include/eina_main.h b/libraries/eina/src/include/eina_main.h
new file mode 100644
index 0000000..fa34d59
--- /dev/null
+++ b/libraries/eina/src/include/eina_main.h
@@ -0,0 +1,162 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_MAIN_H_
20#define EINA_MAIN_H_
21
22#include "eina_types.h"
23
24/**
25 * @addtogroup Eina_Main_Group Main
26 *
27 * @brief These functions provide general initialisation and shut down
28 * functions.
29 */
30
31/**
32 * @addtogroup Eina_Core_Group Core
33 *
34 * @{
35 */
36
37/**
38 * @defgroup Eina_Main_Group Main
39 *
40 * @{
41 */
42
43/**
44 * @def EINA_VERSION_MAJOR
45 * @brief Major version of Eina
46 */
47#define EINA_VERSION_MAJOR 1
48
49/**
50 * @def EINA_VERSION_MINOR
51 * @brief Minor version of Eina
52 */
53#define EINA_VERSION_MINOR 0
54
55/**
56 * @typedef Eina_Version
57 * The version of Eina.
58 */
59typedef struct _Eina_Version
60{
61 int major; /**< Major component of the version */
62 int minor; /**< Minor component of the version */
63 int micro; /**< Micro component of the version */
64 int revision; /**< Revision component of the version */
65} Eina_Version;
66
67EAPI extern Eina_Version *eina_version;
68
69/**
70 * @brief Initialize the Eina library.
71 *
72 * @return 1 or greater on success, 0 on error.
73 *
74 * This function sets up all the eina modules. It returns 0 on
75 * failure (that is, when one of the module fails to initialize),
76 * otherwise it returns the number of times it has already been
77 * called.
78 *
79 * When Eina is not used anymore, call eina_shutdown() to shut down
80 * the Eina library.
81 */
82EAPI int eina_init(void);
83
84/**
85 * @brief Shut down the Eina library.
86 *
87 * @return 0 when all the modules is completely shut down, 1 or
88 * greater otherwise.
89 *
90 * This function shuts down the Eina library. It returns 0 when it has
91 * been called the same number of times than eina_init(). In that case
92 * it shut down all the Eina modules.
93 *
94 * Once this function succeeds (that is, @c 0 is returned), you must
95 * not call any of the Eina function anymore. You must call
96 * eina_init() again to use the Eina functions again.
97 */
98EAPI int eina_shutdown(void);
99
100/**
101 * @brief Initialize the mutexes of the Eina library.
102 *
103 * @return 1 or greater on success, 0 on error.
104 *
105 * This function sets up all the mutexes in all eina modules. It returns 0 on
106 * failure (that is, when one of the module fails to initialize),
107 * otherwise it returns the number of times it has already been
108 * called.
109 *
110 * When the mutexes are not used anymore, call eina_threads_shutdown() to shut down
111 * the mutexes.
112 *
113 * This function should never be called outside of the main loop.
114 */
115EAPI int eina_threads_init(void);
116
117/**
118 * @brief Shut down mutexes in the Eina library.
119 *
120 * @return 0 when all mutexes are completely shut down, 1 or
121 * greater otherwise.
122 *
123 * This function shuts down the mutexes in the Eina library. It returns 0 when it has
124 * been called the same number of times than eina_threads_init(). In that case
125 * it shut down all the mutexes.
126 *
127 * Once this function succeeds (that is, @c 0 is returned), you must
128 * not call any of the Eina function in a thread anymore. You must call
129 * eina_threads_init() again to use the Eina functions in a thread again.
130 *
131 * This function should never be called outside of the main loop.
132 */
133EAPI int eina_threads_shutdown(void);
134
135/**
136 * @brief Check if you are calling this function from the same thread Eina was initialized or not
137 * @since 1.1.0
138 *
139 * Most EFL function are not thread safe and all the call need to happen in
140 * the main loop. With this call you could know if you can call an EFL
141 * function or not.
142 */
143EAPI Eina_Bool eina_main_loop_is(void);
144
145/**
146 * @brief You should never use that function excpet if you really really know what your are doing.
147 * @since 1.1.0
148 *
149 * If you are reading this documentation, that certainly means you don't know what is the purpose of
150 * this call and you should just not use it.
151 */
152EAPI void eina_main_loop_define(void);
153
154/**
155 * @}
156 */
157
158/**
159 * @}
160 */
161
162#endif /* EINA_MAIN_H_ */
diff --git a/libraries/eina/src/include/eina_matrixsparse.h b/libraries/eina/src/include/eina_matrixsparse.h
new file mode 100644
index 0000000..97d1ca5
--- /dev/null
+++ b/libraries/eina/src/include/eina_matrixsparse.h
@@ -0,0 +1,399 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2009 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_MATRIXSPARSE_H_
20#define EINA_MATRIXSPARSE_H_
21
22#include <stdlib.h>
23
24#include "eina_config.h"
25
26#include "eina_types.h"
27#include "eina_iterator.h"
28#include "eina_accessor.h"
29
30/**
31 * @addtogroup Eina_Matrixsparse_Group Sparse Matrix
32 *
33 * @brief These functions provide matrix sparse management.
34 *
35 * For more information, you can look at the @ref tutorial_matrixsparse_page.
36 */
37
38/**
39 * @addtogroup Eina_Data_Types_Group Data Types
40 *
41 * @{
42 */
43
44/**
45 * @addtogroup Eina_Containers_Group Containers
46 *
47 * @{
48 */
49
50/**
51 * @defgroup Eina_Matrixsparse_Group Sparse Matrix
52 *
53 * @{
54 */
55
56/**
57 * @typedef Eina_Matrixsparse
58 * Type for a generic sparse matrix.
59 */
60typedef struct _Eina_Matrixsparse Eina_Matrixsparse;
61
62/**
63 * @typedef Eina_Matrixsparse_Row
64 * Type for a generic sparse matrix row, opaque for users.
65 */
66typedef struct _Eina_Matrixsparse_Row Eina_Matrixsparse_Row;
67
68/**
69 * @typedef Eina_Matrixsparse_Cell
70 * Type for a generic sparse matrix cell, opaque for users.
71 */
72typedef struct _Eina_Matrixsparse_Cell Eina_Matrixsparse_Cell;
73
74/* constructors and destructors */
75
76/**
77 * @brief Create a new Sparse Matrix.
78 *
79 * @param rows number of rows in matrix. Operations with rows greater than this
80 * value will fail.
81 * @param cols number of columns in matrix. Operations with columns greater
82 * than this value will fail.
83 * @param free_func used to delete cell data contents, used by
84 * eina_matrixsparse_free(), eina_matrixsparse_size_set(),
85 * eina_matrixsparse_row_idx_clear(),
86 * eina_matrixsparse_column_idx_clear(),
87 * eina_matrixsparse_cell_idx_clear() and possible others.
88 * @param user_data given to @a free_func as first parameter.
89 *
90 * @return newly allocated matrix or NULL if allocation failed and eina_error
91 * is set.
92 */
93EAPI Eina_Matrixsparse *eina_matrixsparse_new(unsigned long rows,
94 unsigned long cols,
95 void (*free_func)(void *user_data,
96 void *cell_data),
97 const void *user_data);
98
99/**
100 * @brief Free resources allocated to Sparse Matrix.
101 *
102 * @param m The Sparse Matrix instance to free, must @b not be @c NULL.
103 */
104EAPI void eina_matrixsparse_free(Eina_Matrixsparse *m);
105
106/* size manipulation */
107
108/**
109 * @brief Get the current size of Sparse Matrix.
110 *
111 * The given parameters are guaranteed to be set if they're not NULL,
112 * even if this function fails (ie: @a m is not a valid matrix instance).
113 *
114 * @param m the sparse matrix to operate on.
115 * @param rows returns the number of rows, may be NULL. If @a m is invalid,
116 * returned value is zero, otherwise it's a positive integer.
117 * @param cols returns the number of columns, may be NULL. If @a m is
118 * invalid, returned value is zero, otherwise it's a positive integer.
119 */
120EAPI void eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
121 unsigned long *rows,
122 unsigned long *cols);
123
124/**
125 * @brief Resize the Sparse Matrix.
126 *
127 * This will resize the sparse matrix, possibly freeing cells on rows
128 * and columns that will cease to exist.
129 *
130 * @param m the sparse matrix to operate on.
131 * @param rows the new number of rows, must be greater than zero.
132 * @param cols the new number of columns, must be greater than zero.
133 * @return 1 on success, 0 on failure.
134 *
135 * @warning cells, rows or columns are not reference counted and thus
136 * after this call any reference might be invalid if instance were
137 * freed.
138 */
139EAPI Eina_Bool eina_matrixsparse_size_set(Eina_Matrixsparse *m,
140 unsigned long rows,
141 unsigned long cols);
142
143/* data getting */
144
145/**
146 * Get the cell reference inside Sparse Matrix.
147 *
148 * @param m the sparse matrix to operate on.
149 * @param row the new number of row to clear.
150 * @param col the new number of column to clear.
151 * @param cell pointer to return cell reference, if any exists.
152 *
153 * @return 1 on success, 0 on failure. It is considered success if did not
154 * exist but index is inside matrix size, in this case @c *cell == NULL
155 *
156 * @see eina_matrixsparse_cell_data_get()
157 * @see eina_matrixsparse_data_idx_get()
158 */
159EAPI Eina_Bool eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col, Eina_Matrixsparse_Cell **cell);
160
161/**
162 * Get data associated with given cell reference.
163 *
164 * @param cell given cell reference, must @b not be @c NULL.
165 *
166 * @return data associated with given cell.
167 *
168 * @see eina_matrixsparse_cell_idx_get()
169 * @see eina_matrixsparse_data_idx_get()
170 */
171EAPI void *eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell);
172
173/**
174 * Get data associated with given cell given its indexes.
175 *
176 * @param m the sparse matrix to operate on.
177 * @param row the new number of row to clear.
178 * @param col the new number of column to clear.
179 *
180 * @return data associated with given cell or NULL if nothing is associated.
181 *
182 * @see eina_matrixsparse_cell_idx_get()
183 * @see eina_matrixsparse_cell_data_get()
184 */
185EAPI void *eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m, unsigned long row, unsigned long col);
186
187/**
188 * Get position (indexes) of the given cell.
189 *
190 * @param cell the cell reference, must @b not be @c NULL.
191 * @param row where to store cell row number, may be @c NULL.
192 * @param col where to store cell column number, may be @c NULL.
193 *
194 * @return 1 on success, 0 otherwise (@c cell is @c NULL).
195 */
196EAPI Eina_Bool eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell, unsigned long *row, unsigned long *col);
197
198/* data setting */
199
200/**
201 * Change cell reference value without freeing the possibly existing old value.
202 *
203 * @param cell the cell reference, must @b not be @c NULL.
204 * @param data new data to set.
205 * @param p_old returns the old value intact (not freed).
206 *
207 * @return 1 on success, 0 otherwise (@a cell is @c NULL).
208 *
209 * @see eina_matrixsparse_cell_data_set()
210 * @see eina_matrixsparse_data_idx_replace()
211 */
212EAPI Eina_Bool eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell, const void *data, void **p_old);
213
214/**
215 * Change cell value freeing the possibly existing old value.
216 *
217 * In contrast to eina_matrixsparse_cell_data_replace(), this function will
218 * call @c free_func() on existing value.
219 *
220 * @param cell the cell reference, must @b not be @c NULL.
221 * @param data new data to set.
222 *
223 * @return 1 on success, 0 otherwise (@a cell is @c NULL).
224 *
225 * @see eina_matrixsparse_cell_data_replace()
226 * @see eina_matrixsparse_data_idx_set()
227 */
228EAPI Eina_Bool eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data);
229
230/**
231 * Change cell value without freeing the possibly existing old value, using
232 * indexes.
233 *
234 * @param m the sparse matrix, must @b not be @c NULL.
235 * @param row the row number to set the value.
236 * @param col the column number to set the value.
237 * @param data new data to set.
238 * @param p_old returns the old value intact (not freed).
239 *
240 * @return 1 on success, 0 otherwise (@a m is @c NULL, indexes are not valid).
241 *
242 * @see eina_matrixsparse_cell_data_replace()
243 * @see eina_matrixsparse_data_idx_set()
244 */
245EAPI Eina_Bool eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data, void **p_old);
246
247/**
248 * Change cell value freeing the possibly existing old value, using
249 * indexes.
250 *
251 * In contrast to eina_matrixsparse_data_idx_replace(), this function will
252 * call @c free_func() on existing value.
253 *
254 * @param m the sparse matrix, must @b not be @c NULL.
255 * @param row the row number to set the value.
256 * @param col the column number to set the value.
257 * @param data new data to set.
258 *
259 * @return 1 on success, 0 otherwise (@a m is @c NULL, indexes are not valid).
260 *
261 * @see eina_matrixsparse_cell_data_replace()
262 */
263EAPI Eina_Bool eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m, unsigned long row, unsigned long col, const void *data);
264
265/* data deleting */
266
267/**
268 * Clear (erase all cells) of row given its index.
269 *
270 * Existing cells will be cleared with @c free_func() given to
271 * eina_matrixsparse_new().
272 *
273 * @param m the sparse matrix to operate on.
274 * @param row the new number of row to clear.
275 *
276 * @return 1 on success, 0 on failure. It is considered success if row
277 * had no cells filled. Failure is asking for clear row outside
278 * matrix size.
279 *
280 * @warning cells, rows or columns are not reference counted and thus
281 * after this call any reference might be invalid if instance were
282 * freed.
283 */
284EAPI Eina_Bool eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row);
285
286/**
287 * Clear (erase all cells) of column given its index.
288 *
289 * Existing cells will be cleared with @c free_func() given to
290 * eina_matrixsparse_new().
291 *
292 * @param m the sparse matrix to operate on.
293 * @param col the new number of column to clear.
294 *
295 * @return 1 on success, 0 on failure. It is considered success if column
296 * had no cells filled. Failure is asking for clear column outside
297 * matrix size.
298 *
299 * @warning cells, rows or columns are not reference counted and thus
300 * after this call any reference might be invalid if instance were
301 * freed.
302 */
303EAPI Eina_Bool eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col);
304
305/**
306 * Clear (erase) cell given its indexes.
307 *
308 * Existing cell will be cleared with @c free_func() given to
309 * eina_matrixsparse_new().
310 *
311 * @param m the sparse matrix to operate on.
312 * @param row the new number of row to clear.
313 * @param col the new number of column to clear.
314 *
315 * @return 1 on success, 0 on failure. It is considered success if did not
316 * exist but index is inside matrix size.
317 *
318 * @warning cells, rows or columns are not reference counted and thus
319 * after this call any reference might be invalid if instance were
320 * freed. Note that this call might delete container column and
321 * row if this cell was the last remainder.
322 */
323EAPI Eina_Bool eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m, unsigned long row, unsigned long col);
324
325/**
326 * Clear (erase) cell given its reference.
327 *
328 * @param cell the cell reference, must @b not be @c NULL.
329 *
330 * @return 1 on success, 0 on failure.
331 *
332 * @warning cells, rows or columns are not reference counted and thus
333 * after this call any reference might be invalid if instance were
334 * freed. Note that this call might delete container column and
335 * row if this cell was the last remainder.
336 */
337EAPI Eina_Bool eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell);
338
339/* iterators */
340
341/**
342 * Creates a new iterator over existing matrix cells.
343 *
344 * This is a cheap walk, it will just report existing cells and holes
345 * in the sparse matrix will be ignored. That means the reported
346 * indexes will not be sequential.
347 *
348 * The iterator data will be the cell reference, one may query current
349 * position with eina_matrixsparse_cell_position_get() and cell value
350 * with eina_matrixsparse_cell_data_get().
351 *
352 * @param m The Sparse Matrix reference, must @b not be @c NULL.
353 * @return A new iterator.
354 *
355 * @warning if the matrix structure changes then the iterator becomes
356 * invalid! That is, if you add or remove cells this iterator
357 * behavior is undefined and your program may crash!
358 */
359EAPI Eina_Iterator *eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m);
360
361/**
362 * Creates a new iterator over all matrix cells.
363 *
364 * Unlike eina_matrixsparse_iterator_new() this one will report all
365 * matrix cells, even those that are still empty (holes). These will
366 * be reported as dummy cells that contains no data.
367 *
368 * Be aware that iterating a big matrix (1000x1000) will call your
369 * function that number of times (1000000 times in that case) even if
370 * your matrix have no elements at all!
371 *
372 * The iterator data will be the cell reference, one may query current
373 * position with eina_matrixsparse_cell_position_get() and cell value
374 * with eina_matrixsparse_cell_data_get(). If cell is empty then the
375 * reference will be a dummy/placeholder, thus setting value with
376 * eina_matrixsparse_cell_data_set() will leave pointer unreferenced.
377 *
378 * @param m The Sparse Matrix reference, must @b not be @c NULL.
379 * @return A new iterator.
380 *
381 * @warning if the matrix structure changes then the iterator becomes
382 * invalid! That is, if you add or remove cells this iterator
383 * behavior is undefined and your program may crash!
384 */
385EAPI Eina_Iterator *eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m);
386
387/**
388 * @}
389 */
390
391/**
392 * @}
393 */
394
395/**
396 * @}
397 */
398
399#endif /* EINA_MATRIXSPARSE_H_ */
diff --git a/libraries/eina/src/include/eina_mempool.h b/libraries/eina/src/include/eina_mempool.h
new file mode 100644
index 0000000..796bc9e
--- /dev/null
+++ b/libraries/eina/src/include/eina_mempool.h
@@ -0,0 +1,123 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_MEMPOOL_H_
20#define EINA_MEMPOOL_H_
21
22#include "eina_types.h"
23#include "eina_error.h"
24#include "eina_module.h"
25
26
27/**
28 * @addtogroup Eina_Memory_Pool_Group Memory Pool
29 *
30 * @brief These functions provide memory pool management.
31 *
32 * Several mempool are available:
33 *
34 * @li @c buddy: It uses the
35 * <a href="http://en.wikipedia.org/wiki/Buddy_memory_allocation">"buddy
36 * allocator" algorithm</a> but the Eina implementation differs in the
37 * sense that the chunk information is not stored on the chunk itself,
38 * but on another memory area. This is useful for cases where the
39 * memory to manage might be slower to access, or limited (like video
40 * memory).
41 * @li @c chained_pool: It is the default one. It allocates a big
42 * chunk of memory with malloc() and split the result in chunks of the
43 * requested size that are pushed inside a stack. When requested, it
44 * takes this pointer from the stack to give them to whoever wants
45 * them.
46 * @li @c ememoa_fixed and @c ememoa_unknown: experimental allocators
47 * which could be useful when a fixed amount of memory is needed.
48 * @li @c fixed_bitmap: It allocates with malloc) 32* the requested
49 * size and push the pool pointer in an rbtree. To find empty space in
50 * a pool, it will just search for the first bit set in an int (32
51 * bits). Then, when a pointer is freed, it will do a search inside
52 * the rbtree.
53 * @li @c pass_through: it just call malloc() and free(). It may be
54 * faster on some computers than using our own allocators (like having
55 * a huge L2 cache, over 4MB).
56 * @li @c one_big: It call just one time malloc for the requested number
57 * of items. Useful when you know in advance how many object of some
58 * type will live during the life of the mempool.
59 */
60
61/**
62 * @addtogroup Eina_Tools_Group Tools
63 *
64 * @{
65 */
66
67/**
68 * @defgroup Eina_Memory_Pool_Group Memory Pool
69 *
70 * @{
71 */
72
73/**
74 * @typedef Eina_Mempool
75 * Mempool type.
76 */
77typedef struct _Eina_Mempool Eina_Mempool;
78
79/**
80 * @typedef Eina_Mempool_Backend
81 * Mempool backend type.
82 */
83typedef struct _Eina_Mempool_Backend Eina_Mempool_Backend;
84
85
86/**
87 * @typedef Eina_Mempool_Repack_Cb
88 * Type for a callback who need to unreference an old object from a mempool
89 * and reference the new one instead. Memcpy is taken care by the mempool.
90 */
91typedef void (*Eina_Mempool_Repack_Cb)(void *dst, void *src, void *data);
92
93EAPI extern Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE;
94
95EAPI Eina_Mempool *eina_mempool_add(const char *module, const char *context, const char *options, ...) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
96EAPI void eina_mempool_del(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
97
98static inline void *eina_mempool_realloc(Eina_Mempool *mp, void *element, unsigned int size) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
99static inline void *eina_mempool_malloc(Eina_Mempool *mp, unsigned int size) EINA_MALLOC EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
100static inline void eina_mempool_free(Eina_Mempool *mp, void *element) EINA_ARG_NONNULL(1);
101
102EAPI void eina_mempool_repack(Eina_Mempool *mp,
103 Eina_Mempool_Repack_Cb cb,
104 void *data) EINA_ARG_NONNULL(1, 2);
105EAPI void eina_mempool_gc(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
106EAPI void eina_mempool_statistics(Eina_Mempool *mp) EINA_ARG_NONNULL(1);
107
108EAPI Eina_Bool eina_mempool_register(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
109EAPI void eina_mempool_unregister(Eina_Mempool_Backend *be) EINA_ARG_NONNULL(1);
110
111EAPI unsigned int eina_mempool_alignof(unsigned int size);
112
113#include "eina_inline_mempool.x"
114
115/**
116 * @}
117 */
118
119/**
120 * @}
121 */
122
123#endif /* EINA_MEMPOOL_H_ */
diff --git a/libraries/eina/src/include/eina_mmap.h b/libraries/eina/src/include/eina_mmap.h
new file mode 100644
index 0000000..d7e3819
--- /dev/null
+++ b/libraries/eina/src/include/eina_mmap.h
@@ -0,0 +1,59 @@
1#ifndef EINA_MMAP_H_
2#define EINA_MMAP_H_
3
4/**
5 * @addtogroup Eina_Mmap_Group Mmap Group
6 *
7 * @brief These functions provide helpers for safe mmap handling
8 *
9 * @{
10 *
11 * @since 1.1.0
12 */
13
14/**
15 * @brief Enable or disable safe mmaped IO handling
16 *
17 * @param enabled The enabled state (to enable, pass EINA_TRUE)
18 *
19 * This enables (if possible on your platform) a signal handler for
20 * SIGBUS, that replaces the "bad page" with a pzge of 0's (from /dev/zero)
21 * if a SIGBUS occurs. This allows for safe mmap() of files that may truncate
22 * or from files on devices with IO errors. Normally these cases will result
23 * in a SIGBUS being delivered (and termination of yyour process), but
24 * when "mmap safety" is enabled, this will not occur. Instead a page of
25 * bytes of the value 0 will replace the "bad page", allowing the process
26 * to continue and allow its own parsing error detection to safely abort
27 * the operation without the process falling apart.
28 *
29 * If you disable mmap safety, the SIGBUS handler will be restored to its
30 * default handler. Note that eina_file_map_all() and eina_file_map_new()
31 * will automatically enable mmap safety as they provide an mmaped file IO
32 * layer, and rely on mmap to not fail for any part of the file.
33 *
34 * If you set up your own SIGBUS handler, then this will effectively disable
35 * the safe mmap handling and make you liable to crashes on IO to or from
36 * such "damaged files" that would take down your process.
37 *
38 * @since 1.1.0
39 */
40EAPI Eina_Bool
41eina_mmap_safety_enabled_set(Eina_Bool enabled);
42
43/**
44 * @brief Get the enabled state of mmap safety.
45 *
46 * @return The safety state (EINA_TRUE if enabled)
47 *
48 * This returns the mmap safety state set by eina_mmap_safety_enabled_set().
49 * See eina_mmap_safety_enabled_set() for more information.
50 *
51 * @since 1.1.0
52 */
53EAPI Eina_Bool
54eina_mmap_safety_enabled_get(void);
55
56/**
57 * @}
58 */
59#endif
diff --git a/libraries/eina/src/include/eina_module.h b/libraries/eina/src/include/eina_module.h
new file mode 100644
index 0000000..58e38f9
--- /dev/null
+++ b/libraries/eina/src/include/eina_module.h
@@ -0,0 +1,343 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_MODULE_H_
20#define EINA_MODULE_H_
21
22#include "eina_types.h"
23#include "eina_array.h"
24#include "eina_error.h"
25
26/**
27 * @addtogroup Eina_Module_Group Module
28 *
29 * @brief These functions provide module management.
30 */
31
32/**
33 * @addtogroup Eina_Tools_Group Tools
34 *
35 * @{
36 */
37
38/**
39 * @defgroup Eina_Module_Group Module
40 *
41 * Eina module provides some helpers over POSIX dlopen(). It is not
42 * meant to replace, abstract or make a "portable" version of the
43 * POSIX, but enhance its usage by defining some good practices.
44 *
45 * Modules are created with eina_module_new() and later loaded with
46 * eina_module_load(). Loads are reference counted and there must be
47 * the same number of eina_module_unload() in order to have it to call
48 * dlclose(). This makes simple to have different users for the same
49 * module.
50 *
51 * The loaded shared objects may have two visible functions that will
52 * be called and might provide initialization and shutdown
53 * proceedures. The symbols are @c __eina_module_init and
54 * @c __eina_module_shutdown and will be defined by the macros
55 * EINA_MODULE_INIT() and EINA_MODULE_SHUTDOWN().
56 *
57 * There are some helpers to automatically create modules based on
58 * directory listing. See eina_module_arch_list_get(),
59 * eina_module_list_get() and eina_module_find().
60 *
61 * @{
62 */
63
64/**
65 * @typedef Eina_Module
66 * Dynamic module loader handle.
67 */
68typedef struct _Eina_Module Eina_Module;
69
70typedef Eina_Bool (*Eina_Module_Cb)(Eina_Module *m, void *data);
71
72/**
73 * @typedef Eina_Module_Init
74 * If a function with such signature is exported by module as
75 * __eina_module_init, it will be called on the first load after
76 * dlopen() and if #EINA_FALSE is returned, load will fail, #EINA_TRUE
77 * means the module was successfully initialized.
78 * @see Eina_Module_Shutdown
79 */
80typedef Eina_Bool (*Eina_Module_Init)(void);
81
82/**
83 * @typedef Eina_Module_Shutdown
84 * If a function with such signature is exported by module as
85 * __eina_module_shutdown, it will be called before calling dlclose()
86 * @see Eina_Module_Init
87 */
88typedef void (*Eina_Module_Shutdown)(void);
89
90/**
91 * @def EINA_MODULE_INIT
92 * declares the given function as the module initializer (__eina_module_init).
93 * It must be of signature #Eina_Module_Init
94 */
95#define EINA_MODULE_INIT(f) EAPI Eina_Module_Init __eina_module_init = &f
96
97/**
98 * @def EINA_MODULE_SHUTDOWN
99 * declares the given function as the module shutdownializer
100 * (__eina_module_shutdown). It must be of signature
101 * #Eina_Module_Shutdown
102 */
103#define EINA_MODULE_SHUTDOWN(f) EAPI Eina_Module_Shutdown __eina_module_shutdown = &f
104
105/**
106 * @var EINA_ERROR_WRONG_MODULE
107 * Error identifier corresponding to a wrong module.
108 */
109extern EAPI Eina_Error EINA_ERROR_WRONG_MODULE;
110
111/**
112 * @var EINA_ERROR_MODULE_INIT_FAILED
113 * Error identifier corresponding to a failure during the initialisation of a module.
114 */
115extern EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED;
116
117/**
118 * @brief Return a new module.
119 *
120 * @param file The name of the file module to load.
121 *
122 * This function returns a new module. If @p file is @c NULL, the
123 * function returns @c NULL, otherwise, it allocates an Eina_Module,
124 * stores a duplicate string of @p file, sets its reference to @c 0
125 * and its handle to @c NULL.
126 *
127 * When the new module is not needed anymore, use eina_module_free()
128 * to free the allocated memory.
129 *
130 * @see eina_module_load
131 */
132EAPI Eina_Module *
133 eina_module_new(const char *file) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
134
135/**
136 * @brief Delete a module.
137 *
138 * @param m The module to delete.
139 * @return EINA_TRUE on success, EINA_FALSE otherwise.
140 *
141 * This function calls eina_module_unload() if @p m has been previously
142 * loaded and frees the allocated memory. On success this function
143 * returns EINA_TRUE and EINA_FALSE otherwise. If @p m is @c NULL, the
144 * function returns immediately.
145 */
146EAPI Eina_Bool
147 eina_module_free(Eina_Module *m) EINA_ARG_NONNULL(1);
148
149/**
150 * @brief Load a module.
151 *
152 * @param m The module to load.
153 * @return EINA_TRUE on success, EINA_FALSE otherwise.
154 *
155 * This function load the shared file object passed in
156 * eina_module_new(). If it is a internal Eina module (like the
157 * mempools), it also initialize it. It the shared file object can not
158 * be loaded, the error #EINA_ERROR_WRONG_MODULE is set and
159 * #EINA_FALSE is returned. If it is a internal Eina module and the
160 * module can not be initialized, the error
161 * #EINA_ERROR_MODULE_INIT_FAILED is set and #EINA_FALSE is
162 * returned. If the module has already been loaded, it's refeence
163 * counter is increased by one and #EINA_TRUE is returned. If @p m is
164 * @c NULL, the function returns immediately #EINA_FALSE.
165 *
166 * When the symbols of the shared file objetcts are not needed
167 * anymore, call eina_module_unload() to unload the module.
168 */
169EAPI Eina_Bool
170 eina_module_load(Eina_Module *module) EINA_ARG_NONNULL(1);
171
172/**
173 * @brief Unload a module.
174 *
175 * @param m The module to load.
176 * @return EINA_TRUE on success, EINA_FALSE otherwise.
177 *
178 * This function unload the module @p m that has been previously
179 * loaded by eina_module_load(). If the reference counter of @p m is
180 * strictly greater than @c 1, #EINA_FALSE is returned. Otherwise, the
181 * shared object file is closed and if it is a internal Eina module, it
182 * is shutted down just before. In that case, #EINA_TRUE is
183 * returned. In all case, the reference counter is decreased. If @p m
184 * is @c NULL, the function returns immediately #EINA_FALSE.
185 */
186EAPI Eina_Bool
187 eina_module_unload(Eina_Module *m) EINA_ARG_NONNULL(1);
188
189/**
190 * @brief Retrive the data associated to a symbol.
191 *
192 * @param m The module.
193 * @param symbol The symbol.
194 * @return The data associated to the symbol, or @c NULL on failure.
195 *
196 * This function returns the data associated to @p symbol of @p m. @p
197 * m must have been loaded before with eina_module_load(). If @p m
198 * is @c NULL, or if it has not been correctly loaded before, the
199 * function returns immediately @c NULL.
200 */
201EAPI void *
202 eina_module_symbol_get(const Eina_Module *module, const char *symbol) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
203
204/**
205 * @brief Return the file name associated to the module.
206 *
207 * @param m The module.
208 * @return The file name.
209 *
210 * This function returns the file name passed in eina_module_new(). If
211 * @p m is @c NULL, the function returns immediately @c NULL. The
212 * returned value must no be freed.
213 */
214EAPI const char *
215 eina_module_file_get(const Eina_Module *m) EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
216
217
218/**
219 * @brief Return the path built from the location of a library and a
220 * given sub directory.
221 *
222 * @param symbol The symbol to search for.
223 * @param sub_dir The subdirectory to append.
224 * @return The built path on success, @c NULL otherwise.
225 *
226 * This function returns the path built by concatenating the path of
227 * the library containing the symbol @p symbol and @p sub_dir. @p sub_dir
228 * can be @c NULL. The returned path must be freed when not used
229 * anymore. If the symbol is not found, or dl_addr() is not supported,
230 * or allocation fails, this function returns @c NULL.
231 */
232EAPI char *
233 eina_module_symbol_path_get(const void *symbol, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
234
235/**
236 * @brief Return the path built from the value of an environment varialbe and a
237 * given sub directory.
238 *
239 * @param env The environment variable to expand.
240 * @param sub_dir The subdirectory to append.
241 * @return The built path on success, @c NULL otherwise.
242 *
243 * This function returns the path built by concatenating the value of
244 * the environment variable named @p env and @p sub_dir. @p sub_dir
245 * can be @c NULL. The returned path must be freed when not used
246 * anymore. If the symbol is not found, or @p env does not exist, or
247 * allocation fails, this function returns @c NULL.
248 */
249EAPI char *
250 eina_module_environment_path_get(const char *env, const char *sub_dir) EINA_PURE EINA_MALLOC EINA_ARG_NONNULL(1, 2);
251
252
253/**
254 * @brief Get an array of modules found on the directory path matching an arch type.
255 *
256 * @param array The array that stores the list of the modules.
257 * @param path The directory's path to search for modules.
258 * @param arch The architecture string.
259 *
260 * This function adds to @p array the module names found in @p path
261 * which match the cpu architecture @p arch. If @p path or @p arch is
262 * @c NULL, the function returns immediately @p array. @p array can be
263 * @c NULL. In that case, it is created with 4 elements.
264 */
265EAPI Eina_Array *
266 eina_module_arch_list_get(Eina_Array *array, const char *path, const char *arch);
267
268/**
269 * @brief Get a list of modules found on the directory path.
270 *
271 * @param array The array that stores the list of the modules.
272 * @param path The directory's path to search for modules.
273 * @param recursive Iterate recursively on the path.
274 * @param cb Callback function to call on each module.
275 * @param data Data passed to the callback function.
276 *
277 * This function adds to @p array the list of modules found in
278 * @p path. If @p recursive is #EINA_TRUE, then recursive search is
279 * done. The callback @p cb is called on each module found, and @p data
280 * is passed to @p cb. If @p path is @c NULL, the function returns
281 * immediately @p array. If the returned value of @p cb is 0, the
282 * module will not be added to the list, otherwise it will be added.
283 * @p array can be @c NULL. In that case, it is created with 4
284 * elements. @p cb can be @c NULL.
285 */
286EAPI Eina_Array *
287 eina_module_list_get(Eina_Array *array, const char *path, Eina_Bool recursive, Eina_Module_Cb cb, void *data) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
288
289/**
290 * @brief Load every module on the list of modules.
291 *
292 * @param array The array of modules to load.
293 *
294 * This function calls eina_module_load() on each element found in
295 * @p array. If @p array is @c NULL, this function does nothing.
296 */
297EAPI void
298 eina_module_list_load(Eina_Array *list) EINA_ARG_NONNULL(1);
299
300/**
301 * @brief Unload every module on the list of modules.
302 *
303 * @param array The array of modules to unload.
304 *
305 * This function calls eina_module_unload() on each element found in
306 * @p array. If @p array is @c NULL, this function does nothing.
307 */
308EAPI void
309 eina_module_list_unload(Eina_Array *list) EINA_ARG_NONNULL(1);
310
311/**
312 * @p Free every module on the list of modules.
313 *
314 * @param array The array of modules to free.
315 *
316 * This function calls eina_module_free() on each element found in
317 * @p array. If @p array is @c NULL, this function does nothing.
318 */
319EAPI void
320 eina_module_list_free(Eina_Array *list) EINA_ARG_NONNULL(1);
321
322/**
323 * @brief Find an module in array.
324 *
325 * @param array The array to find the module.
326 * @param module The name of module to be searched.
327 *
328 * This function finds an @p module in @p array.
329 * If the element is found the function returns the module, else
330 * @c NULL is returned.
331 */
332EAPI Eina_Module *
333 eina_module_find(const Eina_Array *array, const char *module) EINA_ARG_NONNULL(1, 2);
334
335/**
336 * @}
337 */
338
339/**
340 * @}
341 */
342
343#endif /*EINA_MODULE_H_*/
diff --git a/libraries/eina/src/include/eina_prefix.h b/libraries/eina/src/include/eina_prefix.h
new file mode 100644
index 0000000..b59080b
--- /dev/null
+++ b/libraries/eina/src/include/eina_prefix.h
@@ -0,0 +1,228 @@
1#ifndef EINA_PREFIX_H_
2#define EINA_PREFIX_H_
3
4/**
5 * @addtogroup Eina_Prefix_Group Prefix Group
6 *
7 * @brief These functions provide the ability to determine the runtime
8 * location of a software package
9 *
10 * @{
11 *
12 * @since 1.1.0
13 */
14
15/**
16 * @typedef Eina_Prefix
17 * This is a prefix object that is returned by eina_prefix_new() when trying
18 * to determine the runtime location of the software in question so other
19 * data files such as images, sound files, other executable utilities,
20 * libraries, modules and locale files can be found.
21 *
22 * @since 1.1.0
23 */
24typedef struct _Eina_Prefix Eina_Prefix;
25
26/**
27 * @brief Create a new prefix handle given some input information
28 *
29 * @param argv0 If this is an executable this is argv[0] of the binary, or NULL if it is used from a shared library
30 * @param symbol This is a symbol (function for example) inside the binary or library to find the source location of. Provide NULL if not used
31 * @param envprefix This is the prefix to any environment variables that may override prefix detection and give the exact location of the software
32 * @param sharedir This is the directory inside the standard share or data dir where the software will store data files
33 * @param magicsharefile This is a magic file to check existence of to determine the prefix find was correct, and it must be located in the data dir under the share dir provided above, or NULL if the check is not to be done
34 * @param pkg_bin This is the compile-time binary install dir
35 * @param pkg_lib This is the compile-time library install dir
36 * @param pkg_data This is the compile-time share/data install dir
37 * @param pkg_locale This is the compile-time locale install dir
38 * @return The prefix handle, or NULL on failure
39 *
40 * Applications and libraries are most often not just single executables nor
41 * single shared library binares, but also come with extra modules they
42 * have to load, extra binary utilities they need to run, or have data files
43 * they need to load. A very primitve application ASSUMES a fixed install
44 * location at compile-time, but this disallows the ability to re-locate
45 * the application (or library) somewhere else after compilation (if you run
46 * out of space on a given disk, partition etc. for example), or necessitate
47 * the need for having to maintain environment variables for every piece of
48 * software to let it know its location, or have to use large sets of
49 * symlinks pointing from the compiled location to the new one.
50 *
51 * Being re-locatable at runtime allows much easier distribution and
52 * installation into places like the users own home directory, instead of
53 * on a system partition, if the developer wishes for easier distribution
54 * of pre-compiled binaries.
55 *
56 * The prefix system is designed to locate where the given software is
57 * installed (under a common prefix) at runtime and then report specific
58 * locations of this prefix and common directories inside this prefix like
59 * the binary, library, data and locale directories.
60 *
61 * To do this some information needs to be provided to eina_prefix_new(). If
62 * you have developed a binary executable, then provide argv[0] as the @p argv0
63 * argument. This plus the PATH environment variable help the prefix system
64 * to determine its location. Call eina_prefix_new() early on before you
65 * change working directory or anything about argv[0] so it gets accurate
66 * information. It will use the first argument, being the executable itself,
67 * to look in absolute directories, relative paths and PATH to see if it
68 * finds the right executable to determine just where the actual binary is
69 * installed and being run from. If you develop a share library, just pass
70 * NULL as argv0
71 *
72 * It would prefer to use the @p symbol function to determine location as
73 * that function will be unique inside the application and try and trace
74 * back which file this function comes from (be it a binary or shared library)
75 * as this avoids more expensive searches via @p argv0. It will use this
76 * symbol if given in preference to argv0.
77 *
78 * The @p envprefix parameter, provides a string prefix to prepend before
79 * environment variables to allow a fallback to specific environment variables
80 * to locate the software. For example if "MYAPP" is provided a the prefix,
81 * then it uses "MYAPP_PREFIX" as a master environment variable to specify
82 * the exact install prefix for the software, or more specific environment
83 * variables like "MYAPP_BIN_DIR", "MYAPP_LIB_DIR", "MYAPP_DATA_DIR" and
84 * "MYAPP_LOCALE_DIR" which can be set by the user or scripts before
85 * launching. If not provided (NULL) environment variables will not be
86 * used to override compiled-in defaults or auto detections.
87 *
88 * The @p sharedir string provides a subdirectory inside the system shared
89 * data dir for data files. For example, if the system dir is
90 * /usr/local/share then this dir name is appended, creating
91 * /usr/local/share/appname if this dir was the "appname" string. It is
92 * expected the application or library installs data files in this directory.
93 *
94 * The @p magicsharefile is a filename or path of something inside the share
95 * or data dir to be used to test that the prefix detection worked. For
96 * example, your app will install a wallpaper image as
97 * /usr/local/share/appname/images/wallpaper.jpg and so to check that this
98 * worked, provide "images/wallpaper.jpg" as the @p magicsharefile string
99 * so detection can know if it worked or not.
100 *
101 * The @p pkg_bin, @p pkg_lib, @p pkg_data and @p pkg_locale are compile-time
102 * strings (the kind standard autoconf/automake define) to be passed in
103 * so there can be a fallback to compiled-in defaults as well as use them
104 * to determine actual names of directories like libdirs maybe changing to
105 * be lib32 or lib64 instead of lib etc.
106 *
107 * Compile the following defining at compile time your prefixes like (example):
108 *
109 * gcc appname.c -o appname \
110 * -DPACKAGE_BIN_DIR=/usr/local/bin \
111 * -DPACKAGE_LIB_DIR=/usr/local/lib \
112 * -DPACKAGE_DATA_DIR=/usr/local/share/appname \
113 * -DLOCALE_DIR=/usr/local/share/locale
114 *
115 * (of course add appropriate compile flags to linking etc. etc. and note that
116 * locale dir is optional. if you don't need it provide data dir as the
117 * locale dir. also note that the magicsharefile is optional for testing and
118 * ensuring that the prefix check is correct. this file must be installed
119 * in the application data dir (eg /usr/local/share/appname) and be referred
120 * to using a unix-style relative path from that dir, eg directory/filename.png)
121 *
122 * @code
123 * static Eina_Prefix *pfx = NULL;
124 *
125 * int main(argc, char **argv)
126 * {
127 * pfx = eina_prefix_new(argv[0], main, "APPNAME", "appname", NULL,
128 * PACKAGE_BIN_DIR, PACKAGE_LIB_DIR,
129 * PACKAGE_DATA_DIR, LOCALE_DIR);
130 * if (!pfx) printf("ERROR: Critical error in finding prefix\n");
131 * printf("install prefix is: %s\n", eina_prefix_get(pfx));
132 * printf("binaries are in: %s\n", eina_prefix_bin_get(pfx));
133 * printf("libraries are in: %s\n", eina_prefix_lib_get(pfx));
134 * printf("data files are in: %s\n", eina_prefix_data_get(pfx));
135 * eina_prefix_free(pfx);
136 * }
137 * @endcode
138 *
139 * @since 1.1.0
140 */
141EAPI Eina_Prefix *
142eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
143 const char *sharedir, const char *magicsharefile,
144 const char *pkg_bin, const char *pkg_lib,
145 const char *pkg_data, const char *pkg_locale);
146
147/**
148 * @brief Free the prefix object and all its contents
149 *
150 * @param pfx The prefix object
151 *
152 * Free the prefix object and all its allocated content. It will be invalid
153 * to access the object after being freed.
154 *
155 * @since 1.1.0
156 */
157EAPI void
158eina_prefix_free(Eina_Prefix *pfx);
159
160/**
161 * @brief Get the prefix base directory
162 *
163 * @param pfx The prefix object
164 *
165 * This returns the base prefix (eg "/usr/local", "/usr", "/opt/appname" or
166 * "/home/user/myapps/appname" etc.) that the software resides in at runtime.
167 *
168 * @since 1.1.0
169 */
170EAPI const char *
171eina_prefix_get(Eina_Prefix *pfx);
172
173/**
174 * @brief Get the binary installation directory
175 *
176 * @param pfx The prefix object
177 *
178 * This returns the location of installed binaries (eg "/usr/local/bin",
179 * "/usr/bin", "/opt/appname/bin", "/home/user/myapps/appname/bin" etc.).
180 *
181 * @since 1.1.0
182 */
183EAPI const char *
184eina_prefix_bin_get(Eina_Prefix *pfx);
185
186/**
187 * @brief Get the library installation directory
188 *
189 * @param pfx The prefix object
190 *
191 * This returns the location of installed binaries (eg "/usr/local/lib",
192 * "/usr/lib32", "/opt/appname/lib64", "/home/user/myapps/appname/lib" etc.).
193 *
194 * @since 1.1.0
195 */
196EAPI const char *
197eina_prefix_lib_get(Eina_Prefix *pfx);
198
199/**
200 * @brief Get the data installation directory
201 *
202 * @param pfx The prefix object
203 *
204 * This returns the location of installed binaries (eg "/usr/local/share/appname",
205 * "/usr/share/appname", "/opt/appname/share/appname", "/home/user/myapps/appname/share/appname" etc.).
206 *
207 * @since 1.1.0
208 */
209EAPI const char *
210eina_prefix_data_get(Eina_Prefix *pfx);
211
212/**
213 * @brief Get the locale installation directory
214 *
215 * @param pfx The prefix object
216 *
217 * This returns the location of installed binaries (eg "/usr/local/share/locale",
218 * "/usr/share/locale", "/opt/appname/share/locale", "/home/user/myapps/appname/share/locale" etc.).
219 *
220 * @since 1.1.0
221 */
222EAPI const char *
223eina_prefix_locale_get(Eina_Prefix *pfx);
224
225/**
226 * @}
227 */
228#endif
diff --git a/libraries/eina/src/include/eina_quadtree.h b/libraries/eina/src/include/eina_quadtree.h
new file mode 100644
index 0000000..2638d8b
--- /dev/null
+++ b/libraries/eina/src/include/eina_quadtree.h
@@ -0,0 +1,53 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_QUADTREE_H_
20#define EINA_QUADTREE_H_
21
22#include "eina_config.h"
23
24#include "eina_inlist.h"
25
26typedef struct _Eina_QuadTree Eina_QuadTree;
27typedef struct _Eina_QuadTree_Item Eina_QuadTree_Item;
28
29typedef enum {
30 EINA_QUAD_LEFT,
31 EINA_QUAD_RIGHT,
32 EINA_QUAD_BOTH
33} Eina_Quad_Direction;
34
35typedef Eina_Quad_Direction (*Eina_Quad_Callback)(const void *object, size_t middle);
36
37EAPI Eina_QuadTree *eina_quadtree_new(size_t w, size_t h, Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal);
38EAPI void eina_quadtree_free(Eina_QuadTree *q);
39EAPI void eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h);
40
41EAPI void eina_quadtree_cycle(Eina_QuadTree *q);
42EAPI void eina_quadtree_increase(Eina_QuadTree_Item *object);
43
44EAPI Eina_QuadTree_Item *eina_quadtree_add(Eina_QuadTree *q, const void *object);
45EAPI Eina_Bool eina_quadtree_del(Eina_QuadTree_Item *object);
46EAPI Eina_Bool eina_quadtree_change(Eina_QuadTree_Item *object);
47EAPI Eina_Bool eina_quadtree_hide(Eina_QuadTree_Item *object);
48EAPI Eina_Bool eina_quadtree_show(Eina_QuadTree_Item *object);
49
50EAPI Eina_Inlist *eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h);
51EAPI void *eina_quadtree_object(Eina_Inlist *list);
52
53#endif
diff --git a/libraries/eina/src/include/eina_rbtree.h b/libraries/eina/src/include/eina_rbtree.h
new file mode 100644
index 0000000..8e5b730
--- /dev/null
+++ b/libraries/eina/src/include/eina_rbtree.h
@@ -0,0 +1,271 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_RBTREE_H__
20#define EINA_RBTREE_H__
21
22#include <stdlib.h>
23
24#include "eina_types.h"
25#include "eina_error.h"
26#include "eina_iterator.h"
27
28/**
29 * @addtogroup Eina_Rbtree_Group Red-Black tree
30 *
31 * @brief These functions provide Red-Black trees management.
32 *
33 * For a brief description look at http://en.wikipedia.org/wiki/Red-black_tree .
34 * This code is largely inspired from a tutorial written by Julienne Walker at :
35 * http://eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx . The
36 * main difference is that this set of function never allocate any data, making
37 * them particularly useful for memory management.
38 */
39
40/**
41 * @addtogroup Eina_Data_Types_Group Data Types
42 *
43 * @{
44 */
45
46/**
47 * @addtogroup Eina_Containers_Group Containers
48 *
49 * @{
50 */
51
52/**
53 * @defgroup Eina_Rbtree_Group Red-Black tree
54 *
55 * @{
56 */
57
58/**
59 * @typedef Eina_Rbtree_Color
60 * node color.
61 */
62typedef enum {
63 EINA_RBTREE_RED,
64 EINA_RBTREE_BLACK
65} Eina_Rbtree_Color;
66
67/**
68 * @typedef Eina_Rbtree_Direction
69 * walk direction.
70 */
71typedef enum {
72 EINA_RBTREE_LEFT = 0,
73 EINA_RBTREE_RIGHT = 1
74} Eina_Rbtree_Direction;
75
76/**
77 * @typedef Eina_Rbtree
78 * Type for a Red-Black tree node. It should be inlined into user's type.
79 */
80typedef struct _Eina_Rbtree Eina_Rbtree;
81struct _Eina_Rbtree
82{
83 Eina_Rbtree *son[2];
84
85 Eina_Rbtree_Color color : 1;
86};
87
88/**
89 * @def EINA_RBTREE
90 * recommended way to declare the inlined Eina_Rbtree in your type.
91 *
92 * @code
93 * struct my_type {
94 * EINA_RBTREE;
95 * int my_value;
96 * char *my_name;
97 * };
98 * @endcode
99 *
100 * @see EINA_RBTREE_GET()
101 */
102#define EINA_RBTREE Eina_Rbtree __rbtree
103
104/**
105 * @def EINA_RBTREE_GET
106 * access the inlined node if it was created with #EINA_RBTREE.
107 */
108#define EINA_RBTREE_GET(Rbtree) (&((Rbtree)->__rbtree))
109
110/**
111 * @def EINA_RBTREE_CONTAINER_GET
112 * find back the container of an red black tree.
113 */
114#define EINA_RBTREE_CONTAINER_GET(Ptr, Type) ((Type *)((char *)Ptr - offsetof(Type, __rbtree)))
115
116/**
117 * @typedef Eina_Rbtree_Cmp_Node_Cb
118 * Function used compare two nodes and see which direction to navigate.
119 */
120typedef Eina_Rbtree_Direction (*Eina_Rbtree_Cmp_Node_Cb)(const Eina_Rbtree *left, const Eina_Rbtree *right, void *data);
121
122/**
123 * @def EINA_RBTREE_CMP_NODE_CB
124 * Cast using #Eina_Rbtree_Cmp_Node_Cb
125 */
126#define EINA_RBTREE_CMP_NODE_CB(Function) ((Eina_Rbtree_Cmp_Node_Cb)Function)
127
128/**
129 * @typedef Eina_Rbtree_Cmp_Key_Cb
130 * Function used compare node with a given key of specified length.
131 */
132typedef int (*Eina_Rbtree_Cmp_Key_Cb)(const Eina_Rbtree *node, const void *key, int length, void *data);
133/**
134 * @def EINA_RBTREE_CMP_KEY_CB
135 * Cast using #Eina_Rbtree_Cmp_Key_Cb
136 */
137#define EINA_RBTREE_CMP_KEY_CB(Function) ((Eina_Rbtree_Cmp_Key_Cb)Function)
138
139/**
140 * @typedef Eina_Rbtree_Free_Cb
141 * Function used free a node.
142 */
143typedef void (*Eina_Rbtree_Free_Cb)(Eina_Rbtree *node, void *data);
144/**
145 * @def EINA_RBTREE_FREE_CB
146 * Cast using #Eina_Rbtree_Free_Cb
147 */
148#define EINA_RBTREE_FREE_CB(Function) ((Eina_Rbtree_Free_Cb)Function)
149
150
151/**
152 * @brief Insert a new node inside an existing red black tree.
153 *
154 * @param root The root of an exisiting valid red black tree.
155 * @param node The new node to insert.
156 * @param cmp The callback that is able to compare two nodes.
157 * @param data Private data to help the compare function.
158 * @return The new root of the red black tree.
159 *
160 * This function insert a new node in a valid red black tree. NULL is
161 * an empty valid red black tree. The resulting new tree is a valid red
162 * black tree. This function doesn't allocate any data.
163 */
164EAPI Eina_Rbtree *eina_rbtree_inline_insert(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
165
166/**
167 * @brief Remove a node from an existing red black tree.
168 *
169 * @param root The root of a valid red black tree.
170 * @param node The node to remove from the tree.
171 * @param cmp The callback that is able to compare two nodes.
172 * @param data Private data to help the compare function.
173 * @return The new root of the red black tree.
174 *
175 * This function remove a new node in a valid red black tree that should
176 * contain the node that you are removing. This function will return NULL
177 * when the red black tree got empty. This function doesn't free any data.
178 */
179EAPI Eina_Rbtree *eina_rbtree_inline_remove(Eina_Rbtree *root, Eina_Rbtree *node, Eina_Rbtree_Cmp_Node_Cb cmp, const void *data) EINA_ARG_NONNULL(2, 3) EINA_WARN_UNUSED_RESULT;
180
181/**
182 * @brief Delete all nodes from a valid red black tree.
183 *
184 * @param root The root of a valid red black tree.
185 * @param func The callback that will free each node.
186 * @param data Private data to help the compare function.
187 *
188 */
189EAPI void eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data) EINA_ARG_NONNULL(2);
190
191static inline Eina_Rbtree *eina_rbtree_inline_lookup(const Eina_Rbtree *root, const void *key, int length, Eina_Rbtree_Cmp_Key_Cb cmp, const void *data) EINA_PURE EINA_ARG_NONNULL(2, 4) EINA_WARN_UNUSED_RESULT;
192
193
194/**
195 * @brief Returned a new prefix iterator associated to a rbtree.
196 *
197 * @param root The root of rbtree.
198 * @return A new iterator.
199 *
200 * This function returns a newly allocated iterator associated to @p
201 * root. It will iterate the tree using prefix walk. If @p root is @c
202 * NULL, this function still returns a valid iterator that will always
203 * return false on eina_iterator_next(), thus keeping API sane.
204 *
205 * If the memory can not be allocated, NULL is returned and
206 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
207 * returned.
208 *
209 * @warning if the rbtree structure changes then the iterator becomes
210 * invalid! That is, if you add or remove nodes this iterator
211 * behavior is undefined and your program may crash!
212 */
213EAPI Eina_Iterator *eina_rbtree_iterator_prefix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
214
215/**
216 * @brief Returned a new prefix iterator associated to a rbtree.
217 *
218 * @param root The root of rbtree.
219 * @return A new iterator.
220 *
221 * This function returns a newly allocated iterator associated to @p
222 * root. It will iterate the tree using infix walk. If @p root is @c
223 * NULL, this function still returns a valid iterator that will always
224 * return false on eina_iterator_next(), thus keeping API sane.
225 *
226 * If the memory can not be allocated, NULL is returned and
227 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
228 * returned.
229 *
230 * @warning if the rbtree structure changes then the iterator becomes
231 * invalid! That is, if you add or remove nodes this iterator
232 * behavior is undefined and your program may crash!
233 */
234EAPI Eina_Iterator *eina_rbtree_iterator_infix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
235
236/**
237 * @brief Returned a new prefix iterator associated to a rbtree.
238 *
239 * @param root The root of rbtree.
240 * @return A new iterator.
241 *
242 * This function returns a newly allocated iterator associated to @p
243 * root. It will iterate the tree using postfix walk. If @p root is @c
244 * NULL, this function still returns a valid iterator that will always
245 * return false on eina_iterator_next(), thus keeping API sane.
246 *
247 * If the memory can not be allocated, NULL is returned and
248 * #EINA_ERROR_OUT_OF_MEMORY is set. Otherwise, a valid iterator is
249 * returned.
250 *
251 * @warning if the rbtree structure changes then the iterator becomes
252 * invalid! That is, if you add or remove nodes this iterator
253 * behavior is undefined and your program may crash!
254 */
255EAPI Eina_Iterator *eina_rbtree_iterator_postfix(const Eina_Rbtree *root) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
256
257#include "eina_inline_rbtree.x"
258
259/**
260 * @}
261 */
262
263/**
264 * @}
265 */
266
267/**
268 * @}
269 */
270
271#endif
diff --git a/libraries/eina/src/include/eina_rectangle.h b/libraries/eina/src/include/eina_rectangle.h
new file mode 100644
index 0000000..57e562c
--- /dev/null
+++ b/libraries/eina/src/include/eina_rectangle.h
@@ -0,0 +1,239 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_RECTANGLE_H_
20#define EINA_RECTANGLE_H_
21
22#include "eina_types.h"
23
24/**
25 * @addtogroup Eina_Rectangle_Group Rectangle
26 *
27 * @brief These functions provide rectangle management.
28 */
29
30/**
31 * @addtogroup Eina_Tools_Group Tools
32 *
33 * @{
34 */
35
36/**
37 * @defgroup Eina_Rectangle_Group Rectangle
38 *
39 * @{
40 */
41
42/**
43 * @typedef Eina_Rectangle
44 * Simple rectangle structure.
45 */
46typedef struct _Eina_Rectangle
47{
48 int x; /**< top-left x co-ordinate of rectangle */
49 int y; /**< top-left y co-ordinate of rectangle */
50 int w; /**< width of rectangle */
51 int h; /**< height of rectangle */
52} Eina_Rectangle;
53
54/**
55 * @typedef Eina_Rectangle_Pool
56 * Type for an opaque pool of rectangle.
57 */
58typedef struct _Eina_Rectangle_Pool Eina_Rectangle_Pool;
59
60static inline int eina_spans_intersect(int c1, int l1, int c2, int l2) EINA_WARN_UNUSED_RESULT;
61static inline Eina_Bool eina_rectangle_is_empty(const Eina_Rectangle *r) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
62static inline void eina_rectangle_coords_from(Eina_Rectangle *r, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
63static inline Eina_Bool eina_rectangles_intersect(const Eina_Rectangle *r1, const Eina_Rectangle *r2) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
64static inline Eina_Bool eina_rectangle_xcoord_inside(const Eina_Rectangle *r, int x) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
65static inline Eina_Bool eina_rectangle_ycoord_inside(const Eina_Rectangle *r, int y) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
66static inline Eina_Bool eina_rectangle_coords_inside(const Eina_Rectangle *r, int x, int y) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
67static inline void eina_rectangle_union(Eina_Rectangle *dst, const Eina_Rectangle *src) EINA_ARG_NONNULL(1, 2);
68static inline Eina_Bool eina_rectangle_intersection(Eina_Rectangle *dst, const Eina_Rectangle *src) EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
69static inline void eina_rectangle_rescale_in(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) EINA_ARG_NONNULL(1, 2, 3);
70static inline void eina_rectangle_rescale_out(const Eina_Rectangle *out, const Eina_Rectangle *in, Eina_Rectangle *res) EINA_ARG_NONNULL(1, 2, 3);
71
72
73/**
74 * @brief Add a rectangle in a new pool.
75 *
76 * @param w The width of the rectangle.
77 * @param h The height of the rectangle.
78 * @return A newly allocated pool on success, @c NULL otherwise.
79 *
80 * This function adds the rectangle of size (@p width, @p height) to a
81 * new pool. If the pool can not be created, @c NULL is
82 * returned. Otherwise the newly allocated pool is returned.
83 */
84EAPI Eina_Rectangle_Pool *eina_rectangle_pool_new(int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
85
86/**
87 * @brief Return the pool of the given rectangle.
88 *
89 * @param rect The rectangle.
90 * @return The pool of the given rectangle.
91 *
92 * This function returns the pool in which @p rect is. If @p rect is
93 * @c NULL, @c NULL is returned.
94 */
95EAPI Eina_Rectangle_Pool *eina_rectangle_pool_get(Eina_Rectangle *rect) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
96
97/**
98 * @brief Return the width and height of the given pool.
99 *
100 * @param pool The pool.
101 * @param w The returned width.
102 * @param h The returned height.
103 * @return #EINA_TRUE on success, #EINA_FALSE otherwise.
104 *
105 * This function returns the width and height of @p pool and store
106 * them in respectively @p w and @p h if they are not @c NULL. If
107 * @p pool is @c NULL, #EINA_FALSE is returned. Otherwise #EINA_TRUE is
108 * returned.
109 */
110EAPI Eina_Bool eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
111
112/**
113 * @brief Get the data from the given pool.
114 *
115 * @param pool The pool.
116 * @return The returned data.
117 *
118 * This function gets the data from @p pool set by
119 * eina_rectangle_pool_data_set(). If @p pool is @c NULL, this
120 * function returns @c NULL.
121 */
122EAPI void *eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
123
124/**
125 * @brief Set the data to the given pool.
126 *
127 * @param pool The pool.
128 * @param data The data to set.
129 *
130 * This function sets @p data to @p pool. If @p pool is @c NULL, this
131 * function does nothing.
132 */
133EAPI void eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data) EINA_ARG_NONNULL(1);
134
135/**
136 * @brief Free the given pool.
137 *
138 * @param pool The pool to free.
139 *
140 * This function frees the allocated data of @p pool. If @p pool is
141 * @c NULL, ths function returned immediately.
142 */
143EAPI void eina_rectangle_pool_free(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1);
144
145/**
146 * @brief Return the number of rectangles in the given pool.
147 *
148 * @param pool The pool.
149 * @return The number of rectangles in the pool.
150 *
151 * This function returns the number of rectangles in @p pool.
152 */
153EAPI int eina_rectangle_pool_count(Eina_Rectangle_Pool *pool) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
154
155/**
156 * @brief Request a rectangle of given size in the given pool.
157 *
158 * @param pool The pool.
159 * @param w The width of the rectangle to request.
160 * @param h The height of the rectangle to request.
161 * @return The requested rectangle on success, @c NULL otherwise.
162 *
163 * This function retrieve from @p pool the rectangle of width @p w and
164 * height @p h. If @p pool is @c NULL, or @p w or @p h are non-positive,
165 * the function returns @c NULL. If @p w or @p h are greater than the
166 * pool size, the function returns @c NULL. On success, the function
167 * returns the rectangle which matches the size (@p w, @p h).
168 * Otherwise it returns @c NULL.
169 */
170EAPI Eina_Rectangle *eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
171
172/**
173 * @brief Remove the given rectangle from the pool.
174 *
175 * @param rect The rectangle to remove from the pool.
176 *
177 * This function removes @p rect from the pool. If @p rect is
178 * @c NULL, the function returns immediately. Otherwise it remoes @p
179 * rect from the pool.
180 */
181EAPI void eina_rectangle_pool_release(Eina_Rectangle *rect) EINA_ARG_NONNULL(1);
182
183/**
184 * @def EINA_RECTANGLE_SET
185 * @brief Macro to set the values of a #Eina_Rectangle.
186 *
187 * @param Rectangle The rectangle to set the values.
188 * @param X The X coordinate of the top left corner of the rectangle.
189 * @param Y The Y coordinate of the top left corner of the rectangle.
190 * @param W The width of the rectangle.
191 * @param H The height of the rectangle.
192 *
193 * This macro set the values of @p Rectangle. (@p X, @p Y) is the
194 * coordinates of the top left corner of @p Rectangle, @p W is its
195 * width and @p H is its height.
196 */
197#define EINA_RECTANGLE_SET(Rectangle, X, Y, W, H) \
198 (Rectangle)->x = X; \
199 (Rectangle)->y = Y; \
200 (Rectangle)->w = W; \
201 (Rectangle)->h = H;
202
203
204/**
205 * @brief Create a new rectangle.
206 *
207 * @param x The X coordinate of the top left corner of the rectangle.
208 * @param y The Y coordinate of the top left corner of the rectangle.
209 * @param w The width of the rectangle.
210 * @param h The height of the rectangle.
211 * @return The new rectangle on success, @ NULL otherwise.
212 *
213 * This function creates a rectangle which top left corner has the
214 * coordinates (@p x, @p y), with height @p w and height @p h and adds
215 * it to the rectangles pool. No check is done on @p w and @p h. This
216 * function returns a new rectangle on success, @c NULL otherwhise.
217 */
218EAPI Eina_Rectangle *eina_rectangle_new(int x, int y, int w, int h) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
219
220/**
221 * @brief Free the given rectangle.
222 *
223 * @param rect The rectangle to free.
224 *
225 * This function removes @p rect from the rectangles pool.
226 */
227EAPI void eina_rectangle_free(Eina_Rectangle *rect) EINA_ARG_NONNULL(1);
228
229#include "eina_inline_rectangle.x"
230
231/**
232 * @}
233 */
234
235/**
236 * @}
237 */
238
239#endif /*_EINA_RECTANGLE_H_*/
diff --git a/libraries/eina/src/include/eina_refcount.h b/libraries/eina/src/include/eina_refcount.h
new file mode 100644
index 0000000..6650b01
--- /dev/null
+++ b/libraries/eina/src/include/eina_refcount.h
@@ -0,0 +1,76 @@
1/* EINA - EFL data type library
2 * Copyright (C) 20011 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_REFCOUNT_H_
20#define EINA_REFCOUNT_H_
21
22/**
23 * @addtogroup Eina_Refcount References counting
24 *
25 * @brief Small macro that simplify references counting.
26 *
27 * References counting is not a difficult task, but you must
28 * handle it correctly every where, and that the issue. This
29 * set of macro do provide helper that will force to use the
30 * correct code in most case and reduce the bug likeliness.
31 * Of course this without affecting speed !
32 */
33
34/**
35 * @addtogroup Eina_Data_Types_Group Data Types
36 *
37 * @{
38 */
39
40/**
41 * @defgroup Eina_Refcount References counting
42 *
43 * @{
44 */
45
46/**
47 * @typedef Eina_Refcount
48 * Inlined references counting type.
49 */
50typedef int Eina_Refcount;
51
52/** Used for declaring a reference counting member in a struct */
53#define EINA_REFCOUNT Eina_Refcount __refcount
54
55/** Used just after allocating a object */
56#define EINA_REFCOUNT_INIT(Variable) (Variable)->__refcount = 1
57
58/** Used when using referring to an object one more time */
59#define EINA_REFCOUNT_REF(Variable) (Variable)->__refcount++
60
61/** Used when removing a reference to an object. The code just after will automatically be called when necessary */
62#define EINA_REFCOUNT_UNREF(Variable) \
63 if (--((Variable)->__refcount) == 0)
64
65/** Get refcounting value */
66#define EINA_REFCOUNT_GET(Variable) (Variable)->__refcount
67
68/**
69 * @}
70 */
71
72/**
73 * @}
74 */
75
76#endif /* EINA_REFCOUNT_H_ */
diff --git a/libraries/eina/src/include/eina_safety_checks.h b/libraries/eina/src/include/eina_safety_checks.h
new file mode 100644
index 0000000..4751e5f
--- /dev/null
+++ b/libraries/eina/src/include/eina_safety_checks.h
@@ -0,0 +1,254 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_SAFETY_CHECKS_H_
20#define EINA_SAFETY_CHECKS_H_
21
22/**
23 * @addtogroup Eina_Tools_Group Tools
24 *
25 * @{
26 */
27
28/**
29 * @defgroup Eina_Safety_Checks_Group Safety Checks
30 *
31 * @warning @c eina_safety_checks.h should only be included by source
32 * files, after all other includes and before the source file
33 * specific includes. By source file specific includes we
34 * mean those that define the functions that are being
35 * checked. The reason for such complexity is the trick to
36 * avoid compiler optimizations. If compilers are told that
37 * some given function will never receive @c NULL
38 * (EINA_ARG_NONNULL(), then compiler will emit a warning if
39 * it detects so (good!) but will remove any checks for that
40 * condition as it believes it will never happen, removing
41 * all safety checks! By including @c eina_safety_checks.h it
42 * will redefine EINA_ARG_NONNULL() to void and compiler
43 * warning will not be emitted, but checks will be there. The
44 * files already processed with the old macro
45 * EINA_ARG_NONNULL() will still work and emit the warnings.
46 *
47 *
48 * @code
49 *
50 * // all these files will emit warning from EINA_ARG_NONNULL()
51 * #include <Evas.h> // third party headers
52 * #include <Ecore.h>
53 * #include <eina_error.h> // eina own header
54 *
55 * #include <eina_safety_checks.h>
56 * // all these files below will NOT emit warning from EINA_ARG_NONNULL(),
57 * // but this is required to have the functions defined there to be checked
58 * // for NULL pointers
59 * #include "my_functions1.h"
60 * #include "my_functions2.h"
61 *
62 * @endcode
63 */
64
65/**
66 * @addtogroup Eina_Safety_Checks_Group Safety Checks
67 *
68 * Safety checks are a set of macros to check for parameters or values
69 * that should never happen, it is similar in concept to assert(), but
70 * will log and return instead of abort() your program.
71 *
72 * Since these cases should never happen, one may wantto keep safety
73 * checks enabled during tests but disable then during deploy, not
74 * doing any checks at all. This is a common requirement for embedded
75 * systems. Whenever to check or not should be set during compile time
76 * by using @c --disable-safety-checks or @c --enable-safety-checks
77 * options to @c configure script.
78 *
79 * Whenever these macros capture an error, EINA_LOG_ERR() will be
80 * called and @c eina_error set to @c EINA_ERROR_SAFETY_FAILED and can
81 * be checked with eina_error_get() after call.
82 *
83 * @see EINA_SAFETY_ON_NULL_RETURN(), EINA_SAFETY_ON_NULL_RETURN_VAL()
84 * and other macros.
85 *
86 * @{
87 */
88
89#include "eina_config.h"
90#include "eina_error.h"
91
92/**
93 * @var EINA_ERROR_SAFETY_FAILED
94 * Error identifier corresponding to safety check failure.
95 */
96EAPI extern Eina_Error EINA_ERROR_SAFETY_FAILED;
97
98#ifdef EINA_SAFETY_CHECKS
99
100#include "eina_log.h"
101
102#define EINA_SAFETY_ON_NULL_RETURN(exp) \
103 do \
104 { \
105 if (EINA_UNLIKELY((exp) == NULL)) \
106 { \
107 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
108 EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \
109 return; \
110 } \
111 } \
112 while (0)
113
114#define EINA_SAFETY_ON_NULL_RETURN_VAL(exp, val) \
115 do \
116 { \
117 if (EINA_UNLIKELY((exp) == NULL)) \
118 { \
119 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
120 EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \
121 return (val); \
122 } \
123 } \
124 while (0)
125
126#define EINA_SAFETY_ON_NULL_GOTO(exp, label) \
127 do \
128 { \
129 if (EINA_UNLIKELY((exp) == NULL)) \
130 { \
131 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
132 EINA_LOG_ERR("%s", "safety check failed: " # exp " == NULL"); \
133 goto label; \
134 } \
135 } \
136 while (0)
137
138#define EINA_SAFETY_ON_TRUE_RETURN(exp) \
139 do \
140 { \
141 if (EINA_UNLIKELY(exp)) \
142 { \
143 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
144 EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \
145 return; \
146 } \
147 } \
148 while (0)
149
150#define EINA_SAFETY_ON_TRUE_RETURN_VAL(exp, val) \
151 do \
152 { \
153 if (EINA_UNLIKELY(exp)) \
154 { \
155 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
156 EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \
157 return val; \
158 } \
159 } \
160 while (0)
161
162#define EINA_SAFETY_ON_TRUE_GOTO(exp, label) \
163 do \
164 { \
165 if (EINA_UNLIKELY(exp)) \
166 { \
167 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
168 EINA_LOG_ERR("%s", "safety check failed: " # exp " is true"); \
169 goto label; \
170 } \
171 } \
172 while (0)
173
174#define EINA_SAFETY_ON_FALSE_RETURN(exp) \
175 do \
176 { \
177 if (EINA_UNLIKELY(!(exp))) \
178 { \
179 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
180 EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \
181 return; \
182 } \
183 } \
184 while (0)
185
186#define EINA_SAFETY_ON_FALSE_RETURN_VAL(exp, val) \
187 do \
188 { \
189 if (EINA_UNLIKELY(!(exp))) \
190 { \
191 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
192 EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \
193 return val; \
194 } \
195 } \
196 while (0)
197
198#define EINA_SAFETY_ON_FALSE_GOTO(exp, label) \
199 do \
200 { \
201 if (EINA_UNLIKELY(!(exp))) \
202 { \
203 eina_error_set(EINA_ERROR_SAFETY_FAILED); \
204 EINA_LOG_ERR("%s", "safety check failed: " # exp " is false"); \
205 goto label; \
206 } \
207 } \
208 while (0)
209
210#ifdef EINA_ARG_NONNULL
211/* make EINA_ARG_NONNULL void so GCC does not optimize safety checks */
212#undef EINA_ARG_NONNULL
213#define EINA_ARG_NONNULL(idx, ...)
214#endif
215
216#else /* no safety checks */
217
218#define EINA_SAFETY_ON_NULL_RETURN(exp) \
219 do { (void)(!(exp)); } while (0)
220
221#define EINA_SAFETY_ON_NULL_RETURN_VAL(exp, val) \
222 do { if (0 && !(exp)) { (void)val; } } while (0)
223
224#define EINA_SAFETY_ON_NULL_GOTO(exp, label) \
225 do { if (0 && (exp) == NULL) { goto label; } } while (0)
226
227#define EINA_SAFETY_ON_TRUE_RETURN(exp) \
228 do { (void)(exp); } while (0)
229
230#define EINA_SAFETY_ON_TRUE_RETURN_VAL(exp, val) \
231 do { if (0 && (exp)) { (void)val; } } while (0)
232
233#define EINA_SAFETY_ON_TRUE_GOTO(exp, label) \
234 do { if (0 && (exp)) { goto label; } } while (0)
235
236#define EINA_SAFETY_ON_FALSE_RETURN(exp) \
237 do { (void)(!(exp)); } while (0)
238
239#define EINA_SAFETY_ON_FALSE_RETURN_VAL(exp, val) \
240 do { if (0 && !(exp)) { (void)val; } } while (0)
241
242#define EINA_SAFETY_ON_FALSE_GOTO(exp, label) \
243 do { if (0 && !(exp)) { goto label; } } while (0)
244
245#endif /* safety checks macros */
246#endif /* EINA_SAFETY_CHECKS_H_ */
247
248/**
249 * @}
250 */
251
252/**
253 * @}
254 */
diff --git a/libraries/eina/src/include/eina_sched.h b/libraries/eina/src/include/eina_sched.h
new file mode 100644
index 0000000..43f32b9
--- /dev/null
+++ b/libraries/eina/src/include/eina_sched.h
@@ -0,0 +1,39 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 ProFUSION embedded systems
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_SCHED_H_
20#define EINA_SCHED_H_
21
22#include "eina_types.h"
23
24
25/**
26 * @brief Lower priority of current thread.
27 *
28 * It's used by worker threads so they use up background cpu and do not stall
29 * the main thread If current thread is running with real-time priority, we
30 * decrease our priority by @c RTNICENESS. This is done in a portable way.
31 *
32 * Otherwise (we are running with SCHED_OTHER policy) there's no portable way to
33 * set the nice level on current thread. In Linux, it does work and it's the
34 * only one that is implemented as of now. In this case the nice level is
35 * incremented on this thread by @c NICENESS.
36 */
37EAPI void eina_sched_prio_drop(void);
38
39#endif /* EINA_SCHED_H_ */
diff --git a/libraries/eina/src/include/eina_simple_xml_parser.h b/libraries/eina/src/include/eina_simple_xml_parser.h
new file mode 100644
index 0000000..db9a4e1
--- /dev/null
+++ b/libraries/eina/src/include/eina_simple_xml_parser.h
@@ -0,0 +1,386 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Gustavo Sverzut Barbieri
3 * Cedric Bail
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef EINA_SIMPLE_XML_H_
21#define EINA_SIMPLE_XML_H_
22
23#include "eina_config.h"
24
25#include "eina_types.h"
26#include "eina_magic.h"
27#include "eina_inlist.h"
28
29/**
30 * @defgroup Eina_Simple_XML_Group Simple_XML
31 *
32 * Simplistic relaxed SAX-like XML parser.
33 *
34 * This parser is far from being compliant with XML standard, but will
35 * do for most XMLs out there. If you know that your format is simple
36 * and will not vary in future with strange corner cases, then you can
37 * use it safely.
38 *
39 * The parser is SAX like, that is, it will tokenize contents and call
40 * you back so you can take some action. No contents are allocated
41 * during this parser work and it's not recursive, so you can use it
42 * with a very large document without worries.
43 *
44 * It will not validate the document anyhow, neither it will create a
45 * tree hierarchy. That's up to you.
46 *
47 * Accordingly to XML, open tags may contain attributes. This parser
48 * will not tokenize this. If you want you can use
49 * eina_simple_xml_tag_attributes_find() and then
50 * eina_simple_xml_attributes_parse().
51 */
52
53/**
54 * @addtogroup Eina_Tools_Group Tools
55 *
56 * @{
57 */
58
59/**
60 * @defgroup Eina_Simple_XML_Group Simple_XML
61 *
62 * @{
63 */
64
65typedef struct _Eina_Simple_XML_Node Eina_Simple_XML_Node;
66typedef struct _Eina_Simple_XML_Node_Tag Eina_Simple_XML_Node_Root;
67typedef struct _Eina_Simple_XML_Node_Tag Eina_Simple_XML_Node_Tag;
68typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Data;
69typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_CData;
70typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Processing;
71typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Doctype;
72typedef struct _Eina_Simple_XML_Node_Data Eina_Simple_XML_Node_Comment;
73typedef struct _Eina_Simple_XML_Attribute Eina_Simple_XML_Attribute;
74
75struct _Eina_Simple_XML_Attribute
76{
77 EINA_INLIST;
78 EINA_MAGIC;
79
80 Eina_Simple_XML_Node_Tag *parent;
81 const char *key;
82 const char *value;
83};
84
85typedef enum _Eina_Simple_XML_Node_Type
86{
87 EINA_SIMPLE_XML_NODE_ROOT = 0,
88 EINA_SIMPLE_XML_NODE_TAG,
89 EINA_SIMPLE_XML_NODE_DATA,
90 EINA_SIMPLE_XML_NODE_CDATA,
91 EINA_SIMPLE_XML_NODE_PROCESSING,
92 EINA_SIMPLE_XML_NODE_DOCTYPE,
93 EINA_SIMPLE_XML_NODE_COMMENT
94} Eina_Simple_XML_Node_Type;
95
96struct _Eina_Simple_XML_Node
97{
98 EINA_INLIST;
99 EINA_MAGIC;
100
101 Eina_Simple_XML_Node_Tag *parent;
102 Eina_Simple_XML_Node_Type type;
103};
104
105struct _Eina_Simple_XML_Node_Tag
106{
107 Eina_Simple_XML_Node base;
108 Eina_Inlist *children;
109 Eina_Inlist *attributes;
110 const char *name;
111};
112
113struct _Eina_Simple_XML_Node_Data
114{
115 Eina_Simple_XML_Node base;
116 size_t length;
117 char data[];
118};
119
120typedef enum _Eina_Simple_XML_Type
121{
122 EINA_SIMPLE_XML_OPEN = 0, /* <tag attribute="value"> */
123 EINA_SIMPLE_XML_OPEN_EMPTY, /* <tag attribute="value" /> */
124 EINA_SIMPLE_XML_CLOSE, /* </tag> */
125 EINA_SIMPLE_XML_DATA, /* tag text data */
126 EINA_SIMPLE_XML_CDATA, /* <![CDATA[something]]> */
127 EINA_SIMPLE_XML_ERROR, /* error contents */
128 EINA_SIMPLE_XML_PROCESSING, /* <?xml ... ?> <?php .. ?> */
129 EINA_SIMPLE_XML_DOCTYPE, /* <!DOCTYPE html */
130 EINA_SIMPLE_XML_COMMENT, /* <!-- something --> */
131 EINA_SIMPLE_XML_IGNORED /* whatever is ignored by parser, like whitespace */
132} Eina_Simple_XML_Type;
133
134typedef Eina_Bool (*Eina_Simple_XML_Cb)(void *data, Eina_Simple_XML_Type type, const char *content, unsigned offset, unsigned length);
135typedef Eina_Bool (*Eina_Simple_XML_Attribute_Cb)(void *data, const char *key, const char *value);
136
137
138/**
139 * Parse a section of XML string text
140 *
141 * @param buf the input string. May not contain \0 terminator.
142 * @param buflen the input string size.
143 * @param strip whenever this parser should strip leading and trailing
144 * whitespace. These whitespace will still be issued, but as type
145 * #EINA_SIMPLE_XML_IGNORED.
146 * @param func what to call back while parse to do some action. The
147 * first parameter is the given user @a data, the second is the
148 * token type, the third is the pointer to content start (it's
149 * not a NULL terminated string!), the forth is where this
150 * content is located inside @a buf (does not include tag
151 * start, for instance "<!DOCTYPE value>" the offset points at
152 * "value"), the fifth is the size of the content. Whenever this
153 * function return EINA_FALSE the parser will abort. @param
154 * data what to give as context to @a func.
155 *
156 * @return EINA_TRUE on success or EINA_FALSE if it was aborted by user or
157 * parsing error.
158 */
159EAPI Eina_Bool eina_simple_xml_parse(const char *buf, unsigned buflen,
160 Eina_Bool strip,
161 Eina_Simple_XML_Cb func, const void *data);
162
163
164/**
165 * Given the contents of a tag, find where the attributes start.
166 *
167 * The tag contents is returned by eina_simple_xml_parse() when
168 * type is #EINA_SIMPLE_XML_OPEN or #EINA_SIMPLE_XML_OPEN_EMPTY.
169 *
170 * @return pointer to the start of attributes, it can be used
171 * to feed eina_simple_xml_attributes_parse(). NULL is returned
172 * if no attributes were found.
173 */
174EAPI const char * eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen);
175
176/**
177 * Given a buffer with xml attributes, parse them to key=value pairs.
178 *
179 * @param buf the input string. May not contain \0 terminator.
180 * @param buflen the input string size.
181 * @param func what to call back while parse to do some action. The
182 * first parameter is the given user @a data, the second is the
183 * key (null-terminated) and the last is the value (null
184 * terminated). These strings should not be modified and
185 * reference is just valid until the function return.
186 *
187 * @return EINA_TRUE on success or EINA_FALSE if it was aborted by user or
188 * parsing error.
189 */
190EAPI Eina_Bool eina_simple_xml_attributes_parse(const char *buf, unsigned buflen,
191 Eina_Simple_XML_Attribute_Cb func, const void *data);
192
193/**
194 * Create (and append) new attribute to tag.
195 *
196 * @param parent if provided, will be set in the resulting structure
197 * as well as the attribute will be appended to attributes list.
198 * @param key null-terminated string. Must not be NULL.
199 * @param value null-terminated string. If NULL, the empty string will be used.
200 *
201 * @return newly allocated memory or NULL on error. This memory should be
202 * released with eina_simple_xml_attribute_free() or indirectly
203 * with eina_simple_xml_node_tag_free().
204 */
205EAPI Eina_Simple_XML_Attribute * eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value);
206
207/**
208 * Remove attribute from parent and delete it.
209 *
210 * @param attr attribute to release memory.
211 */
212EAPI void eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr);
213
214
215/**
216 * Create new tag. If parent is provided, it is automatically appended.
217 *
218 * @param parent if provided, will be set in the resulting structure
219 * as well as the tag will be appended to children list.
220 * @param name null-terminated string. Must not be NULL.
221 *
222 * @return newly allocated memory or NULL on error. This memory should be
223 * released with eina_simple_xml_node_tag_free() or indirectly
224 * with eina_simple_xml_node_tag_free() of the parent.
225 */
226EAPI Eina_Simple_XML_Node_Tag * eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name);
227
228/**
229 * Remove tag from parent and delete it.
230 *
231 * @param tag to release memory.
232 */
233EAPI void eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag);
234
235
236/**
237 * Create new data. If parent is provided, it is automatically appended.
238 *
239 * @param parent if provided, will be set in the resulting structure
240 * as well as the data will be appended to children list.
241 * @param content string to be used. Must not be NULL.
242 * @param length size in bytes of @a content.
243 *
244 * @return newly allocated memory or NULL on error. This memory should be
245 * released with eina_simple_xml_node_data_free() or indirectly
246 * with eina_simple_xml_node_tag_free() of the parent.
247 */
248EAPI Eina_Simple_XML_Node_Data * eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
249
250/**
251 * Remove data from parent and delete it.
252 *
253 * @param data to release memory.
254 */
255EAPI void eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node);
256
257
258/**
259 * Create new cdata. If parent is provided, it is automatically appended.
260 *
261 * @param parent if provided, will be set in the resulting structure
262 * as well as the cdata will be appended to children list.
263 * @param content string to be used. Must not be NULL.
264 * @param length size in bytes of @a content.
265 *
266 * @return newly allocated memory or NULL on error. This memory should be
267 * released with eina_simple_xml_node_cdata_free() or indirectly
268 * with eina_simple_xml_node_tag_free() of the parent.
269 */
270EAPI Eina_Simple_XML_Node_CData * eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
271
272/**
273 * Remove cdata from parent and delete it.
274 *
275 * @param cdata to release memory.
276 */
277EAPI void eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node);
278
279
280/**
281 * Create new processing. If parent is provided, it is automatically appended.
282 *
283 * @param parent if provided, will be set in the resulting structure
284 * as well as the processing will be appended to children list.
285 * @param content string to be used. Must not be NULL.
286 * @param length size in bytes of @a content.
287 *
288 * @return newly allocated memory or NULL on error. This memory should be
289 * released with eina_simple_xml_node_processing_free() or indirectly
290 * with eina_simple_xml_node_tag_free() of the parent.
291 */
292EAPI Eina_Simple_XML_Node_Processing * eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
293
294/**
295 * Remove processing from parent and delete it.
296 *
297 * @param processing to release memory.
298 */
299EAPI void eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node);
300
301
302/**
303 * Create new doctype. If parent is provided, it is automatically appended.
304 *
305 * @param parent if provided, will be set in the resulting structure
306 * as well as the doctype will be appended to children list.
307 * @param content string to be used. Must not be NULL.
308 * @param length size in bytes of @a content.
309 *
310 * @return newly allocated memory or NULL on error. This memory should be
311 * released with eina_simple_xml_node_doctype_free() or indirectly
312 * with eina_simple_xml_node_tag_free() of the parent.
313 */
314EAPI Eina_Simple_XML_Node_Doctype * eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
315
316/**
317 * Remove doctype from parent and delete it.
318 *
319 * @param doctype to release memory.
320 */
321EAPI void eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node);
322
323
324/**
325 * Create new comment. If parent is provided, it is automatically appended.
326 *
327 * @param parent if provided, will be set in the resulting structure
328 * as well as the comment will be appended to children list.
329 * @param content string to be used. Must not be NULL.
330 * @param length size in bytes of @a content.
331 *
332 * @return newly allocated memory or NULL on error. This memory should be
333 * released with eina_simple_xml_node_comment_free() or indirectly
334 * with eina_simple_xml_node_tag_free() of the parent.
335 */
336EAPI Eina_Simple_XML_Node_Comment * eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length);
337
338/**
339 * Remove comment from parent and delete it.
340 *
341 * @param comment to release memory.
342 */
343EAPI void eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node);
344
345
346/**
347 * Load a XML node tree based on the given string.
348 *
349 * @param buf the input string. May not contain \0 terminator.
350 * @param buflen the input string size.
351 * @param strip whenever this parser should strip leading and trailing
352 * whitespace.
353 *
354 * @return document root with children tags, or NULL on errors.
355 * Document with errors may return partial tree instead of NULL,
356 * we'll do our best to avoid returning nothing.
357 */
358EAPI Eina_Simple_XML_Node_Root * eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip);
359
360/**
361 * Free node tree build with eina_simple_xml_node_load()
362 *
363 * @param root memory returned by eina_simple_xml_node_load()
364 */
365EAPI void eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root);
366
367/**
368 * Converts the node tree under the given element to a XML string.
369 *
370 * @param node the base node to convert.
371 * @param indent indentation string, or NULL to disable it.
372 *
373 * @param NULL on errors or a newly allocated string on success.
374 */
375EAPI char * eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent);
376
377
378/**
379 * @}
380 */
381
382/**
383 * @}
384 */
385
386#endif /* EINA_SIMPLE_XML_H_ */
diff --git a/libraries/eina/src/include/eina_str.h b/libraries/eina/src/include/eina_str.h
new file mode 100644
index 0000000..8b52ab2
--- /dev/null
+++ b/libraries/eina/src/include/eina_str.h
@@ -0,0 +1,325 @@
1#ifndef _EINA_STR_H
2#define _EINA_STR_H
3
4#include <stddef.h>
5#include <string.h>
6
7#include "eina_types.h"
8
9/**
10 * @page tutorial_eina_string Eina String example
11 * @dontinclude eina_str_01.c
12 *
13 * Whenever using eina we need to include it:
14 * @skipline #include
15 * @line #include
16 *
17 * In our main function we declare(and initialize) some variables and initialize
18 * eina:
19 * @until eina_init
20 *
21 * It's frequentely necessary to split a string into its constituent parts,
22 * eina_str_split() make's it easy to do so:
23 * @until printf
24 *
25 * Another common need is to make a string uppercase or lowercase, so let's
26 * create a string and make it uppercase and then make it lowercase again:
27 * @until printf
28 * @until printf
29 *
30 * Next we use eina to check if our @p names string starts or ends with some
31 * values:
32 * @until Has
33 *
34 * When strings will be used in a terminal(or a number of other places) it
35 * necessary to escape certain characters that appear in them:
36 * @until printf
37 *
38 * Much as we previously split a string we will now join two strings:
39 * @until printf
40 *
41 * With strlcpy() we can copy what portion of the @p prologue fits in @p str and
42 * be sure that it's still NULL terminated:
43 * @until printf
44 *
45 * Since we are done with @p prologue and @p str we should free them:
46 * @until free(str
47 *
48 * Finally we see strlcat in action:
49 * @until printf("
50 *
51 * And then shut eina down and exit:
52 * @until }
53 * @example eina_str_01.c
54 */
55/**
56 * @addtogroup Eina_String_Group String
57 *
58 * @brief Provide useful functions for C string manipulation.
59 *
60 * This group of functions allow you to more easily manipulate strings, they
61 * provide functionality not available through string.h.
62 *
63 * @warning Since these functions modify the strings they can't be used with
64 * shared strings(eina_stringshare).
65 *
66 * See an example @ref tutorial_eina_string "here".
67 */
68
69/**
70 * @addtogroup Eina_Tools_Group Tools
71 *
72 * For more information refer to the @ref tutorial_eina_string "string example".
73 *
74 * @{
75 */
76
77/**
78 * @defgroup Eina_String_Group String
79 *
80 * @{
81 */
82
83/* strlcpy implementation for libc's lacking it */
84
85/**
86 * @brief Copy a c-string to another.
87 *
88 * @param dst The destination string.
89 * @param src The source string.
90 * @param siz The size of the destination string.
91 * @return The length of the source string.
92 *
93 * This function copies up to @p siz - 1 characters from the
94 * NUL-terminated string @p src to @p dst, NUL-terminating the result
95 * (unless @p siz is equal to 0). The returned value is the length of
96 * @p src. If the returned value is greater than @p siz, truncation
97 * occurred.
98 *
99 * @note The main difference between eina_strlcpy and strncpy is that this
100 * ensures @p dst is NULL terminated even if no NULL byte is found in the first
101 * @p siz bytes of src.
102 */
103EAPI size_t eina_strlcpy(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2);
104
105/**
106 * @brief Append a c-string.
107 *
108 * @param dst The destination string.
109 * @param src The source string.
110 * @param siz The size of the destination string.
111 * @return The length of the source string plus MIN(siz, strlen(initial dst))
112 *
113 * This function appends @p src to @p dst of size @p siz (unlike
114 * strncat, @p siz is the full size of @p dst, not space left). At
115 * most @p siz - 1 characters will be copied. Always NUL terminates
116 * (unless @p siz <= strlen(dst)). This function returns strlen(src) +
117 * MIN(siz, strlen(initial dst)). If the returned value is greater or
118 * equal than @p siz, truncation occurred.
119 */
120EAPI size_t eina_strlcat(char *dst, const char *src, size_t siz) EINA_ARG_NONNULL(1, 2);
121
122
123/**
124 * @brief Check if the given string has the given prefix.
125 *
126 * @param str The string to work with.
127 * @param prefix The prefix to check for.
128 * @return #EINA_TRUE if the string has the given prefix, #EINA_FALSE otherwise.
129 *
130 * This function returns #EINA_TRUE if @p str has the prefix
131 * @p prefix, #EINA_FALSE otherwise. If the length of @p prefix is
132 * greater than @p str, #EINA_FALSE is returned.
133 */
134EAPI Eina_Bool eina_str_has_prefix(const char *str, const char *prefix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
135
136/**
137 * @brief Check if the given string has the given suffix.
138 *
139 * @param str The string to work with.
140 * @param suffix The suffix to check for.
141 * @return #EINA_TRUE if the string has the given suffix, #EINA_FALSE otherwise.
142 *
143 * This function returns #EINA_TRUE if @p str has the suffix
144 * @p suffix, #EINA_FALSE otherwise. If the length of @p suffix is
145 * greater than @p str, #EINA_FALSE is returned.
146 */
147EAPI Eina_Bool eina_str_has_suffix(const char *str, const char *suffix) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
148
149/**
150 * @brief Check if the given string has the given extension.
151 *
152 * @param str The string to work with.
153 * @param ext The extension to check for.
154 * @return #EINA_TRUE if the string has the given extension, #EINA_FALSE otherwise.
155 *
156 * This function does the same as eina_str_has_suffix(), except it's case
157 * insensitive.
158 */
159EAPI Eina_Bool eina_str_has_extension(const char *str, const char *ext) EINA_PURE EINA_ARG_NONNULL(1, 2) EINA_WARN_UNUSED_RESULT;
160
161/**
162 * @brief Split a string using a delimiter.
163 *
164 * @param str The string to split.
165 * @param delim The string which specifies the places at which to split the string.
166 * @param max_tokens The maximum number of strings to split string into.
167 * @return A newly-allocated NULL-terminated array of strings or NULL if it
168 * fails to allocate the array.
169 *
170 * This functin splits @p str into a maximum of @p max_tokens pieces,
171 * using the given delimiter @p delim. @p delim is not included in any
172 * of the resulting strings, unless @p max_tokens is reached. If
173 * @p max_tokens is less than @c 1, the string is splitted completely. If
174 * @p max_tokens is reached, the last string in the returned string
175 * array contains the remainder of string. The returned value is a
176 * newly allocated NULL-terminated array of strings or NULL if it fails to
177 * allocate the array. To free it, free the first element of the array and the
178 * array itself.
179 *
180 * @note If you need the number of elements in the returned array see
181 * eina_str_split_full().
182 */
183EAPI char **eina_str_split(const char *string, const char *delimiter, int max_tokens) EINA_ARG_NONNULL(1, 2) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
184
185/**
186 * @brief Split a string using a delimiter and returns number of elements.
187 *
188 * @param str The string to split.
189 * @param delim The string which specifies the places at which to split the string.
190 * @param max_tokens The maximum number of strings to split string into.
191 * @param elements Where to return the number of elements in returned
192 * array (not counting the terminating @c NULL). May be @c NULL.
193 * @return A newly-allocated NULL-terminated array of strings or NULL if it
194 * fails to allocate the array.
195 *
196 * This functin splits @p str into a maximum of @p max_tokens pieces,
197 * using the given delimiter @p delim. @p delim is not included in any
198 * of the resulting strings, unless @p max_tokens is reached. If
199 * @p max_tokens is less than @c 1, the string is splitted completely. If
200 * @p max_tokens is reached, the last string in the returned string
201 * array contains the remainder of string. The returned value is a
202 * newly allocated NULL-terminated array of strings or NULL if it fails to
203 * allocate the array. To free it, free the first element of the array and the
204 * array itself.
205 *
206 * @see eina_str_split()
207 */
208EAPI char **eina_str_split_full(const char *string, const char *delimiter, int max_tokens, unsigned int *elements) EINA_ARG_NONNULL(1, 2, 4) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
209
210
211/**
212 * @brief Join two strings of known length.
213 *
214 * @param dst The buffer to store the result.
215 * @param size Size (in byte) of the buffer.
216 * @param sep The separator character to use.
217 * @param a First string to use, before @p sep.
218 * @param a_len length of @p a.
219 * @param b Second string to use, after @p sep.
220 * @param b_len length of @p b.
221 * @return The number of characters printed.
222 *
223 * This function joins the strings @p a and @p b (in that order) and
224 * separate them with @p sep. The result is stored in the buffer
225 * @p dst and at most @p size - 1 characters will be written and the
226 * string is NULL-terminated. @p a_len is the length of @p a (not
227 * including '\\0') and @p b_len is the length of @p b (not including
228 * '\\0'). This function returns the number of characters printed (not
229 * including the trailing '\\0' used to end output to strings). Just
230 * like snprintf(), it will not write more than @p size bytes, thus a
231 * returned value of @p size or more means that the output was
232 * truncated.
233 *
234 * @see eina_str_join()
235 * @see eina_str_join_static()
236 */
237EAPI size_t eina_str_join_len(char *dst, size_t size, char sep, const char *a, size_t a_len, const char *b, size_t b_len) EINA_ARG_NONNULL(1, 4, 6);
238
239
240/**
241 * @brief Use Iconv to convert a text string from one encoding to another.
242 *
243 * @param enc_from Encoding to convert from.
244 * @param enc_to Encoding to convert to.
245 * @param text The text to convert.
246 * @return The converted text.
247 *
248 * This function converts @p text, encoded in @p enc_from. On success,
249 * the converted text is returned and is encoded in @p enc_to. On
250 * failure, @c NULL is returned. Iconv is used to convert @p text. If
251 * Iconv is not available, @c NULL is returned. When not used anymore,
252 * the returned value must be freed.
253 */
254EAPI char *eina_str_convert(const char *enc_from, const char *enc_to, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1, 2, 3);
255
256
257/**
258 * @brief Escape slashes, spaces and apostrophes in strings.
259 *
260 * @param str The string to escape.
261 * @return The escaped string.
262 *
263 * Escaping is done by adding a slash "\" before any occurrence of slashes "\",
264 * spaces " " or apostrophes "'". This function returns a newly allocated
265 * escaped string on success, @c NULL on failure. When not used anymore, the
266 * returned value must be freed.
267 */
268EAPI char *eina_str_escape(const char *str) EINA_WARN_UNUSED_RESULT EINA_MALLOC EINA_ARG_NONNULL(1);
269
270
271/**
272 * @brief Lowercase all the characters in range [A-Z] in the given string.
273 *
274 * @param str The string to lowercase.
275 *
276 * This function modifies the original string, changing all characters
277 * in [A-Z] to lowercase. If @p str is @c NULL or is an empty string,
278 * this function does nothing.
279 */
280EAPI void eina_str_tolower(char **str);
281
282/**
283 * @brief Uppercase all the characters in range [a-z] in the given string.
284 *
285 * @param str The string to uppercase.
286 *
287 * This function modifies the original string, changing all characters
288 * in [a-z] to uppercase. If @p str is @c NULL or is an empty string,
289 * this function does nothing.
290 */
291EAPI void eina_str_toupper(char **str);
292
293static inline size_t eina_str_join(char *dst, size_t size, char sep, const char *a, const char *b) EINA_ARG_NONNULL(1, 4, 5);
294
295/**
296 * @def eina_str_join_static(dst, sep, a, b)
297 * @brief Join two static strings and store the result in a static buffer.
298 *
299 * @param dst The buffer to store the result.
300 * @param sep The separator character to use.
301 * @param a First string to use, before @p sep.
302 * @param b Second string to use, after @p sep.
303 * @return The number of characters printed.
304 *
305 * This function is similar to eina_str_join_len(), but will assume
306 * string sizes are know using sizeof(X).
307 *
308 * @see eina_str_join()
309 * @see eina_str_join_static()
310 */
311#define eina_str_join_static(dst, sep, a, b) eina_str_join_len(dst, sizeof(dst), sep, a, (sizeof(a) > 0) ? sizeof(a) - 1 : 0, b, (sizeof(b) > 0) ? sizeof(b) - 1 : 0)
312
313static inline size_t eina_strlen_bounded(const char *str, size_t maxlen) EINA_PURE EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
314
315#include "eina_inline_str.x"
316
317/**
318 * @}
319 */
320
321/**
322 * @}
323 */
324
325#endif /* EINA_STR_H */
diff --git a/libraries/eina/src/include/eina_strbuf.h b/libraries/eina/src/include/eina_strbuf.h
new file mode 100644
index 0000000..7043575
--- /dev/null
+++ b/libraries/eina/src/include/eina_strbuf.h
@@ -0,0 +1,605 @@
1#ifndef EINA_STRBUF_H
2#define EINA_STRBUF_H
3
4#include <stddef.h>
5#include <stdarg.h>
6
7#include "eina_types.h"
8
9
10/**
11 * @page tutorial_strbuf Eina_Strbuf example
12 * @dontinclude eina_strbuf_01.c
13 *
14 * First thing always is including Eina:
15 * @skipline #include
16 * @until #include
17 *
18 * Next we initialize eina and create a string buffer to play with:
19 * @until strbuf_new
20 *
21 * Here you can see two different ways of creating a buffer with the same
22 * contents. We could create them in simpler ways, but this gives us an
23 * opportunity to demonstrate several functions in action:
24 * @until strbuf_reset
25 * @until strbuf_reset
26 *
27 * Next we use the printf family of functions to create a formated string,
28 * add, remove and replace some content:
29 * @until strbuf_string_get
30 * @until strbuf_string_get
31 * @until strbuf_string_get
32 *
33 * Once done we free our string buffer, shut down Eina and end the application:
34 * @until }
35 *
36 * @example eina_strbuf_01.c
37 */
38/**
39 * @addtogroup Eina_String_Buffer_Group String Buffer
40 *
41 * @brief These functions provide string buffers management.
42 *
43 * The String Buffer data type is designed to be a mutable string,
44 * allowing to append, prepend or insert a string to a buffer.
45 *
46 * For more information see @ref tutorial_strbuf "this example".
47 */
48
49/**
50 * @addtogroup Eina_Data_Types_Group Data Types
51 *
52 * @{
53 */
54
55/**
56 * @defgroup Eina_String_Buffer_Group String Buffer
57 *
58 * @{
59 */
60
61/**
62 * @typedef Eina_Strbuf
63 * Type for a string buffer.
64 */
65typedef struct _Eina_Strbuf Eina_Strbuf;
66
67/**
68 * @brief Create a new string buffer.
69 *
70 * @return Newly allocated string buffer instance.
71 *
72 * This function creates a new string buffer. On error, @c NULL is
73 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
74 * free the resources, use eina_strbuf_free().
75 *
76 * @see eina_strbuf_free()
77 * @see eina_strbuf_append()
78 * @see eina_strbuf_string_get()
79 */
80EAPI Eina_Strbuf *eina_strbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
81
82/**
83 * @brief Create a new string buffer using the passed string. The passed
84 * string is used directly as the buffer, it's somehow the opposite function of
85 * @ref eina_strbuf_string_steal . The passed string must be malloced.
86 *
87 * @param str the string to manage
88 * @return Newly allocated string buffer instance.
89 *
90 * This function creates a new string buffer. On error, @c NULL is
91 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
92 * free the resources, use eina_strbuf_free().
93 *
94 * @see eina_strbuf_free()
95 * @see eina_strbuf_append()
96 * @see eina_strbuf_string_get()
97 * @since 1.1.0
98 */
99EAPI Eina_Strbuf *eina_strbuf_manage_new(char *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
100
101/**
102 * @brief Free a string buffer.
103 *
104 * @param buf The string buffer to free.
105 *
106 * This function frees the memory of @p buf. @p buf must have been
107 * created by eina_strbuf_new().
108 */
109EAPI void eina_strbuf_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
110
111/**
112 * @brief Reset a string buffer.
113 *
114 * @param buf The string buffer to reset.
115 *
116 * This function reset @p buf: the buffer len is set to 0, and the
117 * string is set to '\\0'. No memory is free'd.
118 */
119EAPI void eina_strbuf_reset(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
120
121/**
122 * @brief Append a string to a buffer, reallocating as necessary.
123 *
124 * @param buf The string buffer to append to.
125 * @param str The string to append.
126 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
127 *
128 * This function appends @p str to @p buf. It computes the length of
129 * @p str, so is slightly slower than eina_strbuf_append_length(). If
130 * the length is known beforehand, consider using that variant. If
131 * @p buf can't append it, #EINA_FALSE is returned, otherwise
132 * #EINA_TRUE is returned.
133 *
134 * @see eina_strbuf_append()
135 * @see eina_strbuf_append_length()
136 */
137EAPI Eina_Bool eina_strbuf_append(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
138
139/**
140 * @brief Append an escaped string to a buffer, reallocating as necessary.
141 *
142 * @param buf The string buffer to append to.
143 * @param str The string to append.
144 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
145 *
146 * This function escapes and then appends the string @p str to @p buf. If @p str
147 * can not be appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
148 * returned.
149 */
150EAPI Eina_Bool eina_strbuf_append_escaped(Eina_Strbuf *buf, const char *str) EINA_ARG_NONNULL(1, 2);
151
152/**
153 * @brief Append a string to a buffer, reallocating as necessary,
154 * limited by the given length.
155 *
156 * @param buf The string buffer to append to.
157 * @param str The string to append.
158 * @param maxlen The maximum number of characters to append.
159 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
160 *
161 * This function appends at most @p maxlen characters of @p str to
162 * @p buf. It can't append more than the length of @p str. It
163 * computes the length of @p str, so it is slightly slower than
164 * eina_strbuf_append_length(). If the length is known beforehand,
165 * consider using that variant (@p maxlen should then be checked so
166 * that it is greater than the size of @p str). If @p str can not be
167 * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
168 * returned.
169 *
170 * @see eina_strbuf_append()
171 * @see eina_strbuf_append_length()
172 */
173EAPI Eina_Bool eina_strbuf_append_n(Eina_Strbuf *buf, const char *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
174
175/**
176 * @brief Append a string of exact length to a buffer, reallocating as necessary.
177 *
178 * @param buf The string buffer to append to.
179 * @param str The string to append.
180 * @param length The exact length to use.
181 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
182 *
183 * This function appends @p str to @p buf. @p str must be of size at
184 * most @p length. It is slightly faster than eina_strbuf_append() as
185 * it does not compute the size of @p str. It is useful when dealing
186 * with strings of known size, such as eina_stringshare. If @p buf
187 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
188 * returned.
189 *
190 * @see eina_stringshare_length()
191 * @see eina_strbuf_append()
192 * @see eina_strbuf_append_n()
193 */
194EAPI Eina_Bool eina_strbuf_append_length(Eina_Strbuf *buf, const char *str, size_t length) EINA_ARG_NONNULL(1, 2);
195
196/**
197 * @brief Append a character to a string buffer, reallocating as
198 * necessary.
199 *
200 * @param buf The string buffer to append to.
201 * @param c The char to append.
202 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
203 *
204 * This function inserts @p c to @p buf. If it can not insert it,
205 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
206 */
207EAPI Eina_Bool eina_strbuf_append_char(Eina_Strbuf *buf, char c) EINA_ARG_NONNULL(1);
208
209/**
210 * @brief Append a string to a buffer, reallocating as necessary.
211 *
212 * @param buf The string buffer to append to.
213 * @param fmt The string to append.
214 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
215 *
216 * This function appends the string defined by the format @p fmt to @p buf. @p
217 * fmt must be of a valid format for printf family of functions. If it can't
218 * insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
219 *
220 * @see eina_strbuf_append()
221 */
222EAPI Eina_Bool eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3);
223
224/**
225 * @brief Append a string to a buffer, reallocating as necessary.
226 *
227 * @param buf The string buffer to append to.
228 * @param fmt The string to append.
229 * @param args The variable arguments.
230 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
231 *
232 * @see eina_strbuf_append_printf()
233 */
234EAPI Eina_Bool eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args) EINA_ARG_NONNULL(1, 2);
235
236/**
237 * @brief Insert a string to a buffer, reallocating as necessary.
238 *
239 * @param buf The string buffer to insert.
240 * @param str The string to insert.
241 * @param pos The position to insert the string.
242 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
243 *
244 * This function inserts @p str to @p buf at position @p pos. It
245 * computes the length of @p str, so is slightly slower than
246 * eina_strbuf_insert_length(). If the length is known beforehand,
247 * consider using that variant. If @p buf can't insert it, #EINA_FALSE
248 * is returned, otherwise #EINA_TRUE is returned.
249 */
250EAPI Eina_Bool eina_strbuf_insert(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
251
252/**
253 * @brief Insert an escaped string to a buffer, reallocating as
254 * necessary.
255 *
256 * @param buf The string buffer to insert to.
257 * @param str The string to insert.
258 * @param pos The position to insert the string.
259 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
260 *
261 * This function escapes and inserts the string @p str to @p buf at
262 * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is
263 * returned, otherwise #EINA_TRUE is returned.
264 */
265EAPI Eina_Bool eina_strbuf_insert_escaped(Eina_Strbuf *buf, const char *str, size_t pos) EINA_ARG_NONNULL(1, 2);
266
267/**
268 * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen.
269 *
270 * @param buf The string buffer to insert to.
271 * @param str The string to insert.
272 * @param maxlen The maximum number of chars to insert.
273 * @param pos The position to insert the string.
274 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
275 *
276 * This function inserts @p str to @p buf at position @p pos, with at
277 * most @p maxlen bytes. The number of inserted characters can not be
278 * greater than the length of @p str. It computes the length of
279 * @p str, so is slightly slower than eina_strbuf_insert_length(). If the
280 * length is known beforehand, consider using that variant (@p maxlen
281 * should then be checked so that it is greater than the size of
282 * @p str). If @p str can not be inserted, #EINA_FALSE is returned,
283 * otherwise, #EINA_TRUE is returned.
284 */
285EAPI Eina_Bool eina_strbuf_insert_n(Eina_Strbuf *buf, const char *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
286
287/**
288 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
289 *
290 * @param buf The string buffer to insert to.
291 * @param str The string to insert.
292 * @param length The exact length to use.
293 * @param pos The position to insert the string.
294 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
295 *
296 * This function inserts @p str to @p buf. @p str must be of size at
297 * most @p length. It is slightly faster than eina_strbuf_insert() as
298 * it does not compute the size of @p str. It is useful when dealing
299 * with strings of known size, such as eina_strngshare. If @p buf
300 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
301 * returned.
302 *
303 * @see eina_stringshare_length()
304 * @see eina_strbuf_insert()
305 * @see eina_strbuf_insert_n()
306 */
307EAPI Eina_Bool eina_strbuf_insert_length(Eina_Strbuf *buf, const char *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
308
309/**
310 * @brief Insert a character to a string buffer, reallocating as
311 * necessary.
312 *
313 * @param buf The string buffer to insert to.
314 * @param c The char to insert.
315 * @param pos The position to insert the char.
316 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
317 *
318 * This function inserts @p c to @p buf at position @p pos. If @p buf
319 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
320 * returned.
321 */
322EAPI Eina_Bool eina_strbuf_insert_char(Eina_Strbuf *buf, char c, size_t pos) EINA_ARG_NONNULL(1);
323
324/**
325 * @brief Insert a string to a buffer, reallocating as necessary.
326 *
327 * @param buf The string buffer to insert.
328 * @param fmt The string to insert.
329 * @param pos The position to insert the string.
330 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
331 *
332 * This function insert a string as described by the format @p fmt to @p buf at
333 * the position @p pos. @p fmt must be of a valid format for printf family of
334 * functions. If it can't insert it, #EINA_FALSE is returned, otherwise
335 * #EINA_TRUE is returned.
336 */
337EAPI Eina_Bool eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 4);
338
339/**
340 * @brief Insert a string to a buffer, reallocating as necessary.
341 *
342 * @param buf The string buffer to insert.
343 * @param fmt The string to insert.
344 * @param pos The position to insert the string.
345 * @param args The variable arguments.
346 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
347 *
348 * @see eina_strbuf_insert_printf
349 */
350EAPI Eina_Bool eina_strbuf_insert_vprintf(Eina_Strbuf *buf, const char *fmt, size_t pos, va_list args) EINA_ARG_NONNULL(1, 2);
351
352/**
353 * @def eina_strbuf_prepend(buf, str)
354 * @brief Prepend the given string to the given buffer
355 *
356 * @param buf The string buffer to prepend to.
357 * @param str The string to prepend.
358 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
359 *
360 * This macro is calling eina_strbuf_insert() at position 0. If @p buf
361 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
362 * returned.
363 */
364#define eina_strbuf_prepend(buf, str) eina_strbuf_insert(buf, str, 0)
365
366/**
367 * @def eina_strbuf_prepend_escaped(buf, str)
368 * @brief Prepend the given escaped string to the given buffer
369 *
370 * @param buf The string buffer to prepend to.
371 * @param str The string to prepend.
372 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
373 *
374 * This macro is calling eina_strbuf_insert_escaped() at position 0. If
375 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
376 * #EINA_TRUE is returned.
377 */
378#define eina_strbuf_prepend_escaped(buf, str) eina_strbuf_insert_escaped(buf, str, 0)
379
380/**
381 * @def eina_strbuf_prepend_n(buf, str)
382 * @brief Prepend the given escaped string to the given buffer
383 *
384 * @param buf The string buffer to prepend to.
385 * @param str The string to prepend.
386 * @param maxlen The maximum number of chars to prepend.
387 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
388 *
389 * This macro is calling eina_strbuf_insert_n() at position 0. If
390 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
391 * #EINA_TRUE is returned.
392 */
393#define eina_strbuf_prepend_n(buf, str, maxlen) eina_strbuf_insert_n(buf, str, maxlen, 0)
394
395/**
396 * @def eina_strbuf_prepend_length(buf, str)
397 * @brief Prepend the given escaped string to the given buffer
398 *
399 * @param buf The string buffer to prepend to.
400 * @param str The string to prepend.
401 * @param length The exact length to use.
402 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
403 *
404 * This macro is calling eina_strbuf_insert_length() at position 0. If
405 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
406 * #EINA_TRUE is returned.
407 */
408#define eina_strbuf_prepend_length(buf, str, length) eina_strbuf_insert_length(buf, str, length, 0)
409
410/**
411 * @def eina_strbuf_prepend_char(buf, str)
412 * @brief Prepend the given character to the given buffer
413 *
414 * @param buf The string buffer to prepend to.
415 * @param c The character to prepend.
416 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
417 *
418 * This macro is calling eina_strbuf_insert_char() at position 0. If
419 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
420 * #EINA_TRUE is returned.
421 */
422#define eina_strbuf_prepend_char(buf, c) eina_strbuf_insert_char(buf, c, 0)
423
424/**
425 * @def eina_strbuf_prepend_printf(buf, fmt, ...)
426 * @brief Prepend the given string to the given buffer
427 *
428 * @param buf The string buffer to prepend to.
429 * @param fmt The string to prepend.
430 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
431 *
432 * This macro is calling eina_strbuf_insert_printf() at position 0.If @p buf
433 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
434 * returned.
435 */
436#define eina_strbuf_prepend_printf(buf, fmt, ...) eina_strbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__)
437
438/**
439 * @def eina_strbuf_prepend_vprintf(buf, fmt, args)
440 * @brief Prepend the given string to the given buffer
441 *
442 * @param buf The string buffer to prepend to.
443 * @param fmt The string to prepend.
444 * @param args The variable arguments.
445 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
446 *
447 * This macro is calling eina_strbuf_insert_vprintf() at position 0.If @p buf
448 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
449 * returned.
450 */
451#define eina_strbuf_prepend_vprintf(buf, fmt, args) eina_strbuf_insert_vprintf(buf, fmt, 0, args)
452
453/**
454 * @brief Remove a slice of the given string buffer.
455 *
456 * @param buf The string buffer to remove a slice.
457 * @param start The initial (inclusive) slice position to start
458 * removing, in bytes.
459 * @param end The final (non-inclusive) slice position to finish
460 * removing, in bytes.
461 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
462 *
463 * This function removes a slice of @p buf, starting at @p start
464 * (inclusive) and ending at @p end (non-inclusive). Both values are
465 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
466 */
467
468EAPI Eina_Bool eina_strbuf_remove(Eina_Strbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
469
470/**
471 * @brief Retrieve a pointer to the contents of a string buffer
472 *
473 * @param buf The string buffer.
474 * @return The current string in the string buffer.
475 *
476 * This function returns the string contained in @p buf. The returned
477 * value must not be modified and will no longer be valid if @p buf is
478 * modified. In other words, any eina_strbuf_append() or similar will
479 * make that pointer invalid. The pointer returned by this function <b>must
480 * not</b> be freed.
481 *
482 * @see eina_strbuf_string_steal()
483 */
484EAPI const char *eina_strbuf_string_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
485
486/**
487 * @brief Steal the contents of a string buffer.
488 *
489 * @param buf The string buffer to steal.
490 * @return The current string in the string buffer.
491 *
492 * This function returns the string contained in @p buf. @p buf is
493 * then initialized and does not own the returned string anymore. The
494 * caller must release the memory of the returned string by calling
495 * free().
496 *
497 * @see eina_strbuf_string_get()
498 */
499EAPI char *eina_strbuf_string_steal(Eina_Strbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
500
501/**
502 * @brief Free the contents of a string buffer but not the buffer.
503 *
504 * @param buf The string buffer to free the string of.
505 *
506 * This function frees the string contained in @p buf without freeing
507 * @p buf.
508 */
509EAPI void eina_strbuf_string_free(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
510
511/**
512 * @brief Retrieve the length of the string buffer content.
513 *
514 * @param buf The string buffer.
515 * @return The current length of the string, in bytes.
516 *
517 * This function returns the length of @p buf.
518 */
519EAPI size_t eina_strbuf_length_get(const Eina_Strbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
520
521
522/**
523 * @brief Replace the n-th string with an other string.
524 *
525 * @param buf The string buffer to work with.
526 * @param str The string to replace.
527 * @param with The replaceing string.
528 * @param n The number of the fitting string.
529 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
530 *
531 * This function replaces the n-th occurrence of @p str in @p buf with
532 * @p with. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
533 */
534EAPI Eina_Bool eina_strbuf_replace(Eina_Strbuf *buf, const char *str, const char *with, unsigned int n) EINA_ARG_NONNULL(1, 2, 3);
535
536/**
537 * @def eina_strbuf_replace_first(buf, str, with)
538 * @brief Prepend the given character to the given buffer
539 *
540 * @param buf The string buffer to work with.
541 * @param str The string to replace.
542 * @param with The replaceing string.
543 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
544 *
545 * This macro is calling eina_strbuf_replace() with the n-th occurrence
546 * equal to @c 1. If @p buf can't replace it, #EINA_FALSE is returned,
547 * otherwise #EINA_TRUE is returned.
548 */
549#define eina_strbuf_replace_first(buf, str, with) eina_strbuf_replace(buf, str, with, 1)
550
551
552/**
553 * @brief Replace all strings with an other string.
554
555 * @param buf the string buffer to work with.
556 * @param str The string to replace.
557 * @param with The replaceing string.
558 * @return How often the string was replaced.
559 *
560 * This function replaces all the occurrences of @p str in @p buf with
561 * the string @p with. This function returns the number of times @p str
562 * has been replaced. On failure, it returns 0.
563 */
564EAPI int eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with) EINA_ARG_NONNULL(1, 2, 3);
565
566/**
567 * @brief Trim the string buffer
568
569 * @param buf the string buffer to work with.
570 *
571 * This function skips whitespaces in the beginning and the end of the buffer.
572 */
573EAPI void eina_strbuf_trim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
574
575/**
576 * @brief Left trim the string buffer
577
578 * @param buf the string buffer to work with.
579 *
580 * This function skips whitespaces in the beginning of the buffer.
581 */
582EAPI void eina_strbuf_ltrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
583
584/**
585 * @brief Right trim the string buffer
586
587 * @param buf the string buffer to work with.
588 *
589 * This function skips whitespaces in the end of the buffer.
590 */
591EAPI void eina_strbuf_rtrim(Eina_Strbuf *buf) EINA_ARG_NONNULL(1);
592
593/**
594 * @}
595 */
596
597/**
598 * @}
599 */
600
601/**
602 * @}
603 */
604
605#endif /* EINA_STRBUF_H */
diff --git a/libraries/eina/src/include/eina_stringshare.h b/libraries/eina/src/include/eina_stringshare.h
new file mode 100644
index 0000000..af58add
--- /dev/null
+++ b/libraries/eina/src/include/eina_stringshare.h
@@ -0,0 +1,321 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 *
18 * This file incorporates work covered by the following copyright and
19 * permission notice:
20 *
21 * Copyright (C) 2008 Peter Wehrfritz
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to
25 * deal in the Software without restriction, including without limitation the
26 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
27 * sell copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies of the Software and its Copyright notices. In addition publicly
32 * documented acknowledgment must be given that this software has been used if no
33 * source code of this software is made available publicly. This includes
34 * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
35 * documents or any documentation provided with any product containing this
36 * software. This License does not apply to any software that links to the
37 * libraries provided by this software (statically or dynamically), but only to
38 * the software provided.
39 *
40 * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice
41 * and it's intent.
42 *
43 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
46 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
47 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
48 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49 */
50
51#ifndef EINA_STRINGSHARE_H_
52#define EINA_STRINGSHARE_H_
53
54#include <stdarg.h>
55
56#include "eina_types.h"
57
58/**
59 * @page eina_stringshare_example_01_page
60 * @dontinclude eina_stringshare_01.c
61 *
62 * Like all examples we start by including Eina:
63 * @skip #include
64 * @line #include
65 *
66 * Here we declare some variables and initialize eina:
67 * @until eina_init
68 *
69 * We start the substantive part of the example by showing how to make a part
70 * of a string shared and how to get the length of a shared string:
71 * @until stringshare_strlen
72 * As we add shared strings we also need to delete them when done using them:
73 * @line del
74 *
75 * There are many ways of creating shared strings including an equivalent to
76 * sprintf:
77 * @until del
78 *
79 * An equivalent to snprintf:
80 * @until printf
81 *
82 * But the simplest way of creating a shared string is through
83 * eina_stringshare_add():
84 * @until printf
85 *
86 * Sometimes you already have a pointer to a shared string and want to use it,
87 * so to make sure the provider of the pointer won't free it while you're using
88 * it you can increase the shared string's ref count:
89 * @until printf
90 *
91 * Whenever you have a pointer to a shared string and would like to change it's
92 * value you should use eina_stringshare_replace():
93 * @until printf
94 * @warning @b Don't use eina_stringshare_del() followed by
95 * eina_share_common_add(), under some circunstances you might end up deleting
96 * a shared string some other piece of code is using.
97 *
98 * We created str but haven't deleted it yet, and while we called
99 * eina_stringshare_del() on str2, we created it and then increased the ref
100 * count so it's still alive:
101 * @until str2
102 *
103 * You can see the full source code @ref eina_stringshare_example_01 "here".
104 */
105/**
106 * @page eina_stringshare_example_01
107 * @include eina_stringshare_01.c
108 * @example eina_stringshare_01.c
109 */
110/**
111 * @addtogroup Eina_Stringshare_Group Stringshare
112 *
113 * These functions allow you to store a single copy of a string, and use in
114 * multiple places throughout your program.
115 *
116 * This is a method to reduce the number of duplicated strings kept in
117 * memory. It's pretty common for the same strings to be dynamically
118 * allocated repeatedly between applications and libraries, especially in
119 * circumstances where you could have multiple copies of a structure that
120 * allocates the string. So rather than duplicating and freeing these
121 * strings, you request a read-only pointer to an existing string and
122 * only incur the overhead of a hash lookup.
123 *
124 * It sounds like micro-optimizing, but profiling has shown this can have
125 * a significant impact as you scale the number of copies up. It improves
126 * string creation/destruction speed, reduces memory use and decreases
127 * memory fragmentation, so a win all-around.
128 *
129 * The following diagram gives an idea of what happens as you create strings
130 * with eina_stringshare_add():
131 *
132 * @image html eina_stringshare.png
133 * @image latex eina_stringshare.eps height=\textheight
134 *
135 * For more information, see @ref eina_stringshare_example_01_page
136 * "this example".
137 */
138
139/**
140 * @addtogroup Eina_Data_Types_Group Data Types
141 *
142 * @{
143 */
144
145/**
146 * @defgroup Eina_Stringshare_Group Stringshare
147 *
148 * @{
149 */
150
151
152/**
153 * @brief Retrieve an instance of a string for use in a program.
154 *
155 * @param str The string to retrieve an instance of.
156 * @param slen The string size (<= strlen(str)).
157 * @return A pointer to an instance of the string on success.
158 * @c NULL on failure.
159 *
160 * This function retrieves an instance of @p str. If @p str is
161 * @c NULL, then @c NULL is returned. If @p str is already stored, it
162 * is just returned and its reference counter is increased. Otherwise
163 * a duplicated string of @p str is returned.
164 *
165 * This function does not check string size, but uses the
166 * exact given size. This can be used to share_common part of a larger
167 * buffer or substring.
168 *
169 * @see eina_share_common_add()
170 */
171EAPI const char *eina_stringshare_add_length(const char *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
172
173/**
174 * @brief Retrieve an instance of a string for use in a program.
175 *
176 * @param str The NULL terminated string to retrieve an instance of.
177 * @return A pointer to an instance of the string on success.
178 * @c NULL on failure.
179 *
180 * This function retrieves an instance of @p str. If @p str is
181 * @c NULL, then @c NULL is returned. If @p str is already stored, it
182 * is just returned and its reference counter is increased. Otherwise
183 * a duplicated string of @p str is returned.
184 *
185 * The string @p str must be NULL terminated ('@\0') and its full
186 * length will be used. To use part of the string or non-null
187 * terminated, use eina_stringshare_add_length() instead.
188 *
189 * @see eina_stringshare_add_length()
190 */
191EAPI const char *eina_stringshare_add(const char *str) EINA_WARN_UNUSED_RESULT;
192
193/**
194 * @brief Retrieve an instance of a string for use in a program
195 * from a format string.
196 *
197 * @param fmt The NULL terminated format string to retrieve an instance of.
198 * @return A pointer to an instance of the string on success.
199 * @c NULL on failure.
200 *
201 * This function retrieves an instance of @p fmt. If @p fmt is
202 * @c NULL, then @c NULL is returned. If @p fmt is already stored, it
203 * is just returned and its reference counter is increased. Otherwise
204 * a duplicated string is returned.
205 *
206 * The format string @p fmt must be NULL terminated ('@\0') and its full
207 * length will be used. To use part of the format string or non-null
208 * terminated, use eina_stringshare_nprintf() instead.
209 *
210 * @see eina_stringshare_nprintf()
211 */
212EAPI const char *eina_stringshare_printf(const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(1, 2);
213
214/**
215 * @brief Retrieve an instance of a string for use in a program
216 * from a format string.
217 *
218 * @param fmt The NULL terminated format string to retrieve an instance of.
219 * @param args The va_args for @p fmt
220 * @return A pointer to an instance of the string on success.
221 * @c NULL on failure.
222 *
223 * This function retrieves an instance of @p fmt with @p args. If @p fmt is
224 * @c NULL, then @c NULL is returned. If @p fmt with @p args is already stored, it
225 * is just returned and its reference counter is increased. Otherwise
226 * a duplicated string is returned.
227 *
228 * The format string @p fmt must be NULL terminated ('@\0') and its full
229 * length will be used. To use part of the format string or non-null
230 * terminated, use eina_stringshare_nprintf() instead.
231 *
232 * @see eina_stringshare_nprintf()
233 */
234EAPI const char *eina_stringshare_vprintf(const char *fmt, va_list args) EINA_WARN_UNUSED_RESULT;
235
236/**
237 * @brief Retrieve an instance of a string for use in a program
238 * from a format string with size limitation.
239 * @param len The length of the format string to use
240 * @param fmt The format string to retrieve an instance of.
241 * @return A pointer to an instance of the string on success.
242 * @c NULL on failure.
243 *
244 * This function retrieves an instance of @p fmt limited by @p len. If @p fmt is
245 * @c NULL or @p len is < 1, then @c NULL is returned. If the resulting string
246 * is already stored, it is returned and its reference counter is increased.
247 * Otherwise a duplicated string is returned.
248 *
249 * @p len length of the format string will be used. To use the
250 * entire format string, use eina_stringshare_printf() instead.
251 *
252 * @see eina_stringshare_printf()
253 */
254EAPI const char *eina_stringshare_nprintf(unsigned int len, const char *fmt, ...) EINA_WARN_UNUSED_RESULT EINA_PRINTF(2, 3);
255
256/**
257 * Increment references of the given shared string.
258 *
259 * @param str The shared string.
260 * @return A pointer to an instance of the string on success.
261 * @c NULL on failure.
262 *
263 * This is similar to eina_share_common_add(), but it's faster since it will
264 * avoid lookups if possible, but on the down side it requires the parameter
265 * to be shared string. In other words, it must be the return of a previous
266 * call to one of the stringshare functions.
267 *
268 * There is no unref since this is the work of eina_share_common_del().
269 */
270EAPI const char *eina_stringshare_ref(const char *str);
271
272/**
273 * @brief Note that the given string has lost an instance.
274 *
275 * @param str string The given string.
276 *
277 * This function decreases the reference counter associated to @p str
278 * if it exists. If that counter reaches 0, the memory associated to
279 * @p str is freed. If @p str is NULL, the function returns
280 * immediately.
281 *
282 * Note that if the given pointer is not shared or NULL, bad things
283 * will happen, likely a segmentation fault.
284 */
285EAPI void eina_stringshare_del(const char *str);
286
287/**
288 * @brief Note that the given string @b must be shared.
289 *
290 * @param str the shared string to know the length. It is safe to
291 * give NULL, in that case -1 is returned.
292 *
293 * This function is a cheap way to known the length of a shared
294 * string. Note that if the given pointer is not shared, bad
295 * things will happen, likely a segmentation fault. If in doubt, try
296 * strlen().
297 */
298EAPI int eina_stringshare_strlen(const char *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
299
300/**
301 * @brief Dump the contents of the share_common.
302 *
303 * This function dumps all strings in the share_common to stdout with a
304 * DDD: prefix per line and a memory usage summary.
305 */
306EAPI void eina_stringshare_dump(void);
307
308static inline Eina_Bool eina_stringshare_replace(const char **p_str, const char *news) EINA_ARG_NONNULL(1);
309static inline Eina_Bool eina_stringshare_replace_length(const char **p_str, const char *news, unsigned int slen) EINA_ARG_NONNULL(1);
310
311#include "eina_inline_stringshare.x"
312
313/**
314 * @}
315 */
316
317/**
318 * @}
319 */
320
321#endif /* EINA_STRINGSHARE_H_ */
diff --git a/libraries/eina/src/include/eina_tiler.h b/libraries/eina/src/include/eina_tiler.h
new file mode 100644
index 0000000..5272099
--- /dev/null
+++ b/libraries/eina/src/include/eina_tiler.h
@@ -0,0 +1,310 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_TILER_H_
20#define EINA_TILER_H_
21
22#include "eina_types.h"
23#include "eina_iterator.h"
24#include "eina_rectangle.h"
25
26/**
27 * @page eina_tiler_example_01
28 * @dontinclude eina_tiler_01.c
29 *
30 * This is an example that illustrates how Eina_Tiler works for a given set of
31 * rectangles. The rectangles must be given in the command line in the form:
32 * <width>x<height>+<x offset>+<y offset>
33 * The example will show two panels, the first(input) will show the given
34 * rectangles(in different colors) and in the seconds(output) it will show the
35 * rectangles given by the tiler. The rectangles will be added one by one every
36 * two seconds. A lot of the example deals with actually painting the rectangles
37 * so we'll skip over quite a bit of code, but you can see all of it in @ref
38 * eina_tiler_01.c "eina_tiler_01.c".
39 *
40 * The first thing of note in our example is the creation of the tiler:
41 * @skipline eina_tiler_new
42 * @note @p maxw and @p maxh are calculated such that the tiler's size will
43 * fully encompass all given rectangles.
44 *
45 * We'll now look at the function that actually adds rectangles to our tiler. It
46 * first checks if we added all rectangles already and if so stops right there:
47 * @dontinclude eina_tiler_01.c
48 * @skip static Eina_Bool
49 * @until }
50 *
51 * Our function then clears all rectangles given to us by tiler from the last
52 * execution. It does this because each rectangle we add may change everything
53 * about the output of eina_tiler:
54 * @until output_rects_reset
55 *
56 * Next we get another rectangle, print it and show it in the input panel:
57 * @until add_input_rect
58 *
59 * We now come to the tiler stuff, we add our new rectangle to it and get a new
60 * iterator for the tiler:
61 * @until itr
62 *
63 * We now iterate over our tiler printing every rect it gives us and sowing it
64 * in the output panel:
65 * @until }
66 *
67 * We of course must remember to free our iterator and that's it for this
68 * function:
69 * @until }
70 *
71 * You should try many different inputs to see how the tiler works, here are a
72 * few suggestions:
73 * @li 100x100+0+0 100x100+200+200
74 * @li 100x100+0+0 100x100+5+5 100x100+10+10 100x100+15+15 100x100+20+20
75 * @li 100x100+0+0 100x100+100+100 100x100+200+0 100x100+0+200 100x100+200+200
76 * @li 10x10+0+0 10x10+10+10 10x10+20+0 10x10+0+20 10x10+20+20
77 *
78 * @example eina_tiler_01.c
79 */
80/**
81 * @addtogroup Eina_Data_Types_Group Data Types
82 *
83 * @{
84 */
85
86/**
87 * @defgroup Eina_Tiler_Group Tiler
88 *
89 * @warning This is a very low level tool, in most situations(for example if
90 * you're using evas) you won't need this.
91 *
92 * @section basic Basic usage
93 *
94 * Eina_Tiler is a tool to facilitate calculations of which areas are damaged
95 * and thus need to be re-rendered. The basic usage of Eina_Tiler is to give it
96 * the size of your canvas and a set of rectangular areas that need
97 * re-rendering, from that and using heuristics it'll tell you an efficient way
98 * to re-render in the form of a set of non-overlapping rectangles that covers
99 * the whole area that needs re-rendering.
100 *
101 * The following is pseudo-code showing some simple use of Eina_Tiler:
102 * @code
103 * tiler = eina_tiler_new(MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT);
104 * EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering, l, rect)
105 * eina_tiler_add(tiler, rect);
106 * itr = eina_tiler_iterator_new(tiler);
107 * EINA_ITERATOR_FOREACH(itr, rect)
108 * my_function_that_repaints_areas_of_the_canvas(rect);
109 * @endcode
110 *
111 * @see eina_tiler_new()
112 * @see eina_tiler_rect_add()
113 * @see eina_tiler_iterator_new()
114 *
115 * @warning There are no guarantees that this will be the most efficient way to
116 * re-render for any particular case.
117 *
118 * @section grid_slicer Grid Slicer
119 *
120 * Grid slicer and Eina_Tiler are usually used together, that is however @b not
121 * nescessary, they can be used independently. Grid slicer provides an easy API
122 * to divide an area in tiles which is usefull in certain applications to divide
123 * the area that will be rendered into tiles. It's customary to, then create one
124 * Eina_Tiler for each tile.
125 *
126 * The following is pseudo-code showing a very simplified use of grid slicer
127 * together with Eina_Tiler:
128 * @code
129 * itr = eina_tile_grid_slicer_iterator_new(0, 0, MY_CANVAS_WIDTH, MY_CANVAS_HEIGHT, TILE_WIDTH, TILE_HEIGHT);
130 * EINA_ITERATOR_FOREACH(itr, grid_info)
131 * {
132 * tiler = eina_tiler_new(grid_info->rect.w, grid_info->rect.w);
133 * EINA_LIST_FOREACH(list_of_areas_that_need_re_rendering_in_this_tile, l, rect)
134 * eina_tiler_add(tiler, rect);
135 * itr = eina_tiler_iterator_new(tiler);
136 * EINA_ITERATOR_FOREACH(itr, rect)
137 * my_function_that_repaints_areas_of_the_canvas(rect);
138 * }
139 * @endcode
140 *
141 * @see eina_tiler_new()
142 * @see eina_tiler_rect_add()
143 * @see eina_tile_grid_slicer_setup()
144 * @see eina_tile_grid_slicer_next()
145 * @see eina_tile_grid_slicer_iterator_new()
146 *
147 * @{
148 */
149
150/**
151 * @typedef Eina_Tiler
152 * Tiler type.
153 */
154typedef struct _Eina_Tiler Eina_Tiler;
155
156/**
157 * @typedef Eina_Tile_Grid_Info
158 * Grid type of a tiler.
159 */
160typedef struct Eina_Tile_Grid_Info Eina_Tile_Grid_Info;
161
162/**
163 * @struct Eina_Tile_Grid_Info
164 * Grid type of a tiler.
165 */
166struct Eina_Tile_Grid_Info
167{
168 unsigned long col; /**< column of the tile grid */
169 unsigned long row; /**< row of the tile grid*/
170 Eina_Rectangle rect; /**< rectangle of the tile grid, coordinates are
171 relative to tile*/
172 Eina_Bool full; /**< whether the grid is full or not */
173};
174
175typedef struct _Eina_Tile_Grid_Slicer Eina_Tile_Grid_Slicer;
176
177/**
178 * @brief Creates a new tiler with @p w width and @p h height.
179 *
180 * @param w Width of the tiler
181 * @param h Height of the tiler
182 * @return The newly created tiler
183 *
184 * @see eina_tiler_free()
185 */
186EAPI Eina_Tiler *eina_tiler_new(int w, int h);
187/**
188 * @brief Frees a tiler.
189 *
190 * @param t The tiler to free.
191 *
192 * This function frees @p t. It does not free the memory allocated for the
193 * elements of @p t.
194 */
195EAPI void eina_tiler_free(Eina_Tiler *t);
196/**
197 * @brief Sets the size of tiles for a tiler.
198 *
199 * @param t The tiler whose tile size will be set.
200 * @param w Width of the tiles.
201 * @param h Height of the tiles.
202 *
203 * @warning @p w and @p h @b must be greater than zero, otherwise tile size
204 * won't be changed.
205 * @warning Tile size is not used!
206 */
207EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h);
208/**
209 * @brief Adds a rectangle to a tiler.
210 *
211 * @param t The tiler in which to add a container.
212 * @param r The rectangle to be added.
213 *
214 * @see eina_tiler_rect_del()
215 */
216EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r);
217/**
218 * @brief Removes a rectangle from a tiler.
219 *
220 * @param t The tiler in which to add a container.
221 * @param r The rectangle to be removed.
222 *
223 * @see eina_tiler_rect_add()
224 * @see eina_tiler_clear()
225 */
226EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r);
227/**
228 * @brief Removes all rectangles from tiles.
229 *
230 * @param t The tiler to clear.
231 *
232 * @see eina_tiler_rect_del()
233 */
234EAPI void eina_tiler_clear(Eina_Tiler *t);
235/**
236 * @brief Create a iterator to access the tilers calculated rectangles.
237 *
238 * @param t The tiler to iterate over.
239 * @return A iterator containing Eina_Rectangle.
240 */
241EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t);
242
243/**
244 * @brief Creates a new Eina_Iterator that iterates over a list of tiles.
245 *
246 * @param x X axis coordinate.
247 * @param y Y axis coordinate.
248 * @param w width.
249 * @param h height.
250 * @param tile_w tile width.
251 * @param tile_h tile height.
252 * @return A pointer to the Eina_Iterator. @c NULL on failure.
253 *
254 * The region defined by @a x, @a y, @a w, @a h will be divided in to a grid of
255 * tiles of width @a tile_w and height @p tile_h, the returned iterator will
256 * iterate over every tile in the grid having as its data a
257 * #Eina_Tile_Grid_Info.
258 *
259 * @note This is a convinience function, iterating over the returned iterator is
260 * equivalent to calling eina_tile_grid_slicer_setup() and calling
261 * eina_tile_grid_slicer_next() untill it returns EINA_FALSE.
262 */
263EAPI Eina_Iterator *eina_tile_grid_slicer_iterator_new(int x, int y, int w, int h, int tile_w, int tile_h);
264/**
265 * @brief Iterates over the tiles set by eina_tile_grid_slicer_setup().
266 *
267 * @param slc Pointer to an Eina_Tile_Grid_Slicer struct.
268 * @param rect Pointer to a struct Eina_Tile_Grid_Info *.
269 * @return @c EINA_TRUE if the current rect is valid.
270 * @c EINA_FALSE if there is no more rects to iterate over (and
271 * thus the current one isn't valid).
272 *
273 * This functions iterates over each Eina_Tile_Grid_Info *rect of the grid.
274 * eina_tile_grid_slicer_setup() must be called first, and *rect is only valid
275 * if this function returns EINA_TRUE. Its content shouldn't be modified.
276 *
277 * @note Consider using eina_tile_grid_slicer_iterator_new() instead.
278 */
279static inline Eina_Bool eina_tile_grid_slicer_next(Eina_Tile_Grid_Slicer *slc, const Eina_Tile_Grid_Info **rect);
280/**
281 * @brief Setup an Eina_Tile_Grid_Slicer struct.
282 *
283 * @param slc Pointer to an Eina_Tile_Grid_Slicer struct.
284 * @param x X axis coordinate.
285 * @param y Y axis coordinate.
286 * @param w width.
287 * @param h height.
288 * @param tile_w tile width.
289 * @param tile_h tile height.
290 * @return A pointer to the Eina_Iterator. @c NULL on failure.
291 *
292 * The region defined by @a x, @a y, @a w, @a h will be divided in to a grid of
293 * tiles of width @a tile_w and height @p tile_h, @p slc can then be used with
294 * eina_tile_grid_slicer_next() to access each tile.
295 *
296 * @note Consider using eina_tile_grid_slicer_iterator_new() instead.
297 */
298static inline Eina_Bool eina_tile_grid_slicer_setup(Eina_Tile_Grid_Slicer *slc, int x, int y, int w, int h, int tile_w, int tile_h);
299
300#include "eina_inline_tiler.x"
301
302/**
303 * @}
304 */
305
306/**
307 * @}
308 */
309
310#endif /* EINA_TILER_H_ */
diff --git a/libraries/eina/src/include/eina_trash.h b/libraries/eina/src/include/eina_trash.h
new file mode 100644
index 0000000..f53d99e
--- /dev/null
+++ b/libraries/eina/src/include/eina_trash.h
@@ -0,0 +1,100 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_TRASH_H__
20#define EINA_TRASH_H__
21
22/**
23 * @addtogroup Eina_Data_Types_Group Data Types
24 *
25 * @{
26 */
27
28/**
29 * @addtogroup Eina_Containers_Group Containers
30 *
31 * @{
32 */
33
34/**
35 * @defgroup Eina_Trash_Group Trash
36 *
37 * @{
38 */
39
40/**
41 * @typedef Eina_Trash
42 * Type for a generic container of unused allocated pointer.
43 */
44typedef struct _Eina_Trash Eina_Trash;
45
46/**
47 * @struct _Eina_Trash
48 * Type for a generic container of unused allocated pointer.
49 */
50struct _Eina_Trash
51{
52 Eina_Trash *next; /**< next item in trash. */
53};
54
55static inline void eina_trash_init(Eina_Trash **trash) EINA_ARG_NONNULL(1);
56static inline void eina_trash_push(Eina_Trash **trash, void *data) EINA_ARG_NONNULL(1);
57static inline void *eina_trash_pop(Eina_Trash **trash) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
58
59/**
60 * @def EINA_TRASH_CLEAN
61 * @brief Macro to remove all pointer from the trash.
62 *
63 * @param trash The trash to clean.
64 * @param data The pointer extracted from the trash.
65 *
66 * This macro allow the cleaning of @p trash in an easy way. It will
67 * remove all pointers from @p trash until it's empty.
68 *
69 * This macro can be used for freeing the data in the trash, like in
70 * the following example:
71 *
72 * @code
73 * Eina_Trash *trash = NULL;
74 * char *data;
75 *
76 * // trash is filled with pointer to some duped strings.
77 *
78 * EINA_TRASH_CLEAN(&trash, data)
79 * free(data);
80 * @endcode
81 *
82 * @note this macro is useful when you implement some memory pool.
83 */
84#define EINA_TRASH_CLEAN(trash, data) while ((data = eina_trash_pop(trash)))
85
86#include "eina_inline_trash.x"
87
88/**
89 * @}
90 */
91
92/**
93 * @}
94 */
95
96/**
97 * @}
98 */
99
100#endif /* EINA_TRASH_H_ */
diff --git a/libraries/eina/src/include/eina_types.h b/libraries/eina/src/include/eina_types.h
new file mode 100644
index 0000000..8c77cdf
--- /dev/null
+++ b/libraries/eina/src/include/eina_types.h
@@ -0,0 +1,282 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_TYPES_H_
20#define EINA_TYPES_H_
21
22/**
23 * @addtogroup Eina_Core_Group Core
24 *
25 * @{
26 */
27
28/**
29 * @defgroup Eina_Types_Group Types
30 *
31 * @{
32 */
33
34#ifdef EAPI
35# undef EAPI
36#endif
37
38#ifdef _WIN32
39# ifdef EFL_EINA_BUILD
40# ifdef DLL_EXPORT
41# define EAPI __declspec(dllexport)
42# else
43# define EAPI
44# endif /* ! DLL_EXPORT */
45# else
46# define EAPI __declspec(dllimport)
47# endif /* ! EFL_EINA_BUILD */
48#else
49# ifdef __GNUC__
50# if __GNUC__ >= 4
51# define EAPI __attribute__ ((visibility("default")))
52# else
53# define EAPI
54# endif
55# else
56# define EAPI
57# endif
58#endif
59
60#include "eina_config.h"
61
62#ifdef EINA_WARN_UNUSED_RESULT
63# undef EINA_WARN_UNUSED_RESULT
64#endif
65#ifdef EINA_ARG_NONNULL
66# undef EINA_ARG_NONNULL
67#endif
68#ifdef EINA_DEPRECATED
69# undef EINA_DEPRECATED
70#endif
71#ifdef EINA_MALLOC
72# undef EINA_MALLOC
73#endif
74#ifdef EINA_PURE
75# undef EINA_PURE
76#endif
77#ifdef EINA_PRINTF
78# undef EINA_PRINTF
79#endif
80#ifdef EINA_SCANF
81# undef EINA_SCANF
82#endif
83#ifdef EINA_FORMAT
84# undef EINA_FORMAT
85#endif
86#ifdef EINA_CONST
87# undef EINA_CONST
88#endif
89#ifdef EINA_NOINSTRUMENT
90# undef EINA_NOINSTRUMENT
91#endif
92#ifdef EINA_UNLIKELY
93# undef EINA_UNLIKELY
94#endif
95#ifdef EINA_LIKELY
96# undef EINA_LIKELY
97#endif
98
99#ifdef __GNUC__
100# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
101# define EINA_WARN_UNUSED_RESULT __attribute__ ((warn_unused_result))
102# else
103# define EINA_WARN_UNUSED_RESULT
104# endif
105
106# if (!defined(EINA_SAFETY_CHECKS)) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
107# define EINA_ARG_NONNULL(idx, ...) __attribute__ ((nonnull(idx, ## __VA_ARGS__)))
108# else
109# define EINA_ARG_NONNULL(idx, ...)
110# endif
111
112# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)
113# define EINA_DEPRECATED __attribute__ ((__deprecated__))
114# else
115# define EINA_DEPRECATED
116# endif
117
118# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
119# define EINA_MALLOC __attribute__ ((malloc))
120# define EINA_PURE __attribute__ ((pure))
121# else
122# define EINA_MALLOC
123# define EINA_PURE
124# endif
125
126# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
127# define EINA_PRINTF(fmt, arg) __attribute__((format (printf, fmt, arg)))
128# define EINA_SCANF(fmt, arg) __attribute__((format (scanf, fmt, arg)))
129# define EINA_FORMAT(fmt) __attribute__((format_arg(fmt)))
130# define EINA_CONST __attribute__((const))
131# define EINA_NOINSTRUMENT __attribute__((no_instrument_function))
132# define EINA_UNLIKELY(exp) __builtin_expect((exp), 0)
133# define EINA_LIKELY(exp) __builtin_expect((exp), 1)
134# else
135# define EINA_PRINTF(fmt, arg)
136# define EINA_SCANF(fmt, arg)
137# define EINA_FORMAT(fmt)
138# define EINA_CONST
139# define EINA_NOINSTRUMENT
140# define EINA_UNLIKELY(exp) exp
141# define EINA_LIKELY(exp) exp
142# endif
143
144#elif defined(_WIN32)
145# define EINA_WARN_UNUSED_RESULT
146# define EINA_ARG_NONNULL(idx, ...)
147# if defined(_MSC_VER) && _MSC_VER >= 1300
148# define EINA_DEPRECATED __declspec(deprecated)
149# else
150# define EINA_DEPRECATED
151# endif
152# define EINA_MALLOC
153# define EINA_PURE
154# define EINA_PRINTF(fmt, arg)
155# define EINA_SCANF(fmt, arg)
156# define EINA_FORMAT(fmt)
157# define EINA_CONST
158# define EINA_NOINSTRUMENT
159# define EINA_UNLIKELY(exp) exp
160# define EINA_LIKELY(exp) exp
161
162#elif defined(__SUNPRO_C)
163# define EINA_WARN_UNUSED_RESULT
164# define EINA_ARG_NONNULL(...)
165# define EINA_DEPRECATED
166# if __SUNPRO_C >= 0x590
167# define EINA_MALLOC __attribute__ ((malloc))
168# define EINA_PURE __attribute__ ((pure))
169# else
170# define EINA_MALLOC
171# define EINA_PURE
172# endif
173# define EINA_PRINTF(fmt, arg)
174# define EINA_SCANF(fmt, arg)
175# define EINA_FORMAT(fmt)
176# if __SUNPRO_C >= 0x590
177# define EINA_CONST __attribute__ ((const))
178# else
179# define EINA_CONST
180# endif
181# define EINA_NOINSTRUMENT
182# define EINA_UNLIKELY(exp) exp
183# define EINA_LIKELY(exp) exp
184
185#else /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */
186
187/**
188 * @def EINA_WARN_UNUSED_RESULT
189 * Used to warn when the returned value of the function is not used.
190 */
191# define EINA_WARN_UNUSED_RESULT
192
193/**
194 * @def EINA_ARG_NONNULL
195 * Used to warn when the specified arguments of the function are @c NULL.
196 */
197# define EINA_ARG_NONNULL(idx, ...)
198
199/**
200 * @def EINA_DEPRECATED
201 * Used to warn when the function is considered as deprecated.
202 */
203# define EINA_DEPRECATED
204# define EINA_MALLOC
205# define EINA_PURE
206# define EINA_PRINTF(fmt, arg)
207# define EINA_SCANF(fmt, arg)
208# define EINA_FORMAT(fmt)
209# define EINA_CONST
210# define EINA_NOINSTRUMENT
211# define EINA_UNLIKELY(exp) exp
212# define EINA_LIKELY(exp) exp
213#endif /* ! __GNUC__ && ! _WIN32 && ! __SUNPRO_C */
214
215/**
216 * @typedef Eina_Bool
217 * Type to mimic a boolean.
218 *
219 * @note it differs from stdbool.h as this is defined as an unsigned
220 * char to make it usable by bitfields (Eina_Bool name:1) and
221 * also take as few bytes as possible.
222 */
223typedef unsigned char Eina_Bool;
224
225/**
226 * @def EINA_FALSE
227 * boolean value FALSE (numerical value 0)
228 */
229#define EINA_FALSE ((Eina_Bool)0)
230
231/**
232 * @def EINA_TRUE
233 * boolean value TRUE (numerical value 1)
234 */
235#define EINA_TRUE ((Eina_Bool)1)
236
237EAPI extern const unsigned int eina_prime_table[];
238
239/**
240 * @typedef Eina_Compare_Cb
241 * Function used in functions using sorting. It compares @p data1 and
242 * @p data2. If @p data1 is 'less' than @p data2, -1 must be returned,
243 * if it is 'greater', 1 must be returned, and if they are equal, 0
244 * must be returned.
245 */
246typedef int (*Eina_Compare_Cb)(const void *data1, const void *data2);
247
248/**
249 * @def EINA_COMPARE_CB
250 * Macro to cast to Eina_Compare_Cb.
251 */
252#define EINA_COMPARE_CB(function) ((Eina_Compare_Cb)function)
253
254typedef Eina_Bool (*Eina_Each_Cb)(const void *container, void *data, void *fdata);
255
256/**
257 * @def EINA_EACH_CB
258 * Macro to cast to Eina_Each.
259 */
260#define EINA_EACH_CB(Function) ((Eina_Each_Cb)Function)
261
262/**
263 * @typedef Eina_Free_Cb
264 * A callback type used to free data when iterating over a container.
265 */
266typedef void (*Eina_Free_Cb)(void *data);
267
268/**
269 * @def EINA_FREE_CB
270 * Macro to cast to Eina_Free_Cb.
271 */
272#define EINA_FREE_CB(Function) ((Eina_Free_Cb)Function)
273
274/**
275 * @}
276 */
277
278/**
279 * @}
280 */
281
282#endif /* EINA_TYPES_H_ */
diff --git a/libraries/eina/src/include/eina_unicode.h b/libraries/eina/src/include/eina_unicode.h
new file mode 100644
index 0000000..aed59af
--- /dev/null
+++ b/libraries/eina/src/include/eina_unicode.h
@@ -0,0 +1,177 @@
1#ifndef EINA_UNICODE_H
2#define EINA_UNICODE_H
3
4#include <stdlib.h>
5
6#include "eina_config.h"
7#include "eina_types.h"
8
9/**
10 * @addtogroup Eina_Data_Types_Group Data Types
11 *
12 * @{
13 */
14/**
15 * @addtogroup Eina_Unicode_String Unicode String
16 *
17 * @brief These functions provide basic unicode string handling
18 *
19 * Eina_Unicode is a type that holds unicode codepoints.
20 *
21 * @{
22 */
23
24/**
25 * @typedef Eina_Unicode
26 * A type that holds Unicode codepoints.
27 */
28#if EINA_SIZEOF_WCHAR_T >= 4
29# include <wchar.h>
30typedef wchar_t Eina_Unicode;
31#elif defined(EINA_HAVE_INTTYPES_H)
32# include <inttypes.h>
33typedef uint32_t Eina_Unicode;
34#elif defined(EINA_HAVE_STDINT_H)
35# include <stdint.h>
36typedef uint32_t Eina_Unicode;
37#else
38/* Hope that int is big enough */
39typedef unsigned int Eina_Unicode;
40#endif
41
42
43/**
44 * @brief Same as the standard strlen just with Eina_Unicode instead of char.
45 */
46EAPI extern const Eina_Unicode *EINA_UNICODE_EMPTY_STRING;
47
48EAPI size_t eina_unicode_strlen(const Eina_Unicode *ustr) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
49
50/**
51 * @brief Returns the length of a Eina_Unicode string, up to a limit.
52 *
53 * This function returns the number of characters in string, up to a maximum
54 * of n. If the terminating character is not found in the string, it returns
55 * n.
56 *
57 * @param ustr String to search
58 * @param n Max length to search
59 * @return Number of characters or n.
60 */
61EAPI size_t eina_unicode_strnlen(const Eina_Unicode *ustr, int n) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT EINA_PURE;
62
63
64/**
65 * @brief Same as the standard strdup just with Eina_Unicode instead of char.
66 */
67EAPI Eina_Unicode *eina_unicode_strdup(const Eina_Unicode *text) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
68
69
70/**
71 * @brief Same as strdup but cuts on n. Assumes n < len
72 * @since 1.1.0
73 */
74EAPI Eina_Unicode *eina_unicode_strndup(const Eina_Unicode *text, size_t n) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
75
76
77/**
78 * @brief Same as the standard strcmp just with Eina_Unicode instead of char.
79 */
80EAPI int eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
81
82
83/**
84 * @brief Same as the standard strcpy just with Eina_Unicode instead of char.
85 */
86EAPI Eina_Unicode *eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source) EINA_ARG_NONNULL(1, 2);
87
88
89/**
90 * @brief Same as the standard strstr just with Eina_Unicode instead of char.
91 */
92EAPI Eina_Unicode *eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
93
94
95/**
96 * @brief Same as the standard strncpy just with Eina_Unicode instead of char.
97 */
98EAPI Eina_Unicode *eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n) EINA_ARG_NONNULL(1, 2);
99
100
101/**
102 * @see eina_str_escape()
103 */
104EAPI Eina_Unicode *eina_unicode_escape(const Eina_Unicode *str) EINA_ARG_NONNULL(1) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
105
106/* UTF-8 Handling */
107
108
109/**
110 * Reads UTF8 bytes from @buf, starting at *@index and returns
111 * the decoded code point at iindex offset, and advances iindex
112 * to the next code point after this. iindex is always advanced,
113 * unless if the advancement is after the NULL.
114 * On error: return a codepoint between DC80 to DCFF where the low 8 bits
115 * are the byte's value.
116 *
117 * @param buf the string
118 * @param iindex the index to look at and return by.
119 * @return the codepoint found.
120 * @since 1.1.0
121 */
122EAPI Eina_Unicode eina_unicode_utf8_get_next(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2);
123
124/**
125 * Reads UTF8 bytes from @buf, starting at *@iindex and returns
126 * the decoded code point at iindex offset, and moves iindex
127 * to the previous code point. iindex is always moved, as long
128 * as it's not past the start of the string.
129 * On error: return a codepoint between DC80 to DCFF where the low 8 bits
130 * are the byte's value.
131 *
132 * @param buf the string
133 * @param iindex the index to look at and return by.
134 * @return the codepoint found.
135 * @since 1.1.0
136 */
137EAPI Eina_Unicode eina_unicode_utf8_get_prev(const char *buf, int *iindex) EINA_ARG_NONNULL(1, 2);
138
139/**
140 * Returns the number of unicode characters in the string. That is,
141 * the number of Eina_Unicodes it'll take to store this string in
142 * an Eina_Unicode string.
143 *
144 * @param buf the string
145 * @return the number of unicode characters (not bytes) in the string
146 * @since 1.1.0
147 */
148EAPI int eina_unicode_utf8_get_len(const char *buf) EINA_ARG_NONNULL(1);
149
150/**
151 * Converts a utf-8 string to a newly allocated Eina_Unicode string.
152 *
153 * @param utf the string in utf-8
154 * @param _len the length of the returned Eina_Unicode string.
155 * @return the newly allocated Eina_Unicode string.
156 * @since 1.1.0
157 */
158EAPI Eina_Unicode *eina_unicode_utf8_to_unicode(const char *utf, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
159
160/**
161 * Converts an Eina_Unicode string to a newly allocated utf-8 string.
162 *
163 * @param uni the Eina_Unicode string
164 * @param _len the length byte length of the return utf8 string.
165 * @return the newly allocated utf-8 string.
166 * @since 1.1.0
167 */
168EAPI char * eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
169
170/**
171 * @}
172 */
173/**
174 * @}
175 */
176
177#endif
diff --git a/libraries/eina/src/include/eina_ustrbuf.h b/libraries/eina/src/include/eina_ustrbuf.h
new file mode 100644
index 0000000..f68cb7b
--- /dev/null
+++ b/libraries/eina/src/include/eina_ustrbuf.h
@@ -0,0 +1,446 @@
1#ifndef EINA_USTRBUF_H
2#define EINA_USTRBUF_H
3
4#include <stddef.h>
5
6#include "eina_types.h"
7#include "eina_unicode.h"
8
9/**
10 * @addtogroup Eina_Unicode_String_Buffer_Group Unicode String Buffer
11 *
12 * @brief These functions provide unicode string buffers management.
13 *
14 * The Unicode String Buffer data type is designed to be a mutable string,
15 * allowing to append, prepend or insert a string to a buffer.
16 */
17
18/**
19 * @addtogroup Eina_Data_Types_Group Data Types
20 *
21 * @{
22 */
23
24/**
25 * @defgroup Eina_Unicode_String_Buffer_Group Unicode String Buffer
26 *
27 * @{
28 */
29
30/**
31 * @typedef Eina_UStrbuf
32 * Type for a string buffer.
33 */
34typedef struct _Eina_Strbuf Eina_UStrbuf;
35
36/**
37 * @brief Create a new string buffer.
38 *
39 * @return Newly allocated string buffer instance.
40 *
41 * This function creates a new string buffer. On error, @c NULL is
42 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
43 * free the resources, use eina_ustrbuf_free().
44 *
45 * @see eina_ustrbuf_free()
46 * @see eina_ustrbuf_append()
47 * @see eina_ustrbuf_string_get()
48 */
49EAPI Eina_UStrbuf *eina_ustrbuf_new(void) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
50
51/**
52 * @brief Create a new string buffer using the passed string. The passed
53 * string is used directly as the buffer, it's somehow the opposite function of
54 * @ref eina_ustrbuf_string_steal . The passed string must be malloced.
55 *
56 * @param str the string to manage
57 * @return Newly allocated string buffer instance.
58 *
59 * This function creates a new string buffer. On error, @c NULL is
60 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
61 * free the resources, use eina_strbuf_free().
62 *
63 * @see eina_ustrbuf_free()
64 * @see eina_ustrbuf_append()
65 * @see eina_ustrbuf_string_get()
66 * @since 1.1.0
67 */
68EAPI Eina_Strbuf *eina_ustrbuf_manage_new(Eina_Unicode *str) EINA_MALLOC EINA_WARN_UNUSED_RESULT;
69
70/**
71 * @brief Free a string buffer.
72 *
73 * @param buf The string buffer to free.
74 *
75 * This function frees the memory of @p buf. @p buf must have been
76 * created by eina_ustrbuf_new().
77 */
78EAPI void eina_ustrbuf_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
79
80/**
81 * @brief Reset a string buffer.
82 *
83 * @param buf The string buffer to reset.
84 *
85 * This function reset @p buf: the buffer len is set to 0, and the
86 * string is set to '\\0'. No memory is free'd.
87 */
88EAPI void eina_ustrbuf_reset(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
89
90/**
91 * @brief Append a string to a buffer, reallocating as necessary.
92 *
93 * @param buf The string buffer to append to.
94 * @param str The string to append.
95 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
96 *
97 * This function appends @p str to @p buf. It computes the length of
98 * @p str, so is slightly slower than eina_ustrbuf_append_length(). If
99 * the length is known beforehand, consider using that variant. If
100 * @p buf can't append it, #EINA_FALSE is returned, otherwise
101 * #EINA_TRUE is returned.
102 *
103 * @see eina_ustrbuf_append()
104 * @see eina_ustrbuf_append_length()
105 */
106EAPI Eina_Bool eina_ustrbuf_append(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
107
108/**
109 * @brief Append an escaped string to a buffer, reallocating as necessary.
110 *
111 * @param buf The string buffer to append to.
112 * @param str The string to append.
113 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
114 *
115 * This function appends the escaped string @p str to @p buf. If @p
116 * str can not be appended, #EINA_FALSE is returned, otherwise,
117 * #EINA_TRUE is returned.
118 */
119EAPI Eina_Bool eina_ustrbuf_append_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str) EINA_ARG_NONNULL(1, 2);
120
121/**
122 * @brief Append a string to a buffer, reallocating as necessary,
123 * limited by the given length.
124 *
125 * @param buf The string buffer to append to.
126 * @param str The string to append.
127 * @param maxlen The maximum number of characters to append.
128 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
129 *
130 * This function appends at most @p maxlen characters of @p str to
131 * @p buf. It can't appends more than the length of @p str. It
132 * computes the length of @p str, so is slightly slower than
133 * eina_ustrbuf_append_length(). If the length is known beforehand,
134 * consider using that variant (@p maxlen should then be checked so
135 * that it is greater than the size of @p str). If @p str can not be
136 * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
137 * returned.
138 *
139 * @see eina_ustrbuf_append()
140 * @see eina_ustrbuf_append_length()
141 */
142EAPI Eina_Bool eina_ustrbuf_append_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen) EINA_ARG_NONNULL(1, 2);
143
144/**
145 * @brief Append a string of exact length to a buffer, reallocating as necessary.
146 *
147 * @param buf The string buffer to append to.
148 * @param str The string to append.
149 * @param length The exact length to use.
150 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
151 *
152 * This function appends @p str to @p buf. @p str must be of size at
153 * most @p length. It is slightly faster than eina_ustrbuf_append() as
154 * it does not compute the size of @p str. It is useful when dealing
155 * with strings of known size, such as eina_strngshare. If @p buf
156 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
157 * returned.
158 *
159 * @see eina_stringshare_length()
160 * @see eina_ustrbuf_append()
161 * @see eina_ustrbuf_append_n()
162 */
163EAPI Eina_Bool eina_ustrbuf_append_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length) EINA_ARG_NONNULL(1, 2);
164
165/**
166 * @brief Append a character to a string buffer, reallocating as
167 * necessary.
168 *
169 * @param buf The string buffer to append to.
170 * @param c The char to append.
171 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
172 *
173 * This function inserts @p c to @p buf. If it can not insert it,
174 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
175 */
176EAPI Eina_Bool eina_ustrbuf_append_char(Eina_UStrbuf *buf, Eina_Unicode c) EINA_ARG_NONNULL(1);
177
178/**
179 * @brief Insert a string to a buffer, reallocating as necessary.
180 *
181 * @param buf The string buffer to insert.
182 * @param str The string to insert.
183 * @param pos The position to insert the string.
184 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
185 *
186 * This function inserts @p str to @p buf at position @p pos. It
187 * computes the length of @p str, so is slightly slower than
188 * eina_ustrbuf_insert_length(). If the length is known beforehand,
189 * consider using that variant. If @p buf can't insert it, #EINA_FALSE
190 * is returned, otherwise #EINA_TRUE is returned.
191 */
192EAPI Eina_Bool eina_ustrbuf_insert(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
193
194/**
195 * @brief Insert an escaped string to a buffer, reallocating as
196 * necessary.
197 *
198 * @param buf The string buffer to insert to.
199 * @param str The string to insert.
200 * @param pos The position to insert the string.
201 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
202 *
203 * This function inserts the escaped string @p str to @p buf at
204 * position @p pos. If @p buf can't insert @p str, #EINA_FALSE is
205 * returned, otherwise #EINA_TRUE is returned.
206 */
207EAPI Eina_Bool eina_ustrbuf_insert_escaped(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t pos) EINA_ARG_NONNULL(1, 2);
208
209/**
210 * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen.
211 *
212 * @param buf The string buffer to insert to.
213 * @param str The string to insert.
214 * @param maxlen The maximum number of chars to insert.
215 * @param pos The position to insert the string.
216 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
217 *
218 * This function inserts @p str ot @p buf at position @p pos, with at
219 * most @p maxlen bytes. The number of inserted characters can not be
220 * greater than the length of @p str. It computes the length of
221 * @p str, so is slightly slower than eina_ustrbuf_insert_length(). If the
222 * length is known beforehand, consider using that variant (@p maxlen
223 * should then be checked so that it is greater than the size of
224 * @p str). If @p str can not be inserted, #EINA_FALSE is returned,
225 * otherwise, #EINA_TRUE is returned.
226 */
227EAPI Eina_Bool eina_ustrbuf_insert_n(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t maxlen, size_t pos) EINA_ARG_NONNULL(1, 2);
228
229/**
230 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
231 *
232 * @param buf The string buffer to insert to.
233 * @param str The string to insert.
234 * @param length The exact length to use.
235 * @param pos The position to insert the string.
236 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
237 *
238 * This function inserts @p str to @p buf. @p str must be of size at
239 * most @p length. It is slightly faster than eina_ustrbuf_insert() as
240 * it does not compute the size of @p str. It is useful when dealing
241 * with strings of known size, such as eina_strngshare. If @p buf
242 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
243 * returned.
244 *
245 * @see eina_stringshare_length()
246 * @see eina_ustrbuf_insert()
247 * @see eina_ustrbuf_insert_n()
248 */
249EAPI Eina_Bool eina_ustrbuf_insert_length(Eina_UStrbuf *buf, const Eina_Unicode *str, size_t length, size_t pos) EINA_ARG_NONNULL(1, 2);
250
251/**
252 * @brief Insert a character to a string buffer, reallocating as
253 * necessary.
254 *
255 * @param buf The string buffer to insert to.
256 * @param c The char to insert.
257 * @param pos The position to insert the char.
258 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
259 *
260 * This function inserts @p c to @p buf at position @p pos. If @p buf
261 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
262 * returned.
263 */
264EAPI Eina_Bool eina_ustrbuf_insert_char(Eina_UStrbuf *buf, Eina_Unicode c, size_t pos) EINA_ARG_NONNULL(1);
265
266/**
267 * @def eina_ustrbuf_prepend(buf, str)
268 * @brief Prepend the given string to the given buffer
269 *
270 * @param buf The string buffer to prepend to.
271 * @param str The string to prepend.
272 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
273 *
274 * This macro is calling eina_ustrbuf_insert() at position 0.If @p buf
275 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
276 * returned.
277 */
278#define eina_ustrbuf_prepend(buf, str) eina_ustrbuf_insert(buf, str, 0)
279
280/**
281 * @def eina_ustrbuf_prepend_escaped(buf, str)
282 * @brief Prepend the given escaped string to the given buffer
283 *
284 * @param buf The string buffer to prepend to.
285 * @param str The string to prepend.
286 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
287 *
288 * This macro is calling eina_ustrbuf_insert_escaped() at position 0. If
289 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
290 * #EINA_TRUE is returned.
291 */
292#define eina_ustrbuf_prepend_escaped(buf, str) eina_ustrbuf_insert_escaped(buf, str, 0)
293
294/**
295 * @def eina_ustrbuf_prepend_n(buf, str)
296 * @brief Prepend the given escaped string to the given buffer
297 *
298 * @param buf The string buffer to prepend to.
299 * @param str The string to prepend.
300 * @param maxlen The maximum number of Eina_Unicode *s to prepend.
301 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
302 *
303 * This macro is calling eina_ustrbuf_insert_n() at position 0. If
304 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
305 * #EINA_TRUE is returned.
306 */
307#define eina_ustrbuf_prepend_n(buf, str, maxlen) eina_ustrbuf_insert_n(buf, str, maxlen, 0)
308
309/**
310 * @def eina_ustrbuf_prepend_length(buf, str)
311 * @brief Prepend the given escaped string to the given buffer
312 *
313 * @param buf The string buffer to prepend to.
314 * @param str The string to prepend.
315 * @param length The exact length to use.
316 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
317 *
318 * This macro is calling eina_ustrbuf_insert_length() at position 0. If
319 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
320 * #EINA_TRUE is returned.
321 */
322#define eina_ustrbuf_prepend_length(buf, str, length) eina_ustrbuf_insert_length(buf, str, length, 0)
323
324/**
325 * @def eina_ustrbuf_prepend_char(buf, c)
326 * @brief Prepend the given unicode character to the given buffer
327 *
328 * @param buf The string buffer to prepend to.
329 * @param c The Eina_Unicode character to prepend.
330 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
331 *
332 * This macro is calling eina_ustrbuf_insert_Eina_Unicode *() at position 0. If
333 * @p buf can't prepend it, #EINA_FALSE is returned, otherwise
334 * #EINA_TRUE is returned.
335 */
336#define eina_ustrbuf_prepend_char(buf, c) eina_ustrbuf_insert_char(buf, c, 0)
337
338/**
339 * @def eina_ustrbuf_prepend_printf(buf, fmt, ...)
340 * @brief Prepend the given string to the given buffer
341 *
342 * @param buf The string buffer to prepend to.
343 * @param fmt The string to prepend.
344 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
345 *
346 * This macro is calling eina_ustrbuf_insert_printf() at position 0.If @p buf
347 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
348 * returned.
349 */
350#define eina_ustrbuf_prepend_printf(buf, fmt, ...) eina_ustrbuf_insert_printf(buf, fmt, 0, ## __VA_ARGS__)
351
352/**
353 * @def eina_ustrbuf_prepend_vprintf(buf, fmt, args)
354 * @brief Prepend the given string to the given buffer
355 *
356 * @param buf The string buffer to prepend to.
357 * @param fmt The string to prepend.
358 * @param args The variable arguments.
359 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
360 *
361 * This macro is calling eina_ustrbuf_insert_vprintf() at position 0.If @p buf
362 * can't prepend it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
363 * returned.
364 */
365#define eina_ustrbuf_prepend_vprintf(buf, fmt, args) eina_ustrbuf_insert_vprintf(buf, fmt, 0, args)
366
367/**
368 * @brief Remove a slice of the given string buffer.
369 *
370 * @param buf The string buffer to remove a slice.
371 * @param start The initial (inclusive) slice position to start
372 * removing, in bytes.
373 * @param end The final (non-inclusive) slice position to finish
374 * removing, in bytes.
375 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
376 *
377 * This function removes a slice of @p buf, starting at @p start
378 * (inclusive) and ending at @p end (non-inclusive). Both values are
379 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
380 */
381EAPI Eina_Bool
382eina_ustrbuf_remove(Eina_UStrbuf *buf, size_t start, size_t end) EINA_ARG_NONNULL(1);
383
384/**
385 * @brief Retrieve a pointer to the contents of a string buffer
386 *
387 * @param buf The string buffer.
388 * @return The current string in the string buffer.
389 *
390 * This function returns the string contained in @p buf. The returned
391 * value must not be modified and will no longer be valid if @p buf is
392 * modified. In other words, any eina_ustrbuf_append() or similar will
393 * make that pointer invalid.
394 *
395 * @see eina_ustrbuf_string_steal()
396 */
397EAPI const Eina_Unicode *
398eina_ustrbuf_string_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
399
400/**
401 * @brief Steal the contents of a string buffer.
402 *
403 * @param buf The string buffer to steal.
404 * @return The current string in the string buffer.
405 *
406 * This function returns the string contained in @p buf. @p buf is
407 * then initialized and does not own the returned string anymore. The
408 * caller must release the memory of the returned string by calling
409 * free().
410 *
411 * @see eina_ustrbuf_string_get()
412 */
413EAPI Eina_Unicode *
414eina_ustrbuf_string_steal(Eina_UStrbuf *buf) EINA_MALLOC EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
415
416/**
417 * @brief Free the contents of a string buffer but not the buffer.
418 *
419 * @param buf The string buffer to free the string of.
420 *
421 * This function frees the string contained in @p buf without freeing
422 * @p buf.
423 */
424EAPI void
425eina_ustrbuf_string_free(Eina_UStrbuf *buf) EINA_ARG_NONNULL(1);
426
427/**
428 * @brief Retrieve the length of the string buffer content.
429 *
430 * @param buf The string buffer.
431 * @return The current length of the string, in bytes.
432 *
433 * This function returns the length of @p buf.
434 */
435EAPI size_t
436eina_ustrbuf_length_get(const Eina_UStrbuf *buf) EINA_ARG_NONNULL(1) EINA_WARN_UNUSED_RESULT;
437
438/**
439 * @}
440 */
441
442/**
443 * @}
444 */
445
446#endif /* EINA_STRBUF_H */
diff --git a/libraries/eina/src/include/eina_ustringshare.h b/libraries/eina/src/include/eina_ustringshare.h
new file mode 100644
index 0000000..1036573
--- /dev/null
+++ b/libraries/eina/src/include/eina_ustringshare.h
@@ -0,0 +1,200 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 *
18 * This file incorporates work covered by the following copyright and
19 * permission notice:
20 *
21 * Copyright (C) 2008 Peter Wehrfritz
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to
25 * deal in the Software without restriction, including without limitation the
26 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
27 * sell copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies of the Software and its Copyright notices. In addition publicly
32 * documented acknowledgment must be given that this software has been used if no
33 * source code of this software is made available publicly. This includes
34 * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
35 * documents or any documentation provided with any product containing this
36 * software. This License does not apply to any software that links to the
37 * libraries provided by this software (statically or dynamically), but only to
38 * the software provided.
39 *
40 * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice
41 * and it's intent.
42 *
43 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
46 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
47 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
48 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49 */
50
51#ifndef EINA_USTRINGSHARE_H_
52#define EINA_USTRINGSHARE_H_
53
54#include "eina_types.h"
55#include "eina_unicode.h"
56
57/**
58 * @addtogroup Eina_UStringshare_Group Unicode Stringshare
59 *
60 * These functions allow you to store one copy of a string, and use it
61 * throughout your program.
62 *
63 * This is a method to reduce the number of duplicated strings kept in
64 * memory. It's pretty common for the same strings to be dynamically
65 * allocated repeatedly between applications and libraries, especially in
66 * circumstances where you could have multiple copies of a structure that
67 * allocates the string. So rather than duplicating and freeing these
68 * strings, you request a read-only pointer to an existing string and
69 * only incur the overhead of a hash lookup.
70 *
71 * It sounds like micro-optimizing, but profiling has shown this can have
72 * a significant impact as you scale the number of copies up. It improves
73 * string creation/destruction speed, reduces memory use and decreases
74 * memory fragmentation, so a win all-around.
75 *
76 * For more information, you can look at the @ref tutorial_ustringshare_page.
77 */
78
79/**
80 * @addtogroup Eina_Data_Types_Group Data Types
81 *
82 * @{
83 */
84
85/**
86 * @defgroup Eina_UStringshare_Group Unicode Stringshare
87 *
88 * @{
89 */
90
91
92/**
93 * @brief Retrieve an instance of a string for use in a program.
94 *
95 * @param str The string to retrieve an instance of.
96 * @param slen The string size (<= strlen(str)).
97 * @return A pointer to an instance of the string on success.
98 * @c NULL on failure.
99 *
100 * This function retrieves an instance of @p str. If @p str is
101 * @c NULL, then @c NULL is returned. If @p str is already stored, it
102 * is just returned and its reference counter is increased. Otherwise
103 * it is added to the strings to be searched and a duplicated string
104 * of @p str is returned.
105 *
106 * This function does not check string size, but uses the
107 * exact given size. This can be used to share_common part of a larger
108 * buffer or substring.
109 *
110 * @see eina_ustringshare_add()
111 */
112EAPI const Eina_Unicode *eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen) EINA_WARN_UNUSED_RESULT;
113
114/**
115 * @brief Retrieve an instance of a string for use in a program.
116 *
117 * @param str The NULL terminated string to retrieve an instance of.
118 * @return A pointer to an instance of the string on success.
119 * @c NULL on failure.
120 *
121 * This function retrieves an instance of @p str. If @p str is
122 * @c NULL, then @c NULL is returned. If @p str is already stored, it
123 * is just returned and its reference counter is increased. Otherwise
124 * it is added to the strings to be searched and a duplicated string
125 * of @p str is returned.
126 *
127 * The string @p str must be NULL terminated ('@\0') and its full
128 * length will be used. To use part of the string or non-null
129 * terminated, use eina_stringshare_add_length() instead.
130 *
131 * @see eina_ustringshare_add_length()
132 */
133EAPI const Eina_Unicode *eina_ustringshare_add(const Eina_Unicode *str) EINA_WARN_UNUSED_RESULT;
134
135/**
136 * Increment references of the given shared string.
137 *
138 * @param str The shared string.
139 * @return A pointer to an instance of the string on success.
140 * @c NULL on failure.
141 *
142 * This is similar to eina_share_common_add(), but it's faster since it will
143 * avoid lookups if possible, but on the down side it requires the parameter
144 * to be shared before, in other words, it must be the return of a previous
145 * eina_ustringshare_add().
146 *
147 * There is no unref since this is the work of eina_ustringshare_del().
148 */
149EAPI const Eina_Unicode *eina_ustringshare_ref(const Eina_Unicode *str);
150
151/**
152 * @brief Note that the given string has lost an instance.
153 *
154 * @param str string The given string.
155 *
156 * This function decreases the reference counter associated to @p str
157 * if it exists. If that counter reaches 0, the memory associated to
158 * @p str is freed. If @p str is NULL, the function returns
159 * immediately.
160 *
161 * Note that if the given pointer is not shared or NULL, bad things
162 * will happen, likely a segmentation fault.
163 */
164EAPI void eina_ustringshare_del(const Eina_Unicode *str);
165
166/**
167 * @brief Note that the given string @b must be shared.
168 *
169 * @param str the shared string to know the length. It is safe to
170 * give NULL, in that case -1 is returned.
171 *
172 * This function is a cheap way to known the length of a shared
173 * string. Note that if the given pointer is not shared, bad
174 * things will happen, likely a segmentation fault. If in doubt, try
175 * strlen().
176 */
177EAPI int eina_ustringshare_strlen(const Eina_Unicode *str) EINA_PURE EINA_WARN_UNUSED_RESULT;
178
179/**
180 * @brief Dump the contents of the share_common.
181 *
182 * This function dumps all strings in the share_common to stdout with a
183 * DDD: prefix per line and a memory usage summary.
184 */
185EAPI void eina_ustringshare_dump(void);
186
187static inline Eina_Bool eina_ustringshare_replace(const Eina_Unicode **p_str, const Eina_Unicode *news) EINA_ARG_NONNULL(1);
188static inline Eina_Bool eina_ustringshare_replace_length(const Eina_Unicode **p_str, const Eina_Unicode *news, unsigned int slen) EINA_ARG_NONNULL(1);
189
190#include "eina_inline_ustringshare.x"
191
192/**
193 * @}
194 */
195
196/**
197 * @}
198 */
199
200#endif /* EINA_STRINGSHARE_H_ */
diff --git a/libraries/eina/src/include/eina_xattr.h b/libraries/eina/src/include/eina_xattr.h
new file mode 100644
index 0000000..8ddb30a
--- /dev/null
+++ b/libraries/eina/src/include/eina_xattr.h
@@ -0,0 +1,168 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_XATTR_H_
20#define EINA_XATTR_H_
21
22#include "eina_types.h"
23
24/**
25 * @addtogroup Eina_Tools_Group Tools
26 *
27 * @{
28 */
29
30/**
31 * @typedef Eina_Xattr_Flags
32 * define extended attribute creation
33 *
34 * @since 1.1
35 */
36typedef enum {
37 EINA_XATTR_INSERT, /**< This is the default behaviour, it will either create or replace the extended attribute */
38 EINA_XATTR_REPLACE, /**< This will only succeed if the extended attribute previously existed */
39 EINA_XATTR_CREATED /**< This will only succeed if the extended attribute wasn't previously set */
40} Eina_Xattr_Flags;
41
42
43/**
44 * @brief Get an iterator that list all extended attribute of a file.
45 *
46 * @param file The filename to retrieve the extended attribute list from.
47 * @return an iterator.
48 *
49 * The iterator will not allocate any data during the iteration step, so you need to copy them yourself
50 * if you need.
51 *
52 * @since 1.1
53 */
54EAPI Eina_Iterator *eina_xattr_ls(const char *file);
55
56/**
57 * @brief Retrieve an extended attribute from a file.
58 *
59 * @param file The file to retrieve the extended attribute from.
60 * @param atttribute The extended attribute name to retrieve.
61 * @param size The size of the retrieved extended attribute.
62 * @return the allocated data that hold the extended attribute value.
63 *
64 * It will return NULL and *size will be @c 0 if it fails.
65 *
66 * @since 1.1
67 */
68EAPI void *eina_xattr_get(const char *file, const char *attribute, ssize_t *size);
69
70/**
71 * @brief Set an extended attribute on a file.
72 *
73 * @param file The file to set the extended attribute to.
74 * @param attribute The attribute to set.
75 * @param data The data to set.
76 * @param length The length of the data to set.
77 * @param flags Define the set policy.
78 * @return EINA_TRUE on success, EINA_FALSE otherwise.
79 *
80 * @since 1.1
81 */
82EAPI Eina_Bool eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags);
83
84/**
85 * @brief Set a string as a extended attribute properties.
86 *
87 * @param file The file to set the string to.
88 * @param attribute The attribute to set.
89 * @param data The NULL terminated string to set.
90 * @param flags Define the set policy.
91 * @return EINA_TRUE on success, EINA_FALSE otherwise.
92 *
93 * @since 1.1
94 */
95EAPI Eina_Bool eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags);
96
97/**
98 * @brief Get a string from an extended attribute properties.
99 *
100 * @param file The file to get the string from.
101 * @param attribute The attribute to get.
102 * @return a valid string on success, NULL otherwise.
103 *
104 * This call check that the string is properly NULL-terminated before returning it.
105 *
106 * @since 1.1
107 */
108EAPI char *eina_xattr_string_get(const char *file, const char *attribute);
109
110/**
111 * @brief Set a double as a extended attribute properties.
112 *
113 * @param file The file to set the double to.
114 * @param attribute The attribute to set.
115 * @param data The NULL terminated double to set.
116 * @param flags Define the set policy.
117 * @return EINA_TRUE on success, EINA_FALSE otherwise.
118 *
119 * @since 1.1
120 */
121EAPI Eina_Bool eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags);
122
123/**
124 * @brief Get a double from an extended attribute properties.
125 *
126 * @param file The file to get the string from.
127 * @param attribute The attribute to get.
128 * @param value Where to put the extracted value
129 * @return EINA_TRUE on success, EINA_FALSE otherwise.
130 *
131 * This call check that the double is correctly set.
132 *
133 * @since 1.1
134 */
135EAPI Eina_Bool eina_xattr_double_get(const char *file, const char *attribute, double *value);
136
137/**
138 * @brief Set an int as a extended attribute properties.
139 *
140 * @param file The file to set the int to.
141 * @param attribute The attribute to set.
142 * @param data The NULL terminated int to set.
143 * @param flags Define the set policy.
144 * @return EINA_TRUE on success, EINA_FALSE otherwise.
145 *
146 * @since 1.1
147 */
148EAPI Eina_Bool eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags);
149
150/**
151 * @brief Get a int from an extended attribute properties.
152 *
153 * @param file The file to get the string from.
154 * @param attribute The attribute to get.
155 * @param value Where to put the extracted value
156 * @return EINA_TRUE on success, EINA_FALSE otherwise.
157 *
158 * This call check that the int is correctly set.
159 *
160 * @since 1.1
161 */
162EAPI Eina_Bool eina_xattr_int_get(const char *file, const char *attribute, int *value);
163
164/**
165 * @}
166 */
167
168#endif
diff --git a/libraries/eina/src/lib/Makefile.am b/libraries/eina/src/lib/Makefile.am
new file mode 100644
index 0000000..0537a61
--- /dev/null
+++ b/libraries/eina/src/lib/Makefile.am
@@ -0,0 +1,171 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I$(top_srcdir)/src/include \
5-I$(top_builddir)/src/include \
6-DPACKAGE_BIN_DIR=\"$(bindir)\" \
7-DPACKAGE_LIB_DIR=\"$(libdir)\" \
8-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
9@EINA_CPPFLAGS@ \
10@EFL_EINA_BUILD@
11
12base_sources = \
13eina_accessor.c \
14eina_array.c \
15eina_benchmark.c \
16eina_binbuf.c \
17eina_binshare.c \
18eina_convert.c \
19eina_counter.c \
20eina_cpu.c \
21eina_error.c \
22eina_fp.c \
23eina_hamster.c \
24eina_hash.c \
25eina_inlist.c \
26eina_iterator.c \
27eina_lalloc.c \
28eina_list.c \
29eina_log.c \
30eina_magic.c \
31eina_main.c \
32eina_matrixsparse.c \
33eina_mempool.c \
34eina_mmap.c \
35eina_module.c \
36eina_prefix.c \
37eina_quadtree.c \
38eina_rbtree.c \
39eina_rectangle.c \
40eina_safety_checks.c \
41eina_sched.c \
42eina_share_common.c \
43eina_simple_xml_parser.c \
44eina_str.c \
45eina_strbuf.c \
46eina_strbuf_common.c \
47eina_stringshare.c \
48eina_tiler.c \
49eina_unicode.c \
50eina_ustrbuf.c \
51eina_ustringshare.c \
52eina_value.c \
53eina_xattr.c
54
55# Will be back for developper after 1.1
56# eina_object.c
57
58if EINA_HAVE_WIN32
59base_sources += eina_file_win32.c
60else
61base_sources += eina_file.c
62endif
63
64EXTRA_DIST = \
65eina_share_common.h \
66eina_private.h \
67eina_strbuf_common.h \
68eina_strbuf_template_c.x \
69eina_binbuf_template_c.x
70
71
72
73if EINA_STATIC_BUILD_BUDDY
74base_sources += $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
75endif
76
77if EINA_STATIC_BUILD_CHAINED_POOL
78base_sources += $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
79endif
80
81if EINA_STATIC_BUILD_EMEMOA_FIXED
82base_sources += $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
83endif
84
85if EINA_STATIC_BUILD_EMEMOA_UNKNOWN
86base_sources += $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
87endif
88
89if EINA_STATIC_BUILD_FIXED_BITMAP
90base_sources += $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
91endif
92
93if EINA_STATIC_BUILD_ONE_BIG
94base_sources += $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
95endif
96
97if EINA_STATIC_BUILD_PASS_THROUGH
98base_sources += $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
99endif
100
101lib_LTLIBRARIES = libeina.la
102
103if EINA_AMALGAMATION
104nodist_libeina_la_SOURCES = eina_amalgamation.c
105
106eina_amalgamation.c: $(base_sources) Makefile
107 -rm -f eina_amalgamation.c
108
109 @echo "#ifdef HAVE_CONFIG_H" >> eina_amalgamation.c
110 @echo "#include \"config.h\"" >> eina_amalgamation.c
111 @echo "#endif" >> eina_amalgamation.c
112
113 @echo "#ifdef HAVE_ALLOCA_H" >> eina_amalgamation.c
114 @echo "# include <alloca.h>" >> eina_amalgamation.c
115 @echo "#elif defined __GNUC__" >> eina_amalgamation.c
116 @echo "# define alloca __builtin_alloca" >> eina_amalgamation.c
117 @echo "#elif defined _AIX" >> eina_amalgamation.c
118 @echo "# define alloca __alloca" >> eina_amalgamation.c
119 @echo "#elif defined _MSC_VER" >> eina_amalgamation.c
120 @echo "# include <malloc.h>" >> eina_amalgamation.c
121 @echo "# define alloca _alloca" >> eina_amalgamation.c
122 @echo "#else" >> eina_amalgamation.c
123 @echo "# include <stddef.h>" >> eina_amalgamation.c
124 @echo "# ifdef __cplusplus" >> eina_amalgamation.c
125 @echo "#extern \"C\"" >> eina_amalgamation.c
126 @echo "# endif" >> eina_amalgamation.c
127 @echo "#void *alloca (size_t);" >> eina_amalgamation.c
128 @echo "#endif" >> eina_amalgamation.c
129
130 @echo "#include <stdio.h>" >> eina_amalgamation.c
131 @echo "#include <stdlib.h>" >> eina_amalgamation.c
132 @echo "#include <string.h>" >> eina_amalgamation.c
133 @echo "#include <dlfcn.h>" >> eina_amalgamation.c
134 @echo "#include <sys/types.h>" >> eina_amalgamation.c
135 @echo "#include <dirent.h>" >> eina_amalgamation.c
136 @echo "#include <assert.h>" >> eina_amalgamation.c
137 @echo "#include <errno.h>" >> eina_amalgamation.c
138 @echo "#include <fnmatch.h>" >> eina_amalgamation.c
139
140 @echo "#ifdef HAVE_EVIL" >> eina_amalgamation.c
141 @echo "# include <Evil.h>" >> eina_amalgamation.c
142 @echo "#endif" >> eina_amalgamation.c
143
144 @echo "#include \"eina_config.h\"" >> eina_amalgamation.c
145 @echo "#include \"eina_private.h\"" >> eina_amalgamation.c
146 @echo "#include \"eina_safety_checks.h\"" >> eina_amalgamation.c
147 @echo "#include \"Eina.h\"" >> eina_amalgamation.c
148 @echo "#include \"eina_strbuf_common.h\"" >> eina_amalgamation.c
149 @echo "#include \"eina_share_common.h\"" >> eina_amalgamation.c
150
151 @for f in $(base_sources); do \
152 if [ `echo $$f | sed -e 's/^...\(.\).*/\1/'` != '/' ]; then \
153 file="$(srcdir)/$$f" ; \
154 else \
155 file="$$f" ; \
156 fi ; \
157 echo "/* file: $$file */" >> eina_amalgamation.c; \
158 grep -v -e '^# *include \+.\(config\|eina_[a-z_]\+\|Evil\|stdio\|stdlib\|string\|dlfcn\|dirent\|assert\|errno\|fnmatch\)[.]h.*' $$file >> eina_amalgamation.c; \
159 done
160 @echo "eina_amalgamation.c generated"
161
162else
163libeina_la_SOURCES = $(base_sources)
164endif
165
166libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@
167libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@
168libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
169
170clean-local:
171 rm -rf *.gcno eina_amalgamation.c
diff --git a/libraries/eina/src/lib/Makefile.in b/libraries/eina/src/lib/Makefile.in
new file mode 100644
index 0000000..359aba0
--- /dev/null
+++ b/libraries/eina/src/lib/Makefile.in
@@ -0,0 +1,1226 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37
38# Will be back for developper after 1.1
39# eina_object.c
40@EINA_HAVE_WIN32_TRUE@am__append_1 = eina_file_win32.c
41@EINA_HAVE_WIN32_FALSE@am__append_2 = eina_file.c
42@EINA_STATIC_BUILD_BUDDY_TRUE@am__append_3 = $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
43@EINA_STATIC_BUILD_CHAINED_POOL_TRUE@am__append_4 = $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
44@EINA_STATIC_BUILD_EMEMOA_FIXED_TRUE@am__append_5 = $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
45@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_TRUE@am__append_6 = $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
46@EINA_STATIC_BUILD_FIXED_BITMAP_TRUE@am__append_7 = $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
47@EINA_STATIC_BUILD_ONE_BIG_TRUE@am__append_8 = $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
48@EINA_STATIC_BUILD_PASS_THROUGH_TRUE@am__append_9 = $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
49subdir = src/lib
50DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
51ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
52am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
53 $(top_srcdir)/m4/efl_benchmark.m4 \
54 $(top_srcdir)/m4/efl_compiler_flag.m4 \
55 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
56 $(top_srcdir)/m4/efl_doxygen.m4 \
57 $(top_srcdir)/m4/efl_examples.m4 \
58 $(top_srcdir)/m4/efl_fnmatch.m4 \
59 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
60 $(top_srcdir)/m4/efl_threads.m4 \
61 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
62 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
63 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
64 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
65 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
66am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
67 $(ACLOCAL_M4)
68mkinstalldirs = $(install_sh) -d
69CONFIG_HEADER = $(top_builddir)/config.h
70CONFIG_CLEAN_FILES =
71CONFIG_CLEAN_VPATH_FILES =
72am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
73am__vpath_adj = case $$p in \
74 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
75 *) f=$$p;; \
76 esac;
77am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
78am__install_max = 40
79am__nobase_strip_setup = \
80 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
81am__nobase_strip = \
82 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
83am__nobase_list = $(am__nobase_strip_setup); \
84 for p in $$list; do echo "$$p $$p"; done | \
85 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
86 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
87 if (++n[$$2] == $(am__install_max)) \
88 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
89 END { for (dir in files) print dir, files[dir] }'
90am__base_list = \
91 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
92 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
93am__installdirs = "$(DESTDIR)$(libdir)"
94LTLIBRARIES = $(lib_LTLIBRARIES)
95libeina_la_DEPENDENCIES =
96am__libeina_la_SOURCES_DIST = eina_accessor.c eina_array.c \
97 eina_benchmark.c eina_binbuf.c eina_binshare.c eina_convert.c \
98 eina_counter.c eina_cpu.c eina_error.c eina_fp.c \
99 eina_hamster.c eina_hash.c eina_inlist.c eina_iterator.c \
100 eina_lalloc.c eina_list.c eina_log.c eina_magic.c eina_main.c \
101 eina_matrixsparse.c eina_mempool.c eina_mmap.c eina_module.c \
102 eina_prefix.c eina_quadtree.c eina_rbtree.c eina_rectangle.c \
103 eina_safety_checks.c eina_sched.c eina_share_common.c \
104 eina_simple_xml_parser.c eina_str.c eina_strbuf.c \
105 eina_strbuf_common.c eina_stringshare.c eina_tiler.c \
106 eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \
107 eina_xattr.c eina_file_win32.c eina_file.c \
108 $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c \
109 $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c \
110 $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c \
111 $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c \
112 $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c \
113 $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c \
114 $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
115@EINA_HAVE_WIN32_TRUE@am__objects_1 = libeina_la-eina_file_win32.lo
116@EINA_HAVE_WIN32_FALSE@am__objects_2 = libeina_la-eina_file.lo
117@EINA_STATIC_BUILD_BUDDY_TRUE@am__objects_3 = \
118@EINA_STATIC_BUILD_BUDDY_TRUE@ libeina_la-eina_buddy.lo
119@EINA_STATIC_BUILD_CHAINED_POOL_TRUE@am__objects_4 = libeina_la-eina_chained_mempool.lo
120@EINA_STATIC_BUILD_EMEMOA_FIXED_TRUE@am__objects_5 = libeina_la-eina_ememoa_fixed.lo
121@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_TRUE@am__objects_6 = libeina_la-eina_ememoa_unknown.lo
122@EINA_STATIC_BUILD_FIXED_BITMAP_TRUE@am__objects_7 = libeina_la-eina_fixed_bitmap.lo
123@EINA_STATIC_BUILD_ONE_BIG_TRUE@am__objects_8 = \
124@EINA_STATIC_BUILD_ONE_BIG_TRUE@ libeina_la-eina_one_big.lo
125@EINA_STATIC_BUILD_PASS_THROUGH_TRUE@am__objects_9 = libeina_la-eina_pass_through.lo
126am__objects_10 = libeina_la-eina_accessor.lo libeina_la-eina_array.lo \
127 libeina_la-eina_benchmark.lo libeina_la-eina_binbuf.lo \
128 libeina_la-eina_binshare.lo libeina_la-eina_convert.lo \
129 libeina_la-eina_counter.lo libeina_la-eina_cpu.lo \
130 libeina_la-eina_error.lo libeina_la-eina_fp.lo \
131 libeina_la-eina_hamster.lo libeina_la-eina_hash.lo \
132 libeina_la-eina_inlist.lo libeina_la-eina_iterator.lo \
133 libeina_la-eina_lalloc.lo libeina_la-eina_list.lo \
134 libeina_la-eina_log.lo libeina_la-eina_magic.lo \
135 libeina_la-eina_main.lo libeina_la-eina_matrixsparse.lo \
136 libeina_la-eina_mempool.lo libeina_la-eina_mmap.lo \
137 libeina_la-eina_module.lo libeina_la-eina_prefix.lo \
138 libeina_la-eina_quadtree.lo libeina_la-eina_rbtree.lo \
139 libeina_la-eina_rectangle.lo libeina_la-eina_safety_checks.lo \
140 libeina_la-eina_sched.lo libeina_la-eina_share_common.lo \
141 libeina_la-eina_simple_xml_parser.lo libeina_la-eina_str.lo \
142 libeina_la-eina_strbuf.lo libeina_la-eina_strbuf_common.lo \
143 libeina_la-eina_stringshare.lo libeina_la-eina_tiler.lo \
144 libeina_la-eina_unicode.lo libeina_la-eina_ustrbuf.lo \
145 libeina_la-eina_ustringshare.lo libeina_la-eina_value.lo \
146 libeina_la-eina_xattr.lo $(am__objects_1) $(am__objects_2) \
147 $(am__objects_3) $(am__objects_4) $(am__objects_5) \
148 $(am__objects_6) $(am__objects_7) $(am__objects_8) \
149 $(am__objects_9)
150@EINA_AMALGAMATION_FALSE@am_libeina_la_OBJECTS = $(am__objects_10)
151@EINA_AMALGAMATION_TRUE@nodist_libeina_la_OBJECTS = \
152@EINA_AMALGAMATION_TRUE@ libeina_la-eina_amalgamation.lo
153libeina_la_OBJECTS = $(am_libeina_la_OBJECTS) \
154 $(nodist_libeina_la_OBJECTS)
155AM_V_lt = $(am__v_lt_$(V))
156am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
157am__v_lt_0 = --silent
158libeina_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
159 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libeina_la_CFLAGS) \
160 $(CFLAGS) $(libeina_la_LDFLAGS) $(LDFLAGS) -o $@
161DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
162depcomp = $(SHELL) $(top_srcdir)/depcomp
163am__depfiles_maybe = depfiles
164am__mv = mv -f
165COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
166 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
167LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
168 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
169 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
170 $(AM_CFLAGS) $(CFLAGS)
171AM_V_CC = $(am__v_CC_$(V))
172am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
173am__v_CC_0 = @echo " CC " $@;
174AM_V_at = $(am__v_at_$(V))
175am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
176am__v_at_0 = @
177CCLD = $(CC)
178LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
179 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
180 $(AM_LDFLAGS) $(LDFLAGS) -o $@
181AM_V_CCLD = $(am__v_CCLD_$(V))
182am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
183am__v_CCLD_0 = @echo " CCLD " $@;
184AM_V_GEN = $(am__v_GEN_$(V))
185am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
186am__v_GEN_0 = @echo " GEN " $@;
187SOURCES = $(libeina_la_SOURCES) $(nodist_libeina_la_SOURCES)
188DIST_SOURCES = $(am__libeina_la_SOURCES_DIST)
189ETAGS = etags
190CTAGS = ctags
191DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
192ACLOCAL = @ACLOCAL@
193ALLOCA = @ALLOCA@
194AMTAR = @AMTAR@
195AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
196AR = @AR@
197AS = @AS@
198AUTOCONF = @AUTOCONF@
199AUTOHEADER = @AUTOHEADER@
200AUTOMAKE = @AUTOMAKE@
201AWK = @AWK@
202CC = @CC@
203CCDEPMODE = @CCDEPMODE@
204CFLAGS = @CFLAGS@
205CHECK_CFLAGS = @CHECK_CFLAGS@
206CHECK_LIBS = @CHECK_LIBS@
207CPP = @CPP@
208CPPFLAGS = @CPPFLAGS@
209CXX = @CXX@
210CXXCPP = @CXXCPP@
211CXXDEPMODE = @CXXDEPMODE@
212CXXFLAGS = @CXXFLAGS@
213CYGPATH_W = @CYGPATH_W@
214DEFS = @DEFS@
215DEPDIR = @DEPDIR@
216DLLTOOL = @DLLTOOL@
217DSYMUTIL = @DSYMUTIL@
218DUMPBIN = @DUMPBIN@
219ECHO_C = @ECHO_C@
220ECHO_N = @ECHO_N@
221ECHO_T = @ECHO_T@
222ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
223ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
224EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
225EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
226EFL_EINA_BUILD = @EFL_EINA_BUILD@
227EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
228EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
229EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
230EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
231EGREP = @EGREP@
232EINA_CFLAGS = @EINA_CFLAGS@
233EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
234EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
235EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
236EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
237EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
238EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
239EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
240EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
241EINA_CPPFLAGS = @EINA_CPPFLAGS@
242EINA_LIBS = @EINA_LIBS@
243EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
244EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
245EMEMOA_LIBS = @EMEMOA_LIBS@
246ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
247ESCAPE_LIBS = @ESCAPE_LIBS@
248EVIL_CFLAGS = @EVIL_CFLAGS@
249EVIL_LIBS = @EVIL_LIBS@
250EXEEXT = @EXEEXT@
251FGREP = @FGREP@
252GLIB_CFLAGS = @GLIB_CFLAGS@
253GLIB_LIBS = @GLIB_LIBS@
254GREP = @GREP@
255INSTALL = @INSTALL@
256INSTALL_DATA = @INSTALL_DATA@
257INSTALL_PROGRAM = @INSTALL_PROGRAM@
258INSTALL_SCRIPT = @INSTALL_SCRIPT@
259INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
260LD = @LD@
261LDFLAGS = @LDFLAGS@
262LIBOBJS = @LIBOBJS@
263LIBS = @LIBS@
264LIBTOOL = @LIBTOOL@
265LIPO = @LIPO@
266LN_S = @LN_S@
267LTLIBOBJS = @LTLIBOBJS@
268MAKEINFO = @MAKEINFO@
269MKDIR_P = @MKDIR_P@
270MODULE_ARCH = @MODULE_ARCH@
271NM = @NM@
272NMEDIT = @NMEDIT@
273OBJDUMP = @OBJDUMP@
274OBJEXT = @OBJEXT@
275OTOOL = @OTOOL@
276OTOOL64 = @OTOOL64@
277PACKAGE = @PACKAGE@
278PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
279PACKAGE_NAME = @PACKAGE_NAME@
280PACKAGE_STRING = @PACKAGE_STRING@
281PACKAGE_TARNAME = @PACKAGE_TARNAME@
282PACKAGE_URL = @PACKAGE_URL@
283PACKAGE_VERSION = @PACKAGE_VERSION@
284PATH_SEPARATOR = @PATH_SEPARATOR@
285PKG_CONFIG = @PKG_CONFIG@
286PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
287PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
288RANLIB = @RANLIB@
289SED = @SED@
290SET_MAKE = @SET_MAKE@
291SHELL = @SHELL@
292STRIP = @STRIP@
293VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
294VALGRIND_LIBS = @VALGRIND_LIBS@
295VERSION = @VERSION@
296VMAJ = @VMAJ@
297abs_builddir = @abs_builddir@
298abs_srcdir = @abs_srcdir@
299abs_top_builddir = @abs_top_builddir@
300abs_top_srcdir = @abs_top_srcdir@
301ac_ct_CC = @ac_ct_CC@
302ac_ct_CXX = @ac_ct_CXX@
303ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
304am__include = @am__include@
305am__leading_dot = @am__leading_dot@
306am__quote = @am__quote@
307am__tar = @am__tar@
308am__untar = @am__untar@
309bindir = @bindir@
310build = @build@
311build_alias = @build_alias@
312build_cpu = @build_cpu@
313build_os = @build_os@
314build_vendor = @build_vendor@
315builddir = @builddir@
316datadir = @datadir@
317datarootdir = @datarootdir@
318dlopen_libs = @dlopen_libs@
319docdir = @docdir@
320dvidir = @dvidir@
321efl_doxygen = @efl_doxygen@
322efl_have_doxygen = @efl_have_doxygen@
323exec_prefix = @exec_prefix@
324have_lcov = @have_lcov@
325host = @host@
326host_alias = @host_alias@
327host_cpu = @host_cpu@
328host_os = @host_os@
329host_vendor = @host_vendor@
330htmldir = @htmldir@
331iconv_libs = @iconv_libs@
332includedir = @includedir@
333infodir = @infodir@
334install_sh = @install_sh@
335libdir = @libdir@
336libexecdir = @libexecdir@
337localedir = @localedir@
338localstatedir = @localstatedir@
339lt_ECHO = @lt_ECHO@
340lt_enable_auto_import = @lt_enable_auto_import@
341mandir = @mandir@
342mkdir_p = @mkdir_p@
343oldincludedir = @oldincludedir@
344pdfdir = @pdfdir@
345pkgconfig_requires_private = @pkgconfig_requires_private@
346prefix = @prefix@
347program_transform_name = @program_transform_name@
348psdir = @psdir@
349release_info = @release_info@
350requirement_eina = @requirement_eina@
351rt_libs = @rt_libs@
352sbindir = @sbindir@
353sharedstatedir = @sharedstatedir@
354srcdir = @srcdir@
355sysconfdir = @sysconfdir@
356target_alias = @target_alias@
357top_build_prefix = @top_build_prefix@
358top_builddir = @top_builddir@
359top_srcdir = @top_srcdir@
360version_info = @version_info@
361MAINTAINERCLEANFILES = Makefile.in
362AM_CPPFLAGS = \
363-I$(top_srcdir)/src/include \
364-I$(top_builddir)/src/include \
365-DPACKAGE_BIN_DIR=\"$(bindir)\" \
366-DPACKAGE_LIB_DIR=\"$(libdir)\" \
367-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
368@EINA_CPPFLAGS@ \
369@EFL_EINA_BUILD@
370
371base_sources = eina_accessor.c eina_array.c eina_benchmark.c \
372 eina_binbuf.c eina_binshare.c eina_convert.c eina_counter.c \
373 eina_cpu.c eina_error.c eina_fp.c eina_hamster.c eina_hash.c \
374 eina_inlist.c eina_iterator.c eina_lalloc.c eina_list.c \
375 eina_log.c eina_magic.c eina_main.c eina_matrixsparse.c \
376 eina_mempool.c eina_mmap.c eina_module.c eina_prefix.c \
377 eina_quadtree.c eina_rbtree.c eina_rectangle.c \
378 eina_safety_checks.c eina_sched.c eina_share_common.c \
379 eina_simple_xml_parser.c eina_str.c eina_strbuf.c \
380 eina_strbuf_common.c eina_stringshare.c eina_tiler.c \
381 eina_unicode.c eina_ustrbuf.c eina_ustringshare.c eina_value.c \
382 eina_xattr.c $(am__append_1) $(am__append_2) $(am__append_3) \
383 $(am__append_4) $(am__append_5) $(am__append_6) \
384 $(am__append_7) $(am__append_8) $(am__append_9)
385EXTRA_DIST = \
386eina_share_common.h \
387eina_private.h \
388eina_strbuf_common.h \
389eina_strbuf_template_c.x \
390eina_binbuf_template_c.x
391
392lib_LTLIBRARIES = libeina.la
393@EINA_AMALGAMATION_TRUE@nodist_libeina_la_SOURCES = eina_amalgamation.c
394@EINA_AMALGAMATION_FALSE@libeina_la_SOURCES = $(base_sources)
395libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@
396libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@
397libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
398all: all-am
399
400.SUFFIXES:
401.SUFFIXES: .c .lo .o .obj
402$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
403 @for dep in $?; do \
404 case '$(am__configure_deps)' in \
405 *$$dep*) \
406 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
407 && { if test -f $@; then exit 0; else break; fi; }; \
408 exit 1;; \
409 esac; \
410 done; \
411 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/Makefile'; \
412 $(am__cd) $(top_srcdir) && \
413 $(AUTOMAKE) --gnu src/lib/Makefile
414.PRECIOUS: Makefile
415Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
416 @case '$?' in \
417 *config.status*) \
418 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
419 *) \
420 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
421 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
422 esac;
423
424$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
425 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
426
427$(top_srcdir)/configure: $(am__configure_deps)
428 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
429$(ACLOCAL_M4): $(am__aclocal_m4_deps)
430 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
431$(am__aclocal_m4_deps):
432install-libLTLIBRARIES: $(lib_LTLIBRARIES)
433 @$(NORMAL_INSTALL)
434 test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
435 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
436 list2=; for p in $$list; do \
437 if test -f $$p; then \
438 list2="$$list2 $$p"; \
439 else :; fi; \
440 done; \
441 test -z "$$list2" || { \
442 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
443 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
444 }
445
446uninstall-libLTLIBRARIES:
447 @$(NORMAL_UNINSTALL)
448 @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
449 for p in $$list; do \
450 $(am__strip_dir) \
451 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
452 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
453 done
454
455clean-libLTLIBRARIES:
456 -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
457 @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
458 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
459 test "$$dir" != "$$p" || dir=.; \
460 echo "rm -f \"$${dir}/so_locations\""; \
461 rm -f "$${dir}/so_locations"; \
462 done
463libeina.la: $(libeina_la_OBJECTS) $(libeina_la_DEPENDENCIES)
464 $(AM_V_CCLD)$(libeina_la_LINK) -rpath $(libdir) $(libeina_la_OBJECTS) $(libeina_la_LIBADD) $(LIBS)
465
466mostlyclean-compile:
467 -rm -f *.$(OBJEXT)
468
469distclean-compile:
470 -rm -f *.tab.c
471
472@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_accessor.Plo@am__quote@
473@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_amalgamation.Plo@am__quote@
474@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_array.Plo@am__quote@
475@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_benchmark.Plo@am__quote@
476@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_binbuf.Plo@am__quote@
477@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_binshare.Plo@am__quote@
478@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_buddy.Plo@am__quote@
479@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_chained_mempool.Plo@am__quote@
480@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_convert.Plo@am__quote@
481@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_counter.Plo@am__quote@
482@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_cpu.Plo@am__quote@
483@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ememoa_fixed.Plo@am__quote@
484@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ememoa_unknown.Plo@am__quote@
485@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_error.Plo@am__quote@
486@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_file.Plo@am__quote@
487@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_file_win32.Plo@am__quote@
488@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_fixed_bitmap.Plo@am__quote@
489@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_fp.Plo@am__quote@
490@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_hamster.Plo@am__quote@
491@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_hash.Plo@am__quote@
492@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_inlist.Plo@am__quote@
493@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_iterator.Plo@am__quote@
494@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_lalloc.Plo@am__quote@
495@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_list.Plo@am__quote@
496@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_log.Plo@am__quote@
497@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_magic.Plo@am__quote@
498@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_main.Plo@am__quote@
499@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_matrixsparse.Plo@am__quote@
500@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mempool.Plo@am__quote@
501@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_mmap.Plo@am__quote@
502@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_module.Plo@am__quote@
503@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_one_big.Plo@am__quote@
504@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_pass_through.Plo@am__quote@
505@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_prefix.Plo@am__quote@
506@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_quadtree.Plo@am__quote@
507@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_rbtree.Plo@am__quote@
508@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_rectangle.Plo@am__quote@
509@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_safety_checks.Plo@am__quote@
510@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_sched.Plo@am__quote@
511@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_share_common.Plo@am__quote@
512@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_simple_xml_parser.Plo@am__quote@
513@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_str.Plo@am__quote@
514@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_strbuf.Plo@am__quote@
515@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_strbuf_common.Plo@am__quote@
516@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_stringshare.Plo@am__quote@
517@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_tiler.Plo@am__quote@
518@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_unicode.Plo@am__quote@
519@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ustrbuf.Plo@am__quote@
520@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_ustringshare.Plo@am__quote@
521@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_value.Plo@am__quote@
522@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libeina_la-eina_xattr.Plo@am__quote@
523
524.c.o:
525@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
526@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
527@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
528@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
529@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
530@am__fastdepCC_FALSE@ $(COMPILE) -c $<
531
532.c.obj:
533@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
534@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
535@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
536@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
537@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
538@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
539
540.c.lo:
541@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
542@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
543@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
544@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
545@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
546@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
547
548libeina_la-eina_accessor.lo: eina_accessor.c
549@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_accessor.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_accessor.Tpo -c -o libeina_la-eina_accessor.lo `test -f 'eina_accessor.c' || echo '$(srcdir)/'`eina_accessor.c
550@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_accessor.Tpo $(DEPDIR)/libeina_la-eina_accessor.Plo
551@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
552@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_accessor.c' object='libeina_la-eina_accessor.lo' libtool=yes @AMDEPBACKSLASH@
553@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
554@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_accessor.lo `test -f 'eina_accessor.c' || echo '$(srcdir)/'`eina_accessor.c
555
556libeina_la-eina_array.lo: eina_array.c
557@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_array.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_array.Tpo -c -o libeina_la-eina_array.lo `test -f 'eina_array.c' || echo '$(srcdir)/'`eina_array.c
558@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_array.Tpo $(DEPDIR)/libeina_la-eina_array.Plo
559@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
560@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_array.c' object='libeina_la-eina_array.lo' libtool=yes @AMDEPBACKSLASH@
561@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
562@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_array.lo `test -f 'eina_array.c' || echo '$(srcdir)/'`eina_array.c
563
564libeina_la-eina_benchmark.lo: eina_benchmark.c
565@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_benchmark.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_benchmark.Tpo -c -o libeina_la-eina_benchmark.lo `test -f 'eina_benchmark.c' || echo '$(srcdir)/'`eina_benchmark.c
566@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_benchmark.Tpo $(DEPDIR)/libeina_la-eina_benchmark.Plo
567@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
568@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_benchmark.c' object='libeina_la-eina_benchmark.lo' libtool=yes @AMDEPBACKSLASH@
569@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
570@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_benchmark.lo `test -f 'eina_benchmark.c' || echo '$(srcdir)/'`eina_benchmark.c
571
572libeina_la-eina_binbuf.lo: eina_binbuf.c
573@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_binbuf.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_binbuf.Tpo -c -o libeina_la-eina_binbuf.lo `test -f 'eina_binbuf.c' || echo '$(srcdir)/'`eina_binbuf.c
574@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_binbuf.Tpo $(DEPDIR)/libeina_la-eina_binbuf.Plo
575@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
576@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_binbuf.c' object='libeina_la-eina_binbuf.lo' libtool=yes @AMDEPBACKSLASH@
577@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
578@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_binbuf.lo `test -f 'eina_binbuf.c' || echo '$(srcdir)/'`eina_binbuf.c
579
580libeina_la-eina_binshare.lo: eina_binshare.c
581@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_binshare.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_binshare.Tpo -c -o libeina_la-eina_binshare.lo `test -f 'eina_binshare.c' || echo '$(srcdir)/'`eina_binshare.c
582@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_binshare.Tpo $(DEPDIR)/libeina_la-eina_binshare.Plo
583@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
584@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_binshare.c' object='libeina_la-eina_binshare.lo' libtool=yes @AMDEPBACKSLASH@
585@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
586@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_binshare.lo `test -f 'eina_binshare.c' || echo '$(srcdir)/'`eina_binshare.c
587
588libeina_la-eina_convert.lo: eina_convert.c
589@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_convert.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_convert.Tpo -c -o libeina_la-eina_convert.lo `test -f 'eina_convert.c' || echo '$(srcdir)/'`eina_convert.c
590@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_convert.Tpo $(DEPDIR)/libeina_la-eina_convert.Plo
591@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
592@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_convert.c' object='libeina_la-eina_convert.lo' libtool=yes @AMDEPBACKSLASH@
593@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
594@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_convert.lo `test -f 'eina_convert.c' || echo '$(srcdir)/'`eina_convert.c
595
596libeina_la-eina_counter.lo: eina_counter.c
597@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_counter.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_counter.Tpo -c -o libeina_la-eina_counter.lo `test -f 'eina_counter.c' || echo '$(srcdir)/'`eina_counter.c
598@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_counter.Tpo $(DEPDIR)/libeina_la-eina_counter.Plo
599@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
600@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_counter.c' object='libeina_la-eina_counter.lo' libtool=yes @AMDEPBACKSLASH@
601@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
602@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_counter.lo `test -f 'eina_counter.c' || echo '$(srcdir)/'`eina_counter.c
603
604libeina_la-eina_cpu.lo: eina_cpu.c
605@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_cpu.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_cpu.Tpo -c -o libeina_la-eina_cpu.lo `test -f 'eina_cpu.c' || echo '$(srcdir)/'`eina_cpu.c
606@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_cpu.Tpo $(DEPDIR)/libeina_la-eina_cpu.Plo
607@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
608@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_cpu.c' object='libeina_la-eina_cpu.lo' libtool=yes @AMDEPBACKSLASH@
609@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
610@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_cpu.lo `test -f 'eina_cpu.c' || echo '$(srcdir)/'`eina_cpu.c
611
612libeina_la-eina_error.lo: eina_error.c
613@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_error.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_error.Tpo -c -o libeina_la-eina_error.lo `test -f 'eina_error.c' || echo '$(srcdir)/'`eina_error.c
614@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_error.Tpo $(DEPDIR)/libeina_la-eina_error.Plo
615@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
616@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_error.c' object='libeina_la-eina_error.lo' libtool=yes @AMDEPBACKSLASH@
617@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
618@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_error.lo `test -f 'eina_error.c' || echo '$(srcdir)/'`eina_error.c
619
620libeina_la-eina_fp.lo: eina_fp.c
621@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_fp.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_fp.Tpo -c -o libeina_la-eina_fp.lo `test -f 'eina_fp.c' || echo '$(srcdir)/'`eina_fp.c
622@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_fp.Tpo $(DEPDIR)/libeina_la-eina_fp.Plo
623@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
624@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_fp.c' object='libeina_la-eina_fp.lo' libtool=yes @AMDEPBACKSLASH@
625@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
626@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_fp.lo `test -f 'eina_fp.c' || echo '$(srcdir)/'`eina_fp.c
627
628libeina_la-eina_hamster.lo: eina_hamster.c
629@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_hamster.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_hamster.Tpo -c -o libeina_la-eina_hamster.lo `test -f 'eina_hamster.c' || echo '$(srcdir)/'`eina_hamster.c
630@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_hamster.Tpo $(DEPDIR)/libeina_la-eina_hamster.Plo
631@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
632@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_hamster.c' object='libeina_la-eina_hamster.lo' libtool=yes @AMDEPBACKSLASH@
633@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
634@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_hamster.lo `test -f 'eina_hamster.c' || echo '$(srcdir)/'`eina_hamster.c
635
636libeina_la-eina_hash.lo: eina_hash.c
637@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_hash.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_hash.Tpo -c -o libeina_la-eina_hash.lo `test -f 'eina_hash.c' || echo '$(srcdir)/'`eina_hash.c
638@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_hash.Tpo $(DEPDIR)/libeina_la-eina_hash.Plo
639@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
640@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_hash.c' object='libeina_la-eina_hash.lo' libtool=yes @AMDEPBACKSLASH@
641@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
642@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_hash.lo `test -f 'eina_hash.c' || echo '$(srcdir)/'`eina_hash.c
643
644libeina_la-eina_inlist.lo: eina_inlist.c
645@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_inlist.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_inlist.Tpo -c -o libeina_la-eina_inlist.lo `test -f 'eina_inlist.c' || echo '$(srcdir)/'`eina_inlist.c
646@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_inlist.Tpo $(DEPDIR)/libeina_la-eina_inlist.Plo
647@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
648@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_inlist.c' object='libeina_la-eina_inlist.lo' libtool=yes @AMDEPBACKSLASH@
649@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
650@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_inlist.lo `test -f 'eina_inlist.c' || echo '$(srcdir)/'`eina_inlist.c
651
652libeina_la-eina_iterator.lo: eina_iterator.c
653@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_iterator.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_iterator.Tpo -c -o libeina_la-eina_iterator.lo `test -f 'eina_iterator.c' || echo '$(srcdir)/'`eina_iterator.c
654@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_iterator.Tpo $(DEPDIR)/libeina_la-eina_iterator.Plo
655@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
656@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_iterator.c' object='libeina_la-eina_iterator.lo' libtool=yes @AMDEPBACKSLASH@
657@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
658@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_iterator.lo `test -f 'eina_iterator.c' || echo '$(srcdir)/'`eina_iterator.c
659
660libeina_la-eina_lalloc.lo: eina_lalloc.c
661@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_lalloc.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_lalloc.Tpo -c -o libeina_la-eina_lalloc.lo `test -f 'eina_lalloc.c' || echo '$(srcdir)/'`eina_lalloc.c
662@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_lalloc.Tpo $(DEPDIR)/libeina_la-eina_lalloc.Plo
663@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
664@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_lalloc.c' object='libeina_la-eina_lalloc.lo' libtool=yes @AMDEPBACKSLASH@
665@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
666@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_lalloc.lo `test -f 'eina_lalloc.c' || echo '$(srcdir)/'`eina_lalloc.c
667
668libeina_la-eina_list.lo: eina_list.c
669@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_list.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_list.Tpo -c -o libeina_la-eina_list.lo `test -f 'eina_list.c' || echo '$(srcdir)/'`eina_list.c
670@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_list.Tpo $(DEPDIR)/libeina_la-eina_list.Plo
671@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
672@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_list.c' object='libeina_la-eina_list.lo' libtool=yes @AMDEPBACKSLASH@
673@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
674@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_list.lo `test -f 'eina_list.c' || echo '$(srcdir)/'`eina_list.c
675
676libeina_la-eina_log.lo: eina_log.c
677@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_log.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_log.Tpo -c -o libeina_la-eina_log.lo `test -f 'eina_log.c' || echo '$(srcdir)/'`eina_log.c
678@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_log.Tpo $(DEPDIR)/libeina_la-eina_log.Plo
679@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
680@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_log.c' object='libeina_la-eina_log.lo' libtool=yes @AMDEPBACKSLASH@
681@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
682@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_log.lo `test -f 'eina_log.c' || echo '$(srcdir)/'`eina_log.c
683
684libeina_la-eina_magic.lo: eina_magic.c
685@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_magic.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_magic.Tpo -c -o libeina_la-eina_magic.lo `test -f 'eina_magic.c' || echo '$(srcdir)/'`eina_magic.c
686@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_magic.Tpo $(DEPDIR)/libeina_la-eina_magic.Plo
687@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
688@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_magic.c' object='libeina_la-eina_magic.lo' libtool=yes @AMDEPBACKSLASH@
689@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
690@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_magic.lo `test -f 'eina_magic.c' || echo '$(srcdir)/'`eina_magic.c
691
692libeina_la-eina_main.lo: eina_main.c
693@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_main.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_main.Tpo -c -o libeina_la-eina_main.lo `test -f 'eina_main.c' || echo '$(srcdir)/'`eina_main.c
694@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_main.Tpo $(DEPDIR)/libeina_la-eina_main.Plo
695@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
696@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_main.c' object='libeina_la-eina_main.lo' libtool=yes @AMDEPBACKSLASH@
697@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
698@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_main.lo `test -f 'eina_main.c' || echo '$(srcdir)/'`eina_main.c
699
700libeina_la-eina_matrixsparse.lo: eina_matrixsparse.c
701@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_matrixsparse.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_matrixsparse.Tpo -c -o libeina_la-eina_matrixsparse.lo `test -f 'eina_matrixsparse.c' || echo '$(srcdir)/'`eina_matrixsparse.c
702@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_matrixsparse.Tpo $(DEPDIR)/libeina_la-eina_matrixsparse.Plo
703@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
704@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_matrixsparse.c' object='libeina_la-eina_matrixsparse.lo' libtool=yes @AMDEPBACKSLASH@
705@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
706@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_matrixsparse.lo `test -f 'eina_matrixsparse.c' || echo '$(srcdir)/'`eina_matrixsparse.c
707
708libeina_la-eina_mempool.lo: eina_mempool.c
709@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_mempool.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_mempool.Tpo -c -o libeina_la-eina_mempool.lo `test -f 'eina_mempool.c' || echo '$(srcdir)/'`eina_mempool.c
710@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_mempool.Tpo $(DEPDIR)/libeina_la-eina_mempool.Plo
711@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
712@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_mempool.c' object='libeina_la-eina_mempool.lo' libtool=yes @AMDEPBACKSLASH@
713@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
714@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_mempool.lo `test -f 'eina_mempool.c' || echo '$(srcdir)/'`eina_mempool.c
715
716libeina_la-eina_mmap.lo: eina_mmap.c
717@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_mmap.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_mmap.Tpo -c -o libeina_la-eina_mmap.lo `test -f 'eina_mmap.c' || echo '$(srcdir)/'`eina_mmap.c
718@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_mmap.Tpo $(DEPDIR)/libeina_la-eina_mmap.Plo
719@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
720@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_mmap.c' object='libeina_la-eina_mmap.lo' libtool=yes @AMDEPBACKSLASH@
721@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
722@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_mmap.lo `test -f 'eina_mmap.c' || echo '$(srcdir)/'`eina_mmap.c
723
724libeina_la-eina_module.lo: eina_module.c
725@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_module.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_module.Tpo -c -o libeina_la-eina_module.lo `test -f 'eina_module.c' || echo '$(srcdir)/'`eina_module.c
726@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_module.Tpo $(DEPDIR)/libeina_la-eina_module.Plo
727@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
728@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_module.c' object='libeina_la-eina_module.lo' libtool=yes @AMDEPBACKSLASH@
729@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
730@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_module.lo `test -f 'eina_module.c' || echo '$(srcdir)/'`eina_module.c
731
732libeina_la-eina_prefix.lo: eina_prefix.c
733@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_prefix.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_prefix.Tpo -c -o libeina_la-eina_prefix.lo `test -f 'eina_prefix.c' || echo '$(srcdir)/'`eina_prefix.c
734@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_prefix.Tpo $(DEPDIR)/libeina_la-eina_prefix.Plo
735@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
736@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_prefix.c' object='libeina_la-eina_prefix.lo' libtool=yes @AMDEPBACKSLASH@
737@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
738@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_prefix.lo `test -f 'eina_prefix.c' || echo '$(srcdir)/'`eina_prefix.c
739
740libeina_la-eina_quadtree.lo: eina_quadtree.c
741@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_quadtree.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_quadtree.Tpo -c -o libeina_la-eina_quadtree.lo `test -f 'eina_quadtree.c' || echo '$(srcdir)/'`eina_quadtree.c
742@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_quadtree.Tpo $(DEPDIR)/libeina_la-eina_quadtree.Plo
743@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
744@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_quadtree.c' object='libeina_la-eina_quadtree.lo' libtool=yes @AMDEPBACKSLASH@
745@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
746@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_quadtree.lo `test -f 'eina_quadtree.c' || echo '$(srcdir)/'`eina_quadtree.c
747
748libeina_la-eina_rbtree.lo: eina_rbtree.c
749@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_rbtree.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_rbtree.Tpo -c -o libeina_la-eina_rbtree.lo `test -f 'eina_rbtree.c' || echo '$(srcdir)/'`eina_rbtree.c
750@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_rbtree.Tpo $(DEPDIR)/libeina_la-eina_rbtree.Plo
751@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
752@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_rbtree.c' object='libeina_la-eina_rbtree.lo' libtool=yes @AMDEPBACKSLASH@
753@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
754@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_rbtree.lo `test -f 'eina_rbtree.c' || echo '$(srcdir)/'`eina_rbtree.c
755
756libeina_la-eina_rectangle.lo: eina_rectangle.c
757@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_rectangle.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_rectangle.Tpo -c -o libeina_la-eina_rectangle.lo `test -f 'eina_rectangle.c' || echo '$(srcdir)/'`eina_rectangle.c
758@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_rectangle.Tpo $(DEPDIR)/libeina_la-eina_rectangle.Plo
759@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
760@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_rectangle.c' object='libeina_la-eina_rectangle.lo' libtool=yes @AMDEPBACKSLASH@
761@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
762@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_rectangle.lo `test -f 'eina_rectangle.c' || echo '$(srcdir)/'`eina_rectangle.c
763
764libeina_la-eina_safety_checks.lo: eina_safety_checks.c
765@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_safety_checks.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_safety_checks.Tpo -c -o libeina_la-eina_safety_checks.lo `test -f 'eina_safety_checks.c' || echo '$(srcdir)/'`eina_safety_checks.c
766@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_safety_checks.Tpo $(DEPDIR)/libeina_la-eina_safety_checks.Plo
767@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
768@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_safety_checks.c' object='libeina_la-eina_safety_checks.lo' libtool=yes @AMDEPBACKSLASH@
769@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
770@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_safety_checks.lo `test -f 'eina_safety_checks.c' || echo '$(srcdir)/'`eina_safety_checks.c
771
772libeina_la-eina_sched.lo: eina_sched.c
773@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_sched.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_sched.Tpo -c -o libeina_la-eina_sched.lo `test -f 'eina_sched.c' || echo '$(srcdir)/'`eina_sched.c
774@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_sched.Tpo $(DEPDIR)/libeina_la-eina_sched.Plo
775@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
776@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_sched.c' object='libeina_la-eina_sched.lo' libtool=yes @AMDEPBACKSLASH@
777@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
778@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_sched.lo `test -f 'eina_sched.c' || echo '$(srcdir)/'`eina_sched.c
779
780libeina_la-eina_share_common.lo: eina_share_common.c
781@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_share_common.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_share_common.Tpo -c -o libeina_la-eina_share_common.lo `test -f 'eina_share_common.c' || echo '$(srcdir)/'`eina_share_common.c
782@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_share_common.Tpo $(DEPDIR)/libeina_la-eina_share_common.Plo
783@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
784@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_share_common.c' object='libeina_la-eina_share_common.lo' libtool=yes @AMDEPBACKSLASH@
785@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
786@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_share_common.lo `test -f 'eina_share_common.c' || echo '$(srcdir)/'`eina_share_common.c
787
788libeina_la-eina_simple_xml_parser.lo: eina_simple_xml_parser.c
789@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_simple_xml_parser.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_simple_xml_parser.Tpo -c -o libeina_la-eina_simple_xml_parser.lo `test -f 'eina_simple_xml_parser.c' || echo '$(srcdir)/'`eina_simple_xml_parser.c
790@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_simple_xml_parser.Tpo $(DEPDIR)/libeina_la-eina_simple_xml_parser.Plo
791@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
792@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_simple_xml_parser.c' object='libeina_la-eina_simple_xml_parser.lo' libtool=yes @AMDEPBACKSLASH@
793@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
794@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_simple_xml_parser.lo `test -f 'eina_simple_xml_parser.c' || echo '$(srcdir)/'`eina_simple_xml_parser.c
795
796libeina_la-eina_str.lo: eina_str.c
797@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_str.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_str.Tpo -c -o libeina_la-eina_str.lo `test -f 'eina_str.c' || echo '$(srcdir)/'`eina_str.c
798@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_str.Tpo $(DEPDIR)/libeina_la-eina_str.Plo
799@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
800@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_str.c' object='libeina_la-eina_str.lo' libtool=yes @AMDEPBACKSLASH@
801@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
802@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_str.lo `test -f 'eina_str.c' || echo '$(srcdir)/'`eina_str.c
803
804libeina_la-eina_strbuf.lo: eina_strbuf.c
805@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_strbuf.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_strbuf.Tpo -c -o libeina_la-eina_strbuf.lo `test -f 'eina_strbuf.c' || echo '$(srcdir)/'`eina_strbuf.c
806@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_strbuf.Tpo $(DEPDIR)/libeina_la-eina_strbuf.Plo
807@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
808@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_strbuf.c' object='libeina_la-eina_strbuf.lo' libtool=yes @AMDEPBACKSLASH@
809@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
810@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_strbuf.lo `test -f 'eina_strbuf.c' || echo '$(srcdir)/'`eina_strbuf.c
811
812libeina_la-eina_strbuf_common.lo: eina_strbuf_common.c
813@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_strbuf_common.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_strbuf_common.Tpo -c -o libeina_la-eina_strbuf_common.lo `test -f 'eina_strbuf_common.c' || echo '$(srcdir)/'`eina_strbuf_common.c
814@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_strbuf_common.Tpo $(DEPDIR)/libeina_la-eina_strbuf_common.Plo
815@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
816@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_strbuf_common.c' object='libeina_la-eina_strbuf_common.lo' libtool=yes @AMDEPBACKSLASH@
817@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
818@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_strbuf_common.lo `test -f 'eina_strbuf_common.c' || echo '$(srcdir)/'`eina_strbuf_common.c
819
820libeina_la-eina_stringshare.lo: eina_stringshare.c
821@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_stringshare.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_stringshare.Tpo -c -o libeina_la-eina_stringshare.lo `test -f 'eina_stringshare.c' || echo '$(srcdir)/'`eina_stringshare.c
822@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_stringshare.Tpo $(DEPDIR)/libeina_la-eina_stringshare.Plo
823@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
824@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_stringshare.c' object='libeina_la-eina_stringshare.lo' libtool=yes @AMDEPBACKSLASH@
825@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
826@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_stringshare.lo `test -f 'eina_stringshare.c' || echo '$(srcdir)/'`eina_stringshare.c
827
828libeina_la-eina_tiler.lo: eina_tiler.c
829@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_tiler.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_tiler.Tpo -c -o libeina_la-eina_tiler.lo `test -f 'eina_tiler.c' || echo '$(srcdir)/'`eina_tiler.c
830@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_tiler.Tpo $(DEPDIR)/libeina_la-eina_tiler.Plo
831@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
832@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_tiler.c' object='libeina_la-eina_tiler.lo' libtool=yes @AMDEPBACKSLASH@
833@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
834@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_tiler.lo `test -f 'eina_tiler.c' || echo '$(srcdir)/'`eina_tiler.c
835
836libeina_la-eina_unicode.lo: eina_unicode.c
837@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_unicode.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_unicode.Tpo -c -o libeina_la-eina_unicode.lo `test -f 'eina_unicode.c' || echo '$(srcdir)/'`eina_unicode.c
838@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_unicode.Tpo $(DEPDIR)/libeina_la-eina_unicode.Plo
839@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
840@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_unicode.c' object='libeina_la-eina_unicode.lo' libtool=yes @AMDEPBACKSLASH@
841@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
842@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_unicode.lo `test -f 'eina_unicode.c' || echo '$(srcdir)/'`eina_unicode.c
843
844libeina_la-eina_ustrbuf.lo: eina_ustrbuf.c
845@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_ustrbuf.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_ustrbuf.Tpo -c -o libeina_la-eina_ustrbuf.lo `test -f 'eina_ustrbuf.c' || echo '$(srcdir)/'`eina_ustrbuf.c
846@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ustrbuf.Tpo $(DEPDIR)/libeina_la-eina_ustrbuf.Plo
847@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
848@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ustrbuf.c' object='libeina_la-eina_ustrbuf.lo' libtool=yes @AMDEPBACKSLASH@
849@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
850@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_ustrbuf.lo `test -f 'eina_ustrbuf.c' || echo '$(srcdir)/'`eina_ustrbuf.c
851
852libeina_la-eina_ustringshare.lo: eina_ustringshare.c
853@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_ustringshare.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_ustringshare.Tpo -c -o libeina_la-eina_ustringshare.lo `test -f 'eina_ustringshare.c' || echo '$(srcdir)/'`eina_ustringshare.c
854@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ustringshare.Tpo $(DEPDIR)/libeina_la-eina_ustringshare.Plo
855@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
856@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ustringshare.c' object='libeina_la-eina_ustringshare.lo' libtool=yes @AMDEPBACKSLASH@
857@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
858@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_ustringshare.lo `test -f 'eina_ustringshare.c' || echo '$(srcdir)/'`eina_ustringshare.c
859
860libeina_la-eina_value.lo: eina_value.c
861@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_value.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_value.Tpo -c -o libeina_la-eina_value.lo `test -f 'eina_value.c' || echo '$(srcdir)/'`eina_value.c
862@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_value.Tpo $(DEPDIR)/libeina_la-eina_value.Plo
863@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
864@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_value.c' object='libeina_la-eina_value.lo' libtool=yes @AMDEPBACKSLASH@
865@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
866@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_value.lo `test -f 'eina_value.c' || echo '$(srcdir)/'`eina_value.c
867
868libeina_la-eina_xattr.lo: eina_xattr.c
869@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_xattr.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_xattr.Tpo -c -o libeina_la-eina_xattr.lo `test -f 'eina_xattr.c' || echo '$(srcdir)/'`eina_xattr.c
870@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_xattr.Tpo $(DEPDIR)/libeina_la-eina_xattr.Plo
871@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
872@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_xattr.c' object='libeina_la-eina_xattr.lo' libtool=yes @AMDEPBACKSLASH@
873@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
874@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_xattr.lo `test -f 'eina_xattr.c' || echo '$(srcdir)/'`eina_xattr.c
875
876libeina_la-eina_file_win32.lo: eina_file_win32.c
877@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_file_win32.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_file_win32.Tpo -c -o libeina_la-eina_file_win32.lo `test -f 'eina_file_win32.c' || echo '$(srcdir)/'`eina_file_win32.c
878@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_file_win32.Tpo $(DEPDIR)/libeina_la-eina_file_win32.Plo
879@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
880@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_file_win32.c' object='libeina_la-eina_file_win32.lo' libtool=yes @AMDEPBACKSLASH@
881@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
882@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_file_win32.lo `test -f 'eina_file_win32.c' || echo '$(srcdir)/'`eina_file_win32.c
883
884libeina_la-eina_file.lo: eina_file.c
885@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_file.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_file.Tpo -c -o libeina_la-eina_file.lo `test -f 'eina_file.c' || echo '$(srcdir)/'`eina_file.c
886@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_file.Tpo $(DEPDIR)/libeina_la-eina_file.Plo
887@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
888@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_file.c' object='libeina_la-eina_file.lo' libtool=yes @AMDEPBACKSLASH@
889@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
890@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_file.lo `test -f 'eina_file.c' || echo '$(srcdir)/'`eina_file.c
891
892libeina_la-eina_buddy.lo: $(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
893@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_buddy.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_buddy.Tpo -c -o libeina_la-eina_buddy.lo `test -f '$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
894@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_buddy.Tpo $(DEPDIR)/libeina_la-eina_buddy.Plo
895@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
896@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c' object='libeina_la-eina_buddy.lo' libtool=yes @AMDEPBACKSLASH@
897@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
898@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_buddy.lo `test -f '$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/buddy/eina_buddy.c
899
900libeina_la-eina_chained_mempool.lo: $(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
901@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_chained_mempool.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_chained_mempool.Tpo -c -o libeina_la-eina_chained_mempool.lo `test -f '$(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
902@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_chained_mempool.Tpo $(DEPDIR)/libeina_la-eina_chained_mempool.Plo
903@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
904@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c' object='libeina_la-eina_chained_mempool.lo' libtool=yes @AMDEPBACKSLASH@
905@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
906@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_chained_mempool.lo `test -f '$(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/chained_pool/eina_chained_mempool.c
907
908libeina_la-eina_ememoa_fixed.lo: $(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
909@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_ememoa_fixed.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_ememoa_fixed.Tpo -c -o libeina_la-eina_ememoa_fixed.lo `test -f '$(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
910@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ememoa_fixed.Tpo $(DEPDIR)/libeina_la-eina_ememoa_fixed.Plo
911@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
912@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c' object='libeina_la-eina_ememoa_fixed.lo' libtool=yes @AMDEPBACKSLASH@
913@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
914@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_ememoa_fixed.lo `test -f '$(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
915
916libeina_la-eina_ememoa_unknown.lo: $(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
917@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_ememoa_unknown.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_ememoa_unknown.Tpo -c -o libeina_la-eina_ememoa_unknown.lo `test -f '$(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
918@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_ememoa_unknown.Tpo $(DEPDIR)/libeina_la-eina_ememoa_unknown.Plo
919@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
920@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c' object='libeina_la-eina_ememoa_unknown.lo' libtool=yes @AMDEPBACKSLASH@
921@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
922@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_ememoa_unknown.lo `test -f '$(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
923
924libeina_la-eina_fixed_bitmap.lo: $(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
925@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_fixed_bitmap.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_fixed_bitmap.Tpo -c -o libeina_la-eina_fixed_bitmap.lo `test -f '$(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
926@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_fixed_bitmap.Tpo $(DEPDIR)/libeina_la-eina_fixed_bitmap.Plo
927@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
928@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c' object='libeina_la-eina_fixed_bitmap.lo' libtool=yes @AMDEPBACKSLASH@
929@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
930@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_fixed_bitmap.lo `test -f '$(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
931
932libeina_la-eina_one_big.lo: $(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
933@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_one_big.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_one_big.Tpo -c -o libeina_la-eina_one_big.lo `test -f '$(top_srcdir)/src/modules/mp/one_big/eina_one_big.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
934@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_one_big.Tpo $(DEPDIR)/libeina_la-eina_one_big.Plo
935@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
936@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/one_big/eina_one_big.c' object='libeina_la-eina_one_big.lo' libtool=yes @AMDEPBACKSLASH@
937@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
938@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_one_big.lo `test -f '$(top_srcdir)/src/modules/mp/one_big/eina_one_big.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/one_big/eina_one_big.c
939
940libeina_la-eina_pass_through.lo: $(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
941@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_pass_through.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_pass_through.Tpo -c -o libeina_la-eina_pass_through.lo `test -f '$(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
942@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_pass_through.Tpo $(DEPDIR)/libeina_la-eina_pass_through.Plo
943@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
944@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c' object='libeina_la-eina_pass_through.lo' libtool=yes @AMDEPBACKSLASH@
945@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
946@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_pass_through.lo `test -f '$(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c' || echo '$(srcdir)/'`$(top_srcdir)/src/modules/mp/pass_through/eina_pass_through.c
947
948libeina_la-eina_amalgamation.lo: eina_amalgamation.c
949@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -MT libeina_la-eina_amalgamation.lo -MD -MP -MF $(DEPDIR)/libeina_la-eina_amalgamation.Tpo -c -o libeina_la-eina_amalgamation.lo `test -f 'eina_amalgamation.c' || echo '$(srcdir)/'`eina_amalgamation.c
950@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libeina_la-eina_amalgamation.Tpo $(DEPDIR)/libeina_la-eina_amalgamation.Plo
951@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
952@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_amalgamation.c' object='libeina_la-eina_amalgamation.lo' libtool=yes @AMDEPBACKSLASH@
953@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
954@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libeina_la_CFLAGS) $(CFLAGS) -c -o libeina_la-eina_amalgamation.lo `test -f 'eina_amalgamation.c' || echo '$(srcdir)/'`eina_amalgamation.c
955
956mostlyclean-libtool:
957 -rm -f *.lo
958
959clean-libtool:
960 -rm -rf .libs _libs
961
962ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
963 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
964 unique=`for i in $$list; do \
965 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
966 done | \
967 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
968 END { if (nonempty) { for (i in files) print i; }; }'`; \
969 mkid -fID $$unique
970tags: TAGS
971
972TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
973 $(TAGS_FILES) $(LISP)
974 set x; \
975 here=`pwd`; \
976 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
977 unique=`for i in $$list; do \
978 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
979 done | \
980 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
981 END { if (nonempty) { for (i in files) print i; }; }'`; \
982 shift; \
983 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
984 test -n "$$unique" || unique=$$empty_fix; \
985 if test $$# -gt 0; then \
986 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
987 "$$@" $$unique; \
988 else \
989 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
990 $$unique; \
991 fi; \
992 fi
993ctags: CTAGS
994CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
995 $(TAGS_FILES) $(LISP)
996 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
997 unique=`for i in $$list; do \
998 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
999 done | \
1000 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
1001 END { if (nonempty) { for (i in files) print i; }; }'`; \
1002 test -z "$(CTAGS_ARGS)$$unique" \
1003 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
1004 $$unique
1005
1006GTAGS:
1007 here=`$(am__cd) $(top_builddir) && pwd` \
1008 && $(am__cd) $(top_srcdir) \
1009 && gtags -i $(GTAGS_ARGS) "$$here"
1010
1011distclean-tags:
1012 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
1013
1014distdir: $(DISTFILES)
1015 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
1016 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
1017 list='$(DISTFILES)'; \
1018 dist_files=`for file in $$list; do echo $$file; done | \
1019 sed -e "s|^$$srcdirstrip/||;t" \
1020 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
1021 case $$dist_files in \
1022 */*) $(MKDIR_P) `echo "$$dist_files" | \
1023 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
1024 sort -u` ;; \
1025 esac; \
1026 for file in $$dist_files; do \
1027 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
1028 if test -d $$d/$$file; then \
1029 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
1030 if test -d "$(distdir)/$$file"; then \
1031 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
1032 fi; \
1033 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
1034 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
1035 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
1036 fi; \
1037 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
1038 else \
1039 test -f "$(distdir)/$$file" \
1040 || cp -p $$d/$$file "$(distdir)/$$file" \
1041 || exit 1; \
1042 fi; \
1043 done
1044check-am: all-am
1045check: check-am
1046all-am: Makefile $(LTLIBRARIES)
1047installdirs:
1048 for dir in "$(DESTDIR)$(libdir)"; do \
1049 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
1050 done
1051install: install-am
1052install-exec: install-exec-am
1053install-data: install-data-am
1054uninstall: uninstall-am
1055
1056install-am: all-am
1057 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
1058
1059installcheck: installcheck-am
1060install-strip:
1061 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
1062 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
1063 `test -z '$(STRIP)' || \
1064 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
1065mostlyclean-generic:
1066
1067clean-generic:
1068
1069distclean-generic:
1070 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
1071 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
1072
1073maintainer-clean-generic:
1074 @echo "This command is intended for maintainers to use"
1075 @echo "it deletes files that may require special tools to rebuild."
1076 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
1077clean: clean-am
1078
1079clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
1080 mostlyclean-am
1081
1082distclean: distclean-am
1083 -rm -rf ./$(DEPDIR)
1084 -rm -f Makefile
1085distclean-am: clean-am distclean-compile distclean-generic \
1086 distclean-tags
1087
1088dvi: dvi-am
1089
1090dvi-am:
1091
1092html: html-am
1093
1094html-am:
1095
1096info: info-am
1097
1098info-am:
1099
1100install-data-am:
1101
1102install-dvi: install-dvi-am
1103
1104install-dvi-am:
1105
1106install-exec-am: install-libLTLIBRARIES
1107
1108install-html: install-html-am
1109
1110install-html-am:
1111
1112install-info: install-info-am
1113
1114install-info-am:
1115
1116install-man:
1117
1118install-pdf: install-pdf-am
1119
1120install-pdf-am:
1121
1122install-ps: install-ps-am
1123
1124install-ps-am:
1125
1126installcheck-am:
1127
1128maintainer-clean: maintainer-clean-am
1129 -rm -rf ./$(DEPDIR)
1130 -rm -f Makefile
1131maintainer-clean-am: distclean-am maintainer-clean-generic
1132
1133mostlyclean: mostlyclean-am
1134
1135mostlyclean-am: mostlyclean-compile mostlyclean-generic \
1136 mostlyclean-libtool
1137
1138pdf: pdf-am
1139
1140pdf-am:
1141
1142ps: ps-am
1143
1144ps-am:
1145
1146uninstall-am: uninstall-libLTLIBRARIES
1147
1148.MAKE: install-am install-strip
1149
1150.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
1151 clean-libLTLIBRARIES clean-libtool clean-local ctags distclean \
1152 distclean-compile distclean-generic distclean-libtool \
1153 distclean-tags distdir dvi dvi-am html html-am info info-am \
1154 install install-am install-data install-data-am install-dvi \
1155 install-dvi-am install-exec install-exec-am install-html \
1156 install-html-am install-info install-info-am \
1157 install-libLTLIBRARIES install-man install-pdf install-pdf-am \
1158 install-ps install-ps-am install-strip installcheck \
1159 installcheck-am installdirs maintainer-clean \
1160 maintainer-clean-generic mostlyclean mostlyclean-compile \
1161 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
1162 tags uninstall uninstall-am uninstall-libLTLIBRARIES
1163
1164
1165@EINA_AMALGAMATION_TRUE@eina_amalgamation.c: $(base_sources) Makefile
1166@EINA_AMALGAMATION_TRUE@ -rm -f eina_amalgamation.c
1167
1168@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_CONFIG_H" >> eina_amalgamation.c
1169@EINA_AMALGAMATION_TRUE@ @echo "#include \"config.h\"" >> eina_amalgamation.c
1170@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1171
1172@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_ALLOCA_H" >> eina_amalgamation.c
1173@EINA_AMALGAMATION_TRUE@ @echo "# include <alloca.h>" >> eina_amalgamation.c
1174@EINA_AMALGAMATION_TRUE@ @echo "#elif defined __GNUC__" >> eina_amalgamation.c
1175@EINA_AMALGAMATION_TRUE@ @echo "# define alloca __builtin_alloca" >> eina_amalgamation.c
1176@EINA_AMALGAMATION_TRUE@ @echo "#elif defined _AIX" >> eina_amalgamation.c
1177@EINA_AMALGAMATION_TRUE@ @echo "# define alloca __alloca" >> eina_amalgamation.c
1178@EINA_AMALGAMATION_TRUE@ @echo "#elif defined _MSC_VER" >> eina_amalgamation.c
1179@EINA_AMALGAMATION_TRUE@ @echo "# include <malloc.h>" >> eina_amalgamation.c
1180@EINA_AMALGAMATION_TRUE@ @echo "# define alloca _alloca" >> eina_amalgamation.c
1181@EINA_AMALGAMATION_TRUE@ @echo "#else" >> eina_amalgamation.c
1182@EINA_AMALGAMATION_TRUE@ @echo "# include <stddef.h>" >> eina_amalgamation.c
1183@EINA_AMALGAMATION_TRUE@ @echo "# ifdef __cplusplus" >> eina_amalgamation.c
1184@EINA_AMALGAMATION_TRUE@ @echo "#extern \"C\"" >> eina_amalgamation.c
1185@EINA_AMALGAMATION_TRUE@ @echo "# endif" >> eina_amalgamation.c
1186@EINA_AMALGAMATION_TRUE@ @echo "#void *alloca (size_t);" >> eina_amalgamation.c
1187@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1188
1189@EINA_AMALGAMATION_TRUE@ @echo "#include <stdio.h>" >> eina_amalgamation.c
1190@EINA_AMALGAMATION_TRUE@ @echo "#include <stdlib.h>" >> eina_amalgamation.c
1191@EINA_AMALGAMATION_TRUE@ @echo "#include <string.h>" >> eina_amalgamation.c
1192@EINA_AMALGAMATION_TRUE@ @echo "#include <dlfcn.h>" >> eina_amalgamation.c
1193@EINA_AMALGAMATION_TRUE@ @echo "#include <sys/types.h>" >> eina_amalgamation.c
1194@EINA_AMALGAMATION_TRUE@ @echo "#include <dirent.h>" >> eina_amalgamation.c
1195@EINA_AMALGAMATION_TRUE@ @echo "#include <assert.h>" >> eina_amalgamation.c
1196@EINA_AMALGAMATION_TRUE@ @echo "#include <errno.h>" >> eina_amalgamation.c
1197@EINA_AMALGAMATION_TRUE@ @echo "#include <fnmatch.h>" >> eina_amalgamation.c
1198
1199@EINA_AMALGAMATION_TRUE@ @echo "#ifdef HAVE_EVIL" >> eina_amalgamation.c
1200@EINA_AMALGAMATION_TRUE@ @echo "# include <Evil.h>" >> eina_amalgamation.c
1201@EINA_AMALGAMATION_TRUE@ @echo "#endif" >> eina_amalgamation.c
1202
1203@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_config.h\"" >> eina_amalgamation.c
1204@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_private.h\"" >> eina_amalgamation.c
1205@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_safety_checks.h\"" >> eina_amalgamation.c
1206@EINA_AMALGAMATION_TRUE@ @echo "#include \"Eina.h\"" >> eina_amalgamation.c
1207@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_strbuf_common.h\"" >> eina_amalgamation.c
1208@EINA_AMALGAMATION_TRUE@ @echo "#include \"eina_share_common.h\"" >> eina_amalgamation.c
1209
1210@EINA_AMALGAMATION_TRUE@ @for f in $(base_sources); do \
1211@EINA_AMALGAMATION_TRUE@ if [ `echo $$f | sed -e 's/^...\(.\).*/\1/'` != '/' ]; then \
1212@EINA_AMALGAMATION_TRUE@ file="$(srcdir)/$$f" ; \
1213@EINA_AMALGAMATION_TRUE@ else \
1214@EINA_AMALGAMATION_TRUE@ file="$$f" ; \
1215@EINA_AMALGAMATION_TRUE@ fi ; \
1216@EINA_AMALGAMATION_TRUE@ echo "/* file: $$file */" >> eina_amalgamation.c; \
1217@EINA_AMALGAMATION_TRUE@ grep -v -e '^# *include \+.\(config\|eina_[a-z_]\+\|Evil\|stdio\|stdlib\|string\|dlfcn\|dirent\|assert\|errno\|fnmatch\)[.]h.*' $$file >> eina_amalgamation.c; \
1218@EINA_AMALGAMATION_TRUE@ done
1219@EINA_AMALGAMATION_TRUE@ @echo "eina_amalgamation.c generated"
1220
1221clean-local:
1222 rm -rf *.gcno eina_amalgamation.c
1223
1224# Tell versions [3.59,3.63) of GNU make to not export all variables.
1225# Otherwise a system limit (for SysV at least) may be exceeded.
1226.NOEXPORT:
diff --git a/libraries/eina/src/lib/eina_accessor.c b/libraries/eina/src/lib/eina_accessor.c
new file mode 100644
index 0000000..aec44ef
--- /dev/null
+++ b/libraries/eina/src/lib/eina_accessor.c
@@ -0,0 +1,176 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24
25#include "eina_config.h"
26#include "eina_private.h"
27
28/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
29#include "eina_safety_checks.h"
30#include "eina_accessor.h"
31
32/*============================================================================*
33* Local *
34*============================================================================*/
35
36/**
37 * @cond LOCAL
38 */
39
40static const char EINA_MAGIC_ACCESSOR_STR[] = "Eina Accessor";
41
42#define EINA_MAGIC_CHECK_ACCESSOR(d) \
43 do { \
44 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ACCESSOR)) { \
45 EINA_MAGIC_FAIL(d, EINA_MAGIC_ACCESSOR); } \
46 } while(0)
47
48/**
49 * @endcond
50 */
51
52/*============================================================================*
53* Global *
54*============================================================================*/
55
56/**
57 * @internal
58 * @brief Initialize the accessor module.
59 *
60 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
61 *
62 * This function sets up the accessor module of Eina. It is called by
63 * eina_init().
64 *
65 * @see eina_init()
66 */
67Eina_Bool
68eina_accessor_init(void)
69{
70 return eina_magic_string_set(EINA_MAGIC_ACCESSOR, EINA_MAGIC_ACCESSOR_STR);
71}
72
73/**
74 * @internal
75 * @brief Shut down the accessor module.
76 *
77 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
78 *
79 * This function shuts down the accessor module set up by
80 * eina_accessor_init(). It is called by eina_shutdown().
81 *
82 * @see eina_shutdown()
83 */
84Eina_Bool
85eina_accessor_shutdown(void)
86{
87 return EINA_TRUE;
88}
89
90/*============================================================================*
91* API *
92*============================================================================*/
93
94
95EAPI void
96eina_accessor_free(Eina_Accessor *accessor)
97{
98 EINA_MAGIC_CHECK_ACCESSOR(accessor);
99 EINA_SAFETY_ON_NULL_RETURN(accessor);
100 EINA_SAFETY_ON_NULL_RETURN(accessor->free);
101 accessor->free(accessor);
102}
103
104EAPI void *
105eina_accessor_container_get(Eina_Accessor *accessor)
106{
107 EINA_MAGIC_CHECK_ACCESSOR(accessor);
108 EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, NULL);
109 EINA_SAFETY_ON_NULL_RETURN_VAL(accessor->get_container, NULL);
110 return accessor->get_container(accessor);
111}
112
113EAPI Eina_Bool
114eina_accessor_data_get(Eina_Accessor *accessor,
115 unsigned int position,
116 void **data)
117{
118 EINA_MAGIC_CHECK_ACCESSOR(accessor);
119 EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE);
120 EINA_SAFETY_ON_NULL_RETURN_VAL(accessor->get_at, EINA_FALSE);
121 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
122 return accessor->get_at(accessor, position, data);
123}
124
125EAPI void
126eina_accessor_over(Eina_Accessor *accessor,
127 Eina_Each_Cb cb,
128 unsigned int start,
129 unsigned int end,
130 const void *fdata)
131{
132 const void *container;
133 void *data;
134 unsigned int i;
135
136 EINA_MAGIC_CHECK_ACCESSOR(accessor);
137 EINA_SAFETY_ON_NULL_RETURN(accessor);
138 EINA_SAFETY_ON_NULL_RETURN(accessor->get_container);
139 EINA_SAFETY_ON_NULL_RETURN(accessor->get_at);
140 EINA_SAFETY_ON_NULL_RETURN(cb);
141 EINA_SAFETY_ON_FALSE_RETURN(start < end);
142
143 if (!eina_accessor_lock(accessor))
144 return ;
145
146 container = accessor->get_container(accessor);
147 for (i = start; i < end && accessor->get_at(accessor, i, &data) == EINA_TRUE;
148 ++i)
149 if (cb(container, data, (void *)fdata) != EINA_TRUE)
150 goto on_exit;
151
152 on_exit:
153 (void) eina_accessor_unlock(accessor);
154}
155
156EAPI Eina_Bool
157eina_accessor_lock(Eina_Accessor *accessor)
158{
159 EINA_MAGIC_CHECK_ACCESSOR(accessor);
160 EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE);
161
162 if (accessor->lock)
163 return accessor->lock(accessor);
164 return EINA_TRUE;
165}
166
167EAPI Eina_Bool
168eina_accessor_unlock(Eina_Accessor *accessor)
169{
170 EINA_MAGIC_CHECK_ACCESSOR(accessor);
171 EINA_SAFETY_ON_NULL_RETURN_VAL(accessor, EINA_FALSE);
172
173 if (accessor->unlock)
174 return accessor->unlock(accessor);
175 return EINA_TRUE;
176}
diff --git a/libraries/eina/src/lib/eina_array.c b/libraries/eina/src/lib/eina_array.c
new file mode 100644
index 0000000..5a850ac
--- /dev/null
+++ b/libraries/eina/src/lib/eina_array.c
@@ -0,0 +1,491 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#include <assert.h>
25#include <stdlib.h>
26#include <string.h>
27#include <stdio.h>
28
29#include "eina_config.h"
30#include "eina_private.h"
31#include "eina_error.h"
32#include "eina_log.h"
33
34/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
35#include "eina_safety_checks.h"
36#include "eina_array.h"
37
38/*============================================================================*
39 * Local *
40 *============================================================================*/
41
42/**
43 * @cond LOCAL
44 */
45
46static const char EINA_MAGIC_ARRAY_STR[] = "Eina Array";
47static const char EINA_MAGIC_ARRAY_ITERATOR_STR[] = "Eina Array Iterator";
48static const char EINA_MAGIC_ARRAY_ACCESSOR_STR[] = "Eina Array Accessor";
49
50#define EINA_MAGIC_CHECK_ARRAY(d) \
51 do { \
52 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY)) { \
53 EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY); } \
54 } while (0)
55
56#define EINA_MAGIC_CHECK_ARRAY_ITERATOR(d, ...) \
57 do { \
58 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY_ITERATOR)) \
59 { \
60 EINA_MAGIC_FAIL(d, EINA_MAGIC_ARRAY_ITERATOR); \
61 return __VA_ARGS__; \
62 } \
63 } while (0)
64
65#define EINA_MAGIC_CHECK_ARRAY_ACCESSOR(d, ...) \
66 do { \
67 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ARRAY_ACCESSOR)) \
68 { \
69 EINA_MAGIC_FAIL(d, EINA_MAGIC_ACCESSOR); \
70 return __VA_ARGS__; \
71 } \
72 } while (0)
73
74
75typedef struct _Eina_Iterator_Array Eina_Iterator_Array;
76struct _Eina_Iterator_Array
77{
78 Eina_Iterator iterator;
79
80 const Eina_Array *array;
81 unsigned int index;
82
83 EINA_MAGIC
84};
85
86typedef struct _Eina_Accessor_Array Eina_Accessor_Array;
87struct _Eina_Accessor_Array
88{
89 Eina_Accessor accessor;
90 const Eina_Array *array;
91 EINA_MAGIC
92};
93
94static int _eina_array_log_dom = -1;
95
96#ifdef ERR
97#undef ERR
98#endif
99#define ERR(...) EINA_LOG_DOM_ERR(_eina_array_log_dom, __VA_ARGS__)
100
101#ifdef DBG
102#undef DBG
103#endif
104#define DBG(...) EINA_LOG_DOM_DBG(_eina_array_log_dom, __VA_ARGS__)
105
106static void eina_array_iterator_free(Eina_Iterator_Array *it) EINA_ARG_NONNULL(1);
107static Eina_Array *eina_array_iterator_get_container(Eina_Iterator_Array *it) EINA_ARG_NONNULL(1);
108static Eina_Bool eina_array_iterator_next(Eina_Iterator_Array *it,
109 void **data) EINA_ARG_NONNULL(1);
110
111static Eina_Bool eina_array_accessor_get_at(Eina_Accessor_Array *it,
112 unsigned int idx,
113 void **data) EINA_ARG_NONNULL(1);
114static Eina_Array *eina_array_accessor_get_container(Eina_Accessor_Array *it) EINA_ARG_NONNULL(1);
115static void eina_array_accessor_free(Eina_Accessor_Array *it) EINA_ARG_NONNULL(1);
116
117static Eina_Bool
118eina_array_iterator_next(Eina_Iterator_Array *it, void **data)
119{
120 EINA_MAGIC_CHECK_ARRAY_ITERATOR(it, EINA_FALSE);
121
122 if (!(it->index < eina_array_count_get(it->array)))
123 return EINA_FALSE;
124
125 if (data)
126 *data = eina_array_data_get(it->array, it->index);
127
128 it->index++;
129 return EINA_TRUE;
130}
131
132static Eina_Array *
133eina_array_iterator_get_container(Eina_Iterator_Array *it)
134{
135 EINA_MAGIC_CHECK_ARRAY_ITERATOR(it, NULL);
136 return (Eina_Array *)it->array;
137}
138
139static void
140eina_array_iterator_free(Eina_Iterator_Array *it)
141{
142 EINA_MAGIC_CHECK_ARRAY_ITERATOR(it);
143 MAGIC_FREE(it);
144}
145
146static Eina_Bool
147eina_array_accessor_get_at(Eina_Accessor_Array *it,
148 unsigned int idx,
149 void **data)
150{
151 EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it, EINA_FALSE);
152
153 if (!(idx < eina_array_count_get(it->array)))
154 return EINA_FALSE;
155
156 if (data)
157 *data = eina_array_data_get(it->array, idx);
158
159 return EINA_TRUE;
160}
161
162static Eina_Array *
163eina_array_accessor_get_container(Eina_Accessor_Array *it)
164{
165 EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it, NULL);
166 return (Eina_Array *)it->array;
167}
168
169static void
170eina_array_accessor_free(Eina_Accessor_Array *it)
171{
172 EINA_MAGIC_CHECK_ARRAY_ACCESSOR(it);
173 MAGIC_FREE(it);
174}
175
176/* used from eina_inline_array.x, thus a needed symbol */
177EAPI Eina_Bool
178eina_array_grow(Eina_Array *array)
179{
180 void **tmp;
181 unsigned int total;
182
183 EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE);
184
185 EINA_MAGIC_CHECK_ARRAY(array);
186
187 total = array->total + array->step;
188 eina_error_set(0);
189 tmp = realloc(array->data, sizeof (void *) * total);
190 if (EINA_UNLIKELY(!tmp))
191 {
192 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
193 return 0;
194 }
195
196 array->total = total;
197 array->data = tmp;
198
199 return 1;
200}
201
202/**
203 * @endcond
204 */
205
206
207/*============================================================================*
208 * Global *
209 *============================================================================*/
210
211/**
212 * @internal
213 * @brief Initialize the array module.
214 *
215 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
216 *
217 * This function sets up the error and magic modules or Eina. It is
218 * called by eina_init().
219 *
220 * @see eina_init()
221 */
222Eina_Bool
223eina_array_init(void)
224{
225 _eina_array_log_dom = eina_log_domain_register("eina_array",
226 EINA_LOG_COLOR_DEFAULT);
227 if (_eina_array_log_dom < 0)
228 {
229 EINA_LOG_ERR("Could not register log domain: eina_array");
230 return EINA_FALSE;
231 }
232
233#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
234 EMS(EINA_MAGIC_ARRAY);
235 EMS(EINA_MAGIC_ARRAY_ITERATOR);
236 EMS(EINA_MAGIC_ARRAY_ACCESSOR);
237#undef EMS
238 return EINA_TRUE;
239}
240
241/**
242 * @internal
243 * @brief Shut down the array module.
244 *
245 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
246 *
247 * This function shuts down the array module set up by
248 * eina_array_init(). It is called by eina_shutdown().
249 *
250 * @see eina_shutdown()
251 */
252Eina_Bool
253eina_array_shutdown(void)
254{
255 eina_log_domain_unregister(_eina_array_log_dom);
256 _eina_array_log_dom = -1;
257 return EINA_TRUE;
258}
259
260/*============================================================================*
261 * API *
262 *============================================================================*/
263
264EAPI Eina_Array *
265eina_array_new(unsigned int step)
266{
267 Eina_Array *array;
268
269 eina_error_set(0);
270 array = malloc(sizeof (Eina_Array));
271 if (!array)
272 {
273 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
274 return NULL;
275 }
276
277 EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY);
278
279 array->version = EINA_ARRAY_VERSION;
280 array->data = NULL;
281 array->total = 0;
282 array->count = 0;
283 array->step = step;
284
285 return array;
286}
287
288EAPI void
289eina_array_free(Eina_Array *array)
290{
291 eina_array_flush(array);
292
293 EINA_SAFETY_ON_NULL_RETURN(array);
294 EINA_MAGIC_CHECK_ARRAY(array);
295 MAGIC_FREE(array);
296}
297
298EAPI void
299eina_array_step_set(Eina_Array *array,
300 unsigned int sizeof_eina_array,
301 unsigned int step)
302{
303 EINA_SAFETY_ON_NULL_RETURN(array);
304
305 if (sizeof (Eina_Array) != sizeof_eina_array)
306 {
307 ERR("Unknow Eina_Array size ! Got %i, expected %i !\n",
308 sizeof_eina_array,
309 (int) sizeof (Eina_Array));
310 /* Force memory to zero to provide a small layer of security */
311 memset(array, 0, sizeof_eina_array);
312 return ;
313 }
314
315 array->version = EINA_ARRAY_VERSION;
316 array->data = NULL;
317 array->total = 0;
318 array->count = 0;
319 array->step = step;
320 EINA_MAGIC_SET(array, EINA_MAGIC_ARRAY);
321}
322
323EAPI void
324eina_array_flush(Eina_Array *array)
325{
326 EINA_SAFETY_ON_NULL_RETURN(array);
327 EINA_MAGIC_CHECK_ARRAY(array);
328
329 array->count = 0;
330 array->total = 0;
331
332 if (!array->data)
333 return;
334
335 free(array->data);
336 array->data = NULL;
337}
338
339EAPI Eina_Bool
340eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data,
341 void *gdata),
342 void *gdata)
343{
344 void **tmp;
345 /* WARNING:
346 The algorithm does exit before using unitialized data. So compiler is
347 giving you a false positiv here too.
348 */
349 void *data = NULL;
350 unsigned int total = 0;
351 unsigned int limit;
352 unsigned int i;
353
354 EINA_SAFETY_ON_NULL_RETURN_VAL(array, EINA_FALSE);
355 EINA_SAFETY_ON_NULL_RETURN_VAL(keep, EINA_FALSE);
356 EINA_MAGIC_CHECK_ARRAY(array);
357
358 if (array->total == 0)
359 return EINA_TRUE;
360
361 for (i = 0; i < array->count; ++i)
362 {
363 data = eina_array_data_get(array, i);
364
365 if (keep(data, gdata) == EINA_FALSE)
366 break;
367 }
368 limit = i;
369 if (i < array->count)
370 ++i;
371
372 for (; i < array->count; ++i)
373 {
374 data = eina_array_data_get(array, i);
375
376 if (keep(data, gdata) == EINA_TRUE)
377 break;
378 }
379 /* Special case all objects that need to stay are at the beginning of the array. */
380 if (i == array->count)
381 {
382 array->count = limit;
383 if (array->count == 0)
384 {
385 free(array->data);
386 array->total = 0;
387 array->data = NULL;
388 }
389
390 return EINA_TRUE;
391 }
392
393 eina_error_set(0);
394 tmp = malloc(sizeof (void *) * array->total);
395 if (!tmp)
396 {
397 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
398 return EINA_FALSE;
399 }
400
401 memcpy(tmp, array->data, limit * sizeof(void *));
402 total = limit;
403
404 if (i < array->count)
405 {
406 tmp[total] = data;
407 total++;
408 ++i;
409 }
410
411 for (; i < array->count; ++i)
412 {
413 data = eina_array_data_get(array, i);
414
415 if (keep(data, gdata))
416 {
417 tmp[total] = data;
418 total++;
419 }
420 }
421
422 free(array->data);
423
424 /* If we do not keep any object in the array, we should have exited
425 earlier in test (i == array->count). */
426 assert(total != 0);
427
428 array->data = tmp;
429 array->count = total;
430 return EINA_TRUE;
431}
432
433EAPI Eina_Iterator *
434eina_array_iterator_new(const Eina_Array *array)
435{
436 Eina_Iterator_Array *it;
437
438 EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL);
439 EINA_MAGIC_CHECK_ARRAY(array);
440
441 eina_error_set(0);
442 it = calloc(1, sizeof (Eina_Iterator_Array));
443 if (!it)
444 {
445 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
446 return NULL;
447 }
448
449 EINA_MAGIC_SET(it, EINA_MAGIC_ARRAY_ITERATOR);
450 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
451
452 it->array = array;
453
454 it->iterator.version = EINA_ITERATOR_VERSION;
455 it->iterator.next = FUNC_ITERATOR_NEXT(eina_array_iterator_next);
456 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
457 eina_array_iterator_get_container);
458 it->iterator.free = FUNC_ITERATOR_FREE(eina_array_iterator_free);
459
460 return &it->iterator;
461}
462
463EAPI Eina_Accessor *
464eina_array_accessor_new(const Eina_Array *array)
465{
466 Eina_Accessor_Array *ac;
467
468 EINA_SAFETY_ON_NULL_RETURN_VAL(array, NULL);
469 EINA_MAGIC_CHECK_ARRAY(array);
470
471 eina_error_set(0);
472 ac = calloc(1, sizeof (Eina_Accessor_Array));
473 if (!ac)
474 {
475 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
476 return NULL;
477 }
478
479 EINA_MAGIC_SET(ac, EINA_MAGIC_ARRAY_ACCESSOR);
480 EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);
481
482 ac->array = array;
483
484 ac->accessor.version = EINA_ACCESSOR_VERSION;
485 ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_array_accessor_get_at);
486 ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(
487 eina_array_accessor_get_container);
488 ac->accessor.free = FUNC_ACCESSOR_FREE(eina_array_accessor_free);
489
490 return &ac->accessor;
491}
diff --git a/libraries/eina/src/lib/eina_benchmark.c b/libraries/eina/src/lib/eina_benchmark.c
new file mode 100644
index 0000000..1ba2a00
--- /dev/null
+++ b/libraries/eina/src/lib/eina_benchmark.c
@@ -0,0 +1,372 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef HAVE_ALLOCA_H
24# include <alloca.h>
25#elif defined __GNUC__
26# define alloca __builtin_alloca
27#elif defined _AIX
28# define alloca __alloca
29#elif defined _MSC_VER
30# include <malloc.h>
31# define alloca _alloca
32#else
33# include <stddef.h>
34# ifdef __cplusplus
35extern "C"
36# endif
37void *alloca (size_t);
38#endif
39
40#include <stdlib.h>
41#include <stdio.h>
42#include <string.h>
43
44#ifdef HAVE_EVIL
45# include <Evil.h>
46#endif
47
48#include "eina_config.h"
49#include "eina_private.h"
50#include "eina_log.h"
51#include "eina_benchmark.h"
52#include "eina_inlist.h"
53#include "eina_list.h"
54#include "eina_counter.h"
55
56/*============================================================================*
57* Local *
58*============================================================================*/
59
60/**
61 * @cond LOCAL
62 */
63
64#define EINA_BENCHMARK_FILENAME_MASK "bench_%s_%s.gnuplot"
65#define EINA_BENCHMARK_DATA_MASK "bench_%s_%s.%s.data"
66
67typedef struct _Eina_Run Eina_Run;
68struct _Eina_Run
69{
70 EINA_INLIST;
71
72 Eina_Benchmark_Specimens cb;
73 const char *name;
74 int start;
75 int end;
76 int step;
77};
78
79struct _Eina_Benchmark
80{
81 const char *name;
82 const char *run;
83
84 Eina_Inlist *runs;
85 Eina_List *names;
86};
87
88static int _eina_benchmark_log_dom = -1;
89
90#ifdef ERR
91#undef ERR
92#endif
93#define ERR(...) EINA_LOG_DOM_ERR(_eina_benchmark_log_dom, __VA_ARGS__)
94
95#ifdef DBG
96#undef DBG
97#endif
98#define DBG(...) EINA_LOG_DOM_DBG(_eina_benchmark_log_dom, __VA_ARGS__)
99
100/**
101 * @endcond
102 */
103
104/*============================================================================*
105* Global *
106*============================================================================*/
107
108/**
109 * @internal
110 * @brief Initialize the benchmark module.
111 *
112 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
113 *
114 * This function sets up the benchmark module of Eina. It is called by
115 * eina_init().
116 *
117 * @see eina_init()
118 */
119Eina_Bool
120eina_benchmark_init(void)
121{
122 _eina_benchmark_log_dom = eina_log_domain_register("eina_benchmark",
123 EINA_LOG_COLOR_DEFAULT);
124 if (_eina_benchmark_log_dom < 0)
125 {
126 EINA_LOG_ERR("Could not register log domain: eina_benchmark");
127 return EINA_FALSE;
128 }
129
130 return EINA_TRUE;
131}
132
133/**
134 * @internal
135 * @brief Shut down the benchmark module.
136 *
137 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
138 *
139 * This function shuts down the benchmark module set up by
140 * eina_benchmark_init(). It is called by eina_shutdown().
141 *
142 * @see eina_shutdown()
143 */
144Eina_Bool
145eina_benchmark_shutdown(void)
146{
147 eina_log_domain_unregister(_eina_benchmark_log_dom);
148 _eina_benchmark_log_dom = -1;
149 return EINA_TRUE;
150}
151
152/*============================================================================*
153* API *
154*============================================================================*/
155
156EAPI Eina_Benchmark *
157eina_benchmark_new(const char *name, const char *run)
158{
159 Eina_Benchmark *new;
160
161 eina_error_set(0);
162 new = calloc(1, sizeof (Eina_Benchmark));
163 if (!new)
164 {
165 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
166 return NULL;
167 }
168
169 new->name = name;
170 new->run = run;
171
172 return new;
173}
174
175EAPI void
176eina_benchmark_free(Eina_Benchmark *bench)
177{
178 Eina_Array *names;
179
180 if (!bench)
181 return;
182
183 while (bench->runs)
184 {
185 Eina_Run *run = (Eina_Run *)bench->runs;
186
187 bench->runs = eina_inlist_remove(bench->runs, bench->runs);
188 free(run);
189 }
190
191 EINA_LIST_FREE(bench->names, names)
192 {
193 Eina_Array_Iterator it;
194 char *tmp;
195 unsigned int i;
196
197 EINA_ARRAY_ITER_NEXT(names, i, tmp, it)
198 free(tmp);
199
200 eina_array_free(names);
201 }
202
203 free(bench);
204}
205
206EAPI Eina_Bool
207eina_benchmark_register(Eina_Benchmark *bench,
208 const char *name,
209 Eina_Benchmark_Specimens bench_cb,
210 int count_start,
211 int count_end,
212 int count_step)
213{
214 Eina_Run *run;
215
216 if (!bench)
217 return EINA_FALSE;
218
219 if (count_step == 0)
220 return EINA_FALSE;
221
222 eina_error_set(0);
223 run = calloc(1, sizeof (Eina_Run));
224 if (!run)
225 {
226 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
227 return EINA_FALSE;
228 }
229
230 run->cb = bench_cb;
231 run->name = name;
232 run->start = count_start;
233 run->end = count_end;
234 run->step = count_step;
235
236 bench->runs = eina_inlist_append(bench->runs, EINA_INLIST_GET(run));
237
238 return EINA_TRUE;
239}
240
241EAPI Eina_Array *
242eina_benchmark_run(Eina_Benchmark *bench)
243{
244 FILE *main_script;
245 FILE *current_data;
246 Eina_Array *ea;
247 Eina_Run *run;
248 char *buffer;
249 Eina_Bool first = EINA_FALSE;
250 size_t length;
251
252 if (!bench)
253 return NULL;
254
255 length = strlen(EINA_BENCHMARK_FILENAME_MASK) + strlen(bench->name) + strlen(
256 bench->run);
257
258 buffer = alloca(sizeof (char) * length);
259 if (!buffer)
260 return NULL;
261
262 snprintf(buffer,
263 length,
264 EINA_BENCHMARK_FILENAME_MASK,
265 bench->name,
266 bench->run);
267
268 main_script = fopen(buffer, "w");
269 if (!main_script)
270 return NULL;
271
272 ea = eina_array_new(16);
273 if (!ea)
274 {
275 fclose(main_script);
276 return NULL;
277 }
278
279 eina_array_push(ea, strdup(buffer));
280
281 fprintf(
282 main_script,
283 "set autoscale # scale axes automatically\n"
284 "unset log # remove any log-scaling\n"
285 "unset label # remove any previous labels\n"
286 "set xtic auto # set xtics automatically\n"
287 "set ytic auto # set ytics automatically\n"
288/* "set logscale y\n" */
289 "set terminal png size 1024,768\n"
290 "set output \"output_%s_%s.png\"\n"
291 "set title \"%s %s\n"
292 "set xlabel \"tests\"\n"
293 "set ylabel \"time\"\n"
294 "plot ",
295 bench->name,
296 bench->run,
297 bench->name,
298 bench->run);
299
300 EINA_INLIST_FOREACH(bench->runs, run)
301 {
302 Eina_Counter *counter;
303 char *result;
304 size_t tmp;
305 int i;
306
307 tmp = strlen(EINA_BENCHMARK_DATA_MASK) + strlen(bench->name) + strlen(
308 bench->run) + strlen(run->name);
309 if (tmp > length)
310 {
311 buffer = alloca(sizeof (char) * tmp);
312 length = tmp;
313 }
314
315 snprintf(buffer,
316 length,
317 EINA_BENCHMARK_DATA_MASK,
318 bench->name,
319 bench->run,
320 run->name);
321
322 current_data = fopen(buffer, "w");
323 if (!current_data)
324 continue;
325
326 eina_array_push(ea, strdup(buffer));
327
328 counter = eina_counter_new(run->name);
329
330 for (i = run->start; i < run->end; i += run->step)
331 {
332 fprintf(stderr, "Run %s: %i\n", run->name, i);
333 eina_counter_start(counter);
334
335 run->cb(i);
336
337 eina_counter_stop(counter, i);
338 }
339
340 result = eina_counter_dump(counter);
341 if (result)
342 {
343 fprintf(current_data, "%s", result);
344 free(result);
345 }
346
347 eina_counter_free(counter);
348
349 fclose(current_data);
350
351 if (first == EINA_FALSE)
352 first = EINA_TRUE;
353 else
354 fprintf(main_script, ", \\\n");
355
356 fprintf(main_script,
357 "\"%s\" using 1:2 title \'%s\' with line",
358 buffer, run->name);
359 }
360
361 fprintf(main_script, "\n");
362
363 fclose(main_script);
364
365 bench->names = eina_list_append(bench->names, ea);
366
367 return ea;
368}
369
370/**
371 * @}
372 */
diff --git a/libraries/eina/src/lib/eina_binbuf.c b/libraries/eina/src/lib/eina_binbuf.c
new file mode 100644
index 0000000..3cbebd1
--- /dev/null
+++ b/libraries/eina/src/lib/eina_binbuf.c
@@ -0,0 +1,62 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6#include <string.h>
7
8#ifdef HAVE_EVIL
9# include <Evil.h>
10#endif
11
12#include "eina_private.h"
13#include "eina_strbuf_common.h"
14#include "eina_binbuf.h"
15
16/*============================================================================*
17 * Local *
18 *============================================================================*/
19
20/**
21 * @cond LOCAL
22 */
23
24#ifdef _STRBUF_DATA_TYPE
25# undef _STRBUF_DATA_TYPE
26#endif
27
28#ifdef _STRBUF_CSIZE
29# undef _STRBUF_CSIZE
30#endif
31
32#ifdef _STRBUF_STRUCT_NAME
33# undef _STRBUF_STRUCT_NAME
34#endif
35
36#ifdef _STRBUF_MAGIC
37# undef _STRBUF_MAGIC
38#endif
39
40#ifdef _STRBUF_MAGIC_STR
41# undef _STRBUF_MAGIC_STR
42#endif
43
44#ifdef _FUNC_EXPAND
45# undef _FUNC_EXPAND
46#endif
47
48
49#define _STRBUF_DATA_TYPE unsigned char
50#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE)
51#define _STRBUF_STRUCT_NAME Eina_Binbuf
52#define _STRBUF_MAGIC EINA_MAGIC_BINBUF
53#define _STRBUF_MAGIC_STR __BINBUF_MAGIC_STR
54static const char __BINBUF_MAGIC_STR[] = "Eina Binbuf";
55
56#define _FUNC_EXPAND(y) eina_binbuf_ ## y
57
58#include "eina_binbuf_template_c.x"
59
60/**
61 * @endcond
62 */
diff --git a/libraries/eina/src/lib/eina_binbuf_template_c.x b/libraries/eina/src/lib/eina_binbuf_template_c.x
new file mode 100644
index 0000000..613a715
--- /dev/null
+++ b/libraries/eina/src/lib/eina_binbuf_template_c.x
@@ -0,0 +1,144 @@
1/*
2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3 */
4
5/* This file should be included from files implementing binbuf.
6 * The including file should define the following macros:
7 * _STRBUF_DATA_TYPE
8 * _STRBUF_CSIZE
9 * _STRBUF_STRUCT_NAME
10 * _STRBUF_MAGIC
11 * _STRBUF_MAGIC_STR
12 * _FUNC_EXPAND
13 * See how it's done in eina_ustrbuf.c and eina_strbuf.c. This just makes things
14 * a lot easier since those are essentially the same just with different sizes.
15 */
16
17/*============================================================================*
18 * Global *
19 *============================================================================*/
20
21/**
22 * @internal
23 * @brief Initialize the strbuf module.
24 *
25 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
26 *
27 * This function sets up the strbuf module of Eina. It is called by
28 * eina_init().
29 *
30 * @see eina_init()
31 */
32Eina_Bool
33_FUNC_EXPAND(init)(void)
34{
35 eina_magic_string_static_set(_STRBUF_MAGIC, _STRBUF_MAGIC_STR);
36 return eina_strbuf_common_init();
37}
38
39/**
40 * @internal
41 * @brief Shut down the strbuf module.
42 *
43 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
44 *
45 * This function shuts down the strbuf module set up by
46 * eina_ustrbuf_init(). It is called by eina_shutdown().
47 *
48 * @see eina_shutdown()
49 */
50Eina_Bool
51_FUNC_EXPAND(shutdown)(void)
52{
53 return eina_strbuf_common_shutdown();
54}
55
56/*============================================================================*
57 * API *
58 *============================================================================*/
59
60EAPI _STRBUF_STRUCT_NAME *
61_FUNC_EXPAND(new)(void)
62{
63 _STRBUF_STRUCT_NAME *buf = eina_strbuf_common_new(_STRBUF_CSIZE);
64 EINA_MAGIC_SET(buf, _STRBUF_MAGIC);
65 return buf;
66}
67
68EAPI void
69_FUNC_EXPAND(free)(_STRBUF_STRUCT_NAME *buf)
70{
71 EINA_MAGIC_CHECK_STRBUF(buf);
72 EINA_MAGIC_SET(buf, EINA_MAGIC_NONE);
73 eina_strbuf_common_free(buf);
74}
75
76EAPI void
77_FUNC_EXPAND(reset)(_STRBUF_STRUCT_NAME *buf)
78{
79 EINA_MAGIC_CHECK_STRBUF(buf);
80 eina_strbuf_common_reset(_STRBUF_CSIZE, buf);
81}
82
83EAPI Eina_Bool
84_FUNC_EXPAND(append_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length)
85{
86 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
87 return eina_strbuf_common_append_length(_STRBUF_CSIZE, buf, (const void *) str, length);
88}
89
90EAPI Eina_Bool
91_FUNC_EXPAND(insert_length)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t length, size_t pos)
92{
93 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
94 return eina_strbuf_common_insert_length(_STRBUF_CSIZE, buf, (const void *) str, length, pos);
95}
96
97EAPI Eina_Bool
98_FUNC_EXPAND(append_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c)
99{
100 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
101 return eina_strbuf_common_append_char(_STRBUF_CSIZE, buf, (const void *) &c);
102}
103
104EAPI Eina_Bool
105_FUNC_EXPAND(insert_char)(_STRBUF_STRUCT_NAME *buf, _STRBUF_DATA_TYPE c, size_t pos)
106{
107 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
108 return eina_strbuf_common_insert_char(_STRBUF_CSIZE, buf, (const void *) &c, pos);
109}
110
111EAPI Eina_Bool
112_FUNC_EXPAND(remove)(_STRBUF_STRUCT_NAME *buf, size_t start, size_t end)
113{
114 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
115 return eina_strbuf_common_remove(_STRBUF_CSIZE, buf, start, end);
116}
117
118EAPI const _STRBUF_DATA_TYPE *
119_FUNC_EXPAND(string_get)(const _STRBUF_STRUCT_NAME *buf)
120{
121 EINA_MAGIC_CHECK_STRBUF(buf, NULL);
122 return (const _STRBUF_DATA_TYPE *) eina_strbuf_common_string_get(buf);
123}
124
125EAPI _STRBUF_DATA_TYPE *
126_FUNC_EXPAND(string_steal)(_STRBUF_STRUCT_NAME *buf)
127{
128 EINA_MAGIC_CHECK_STRBUF(buf, NULL);
129 return (_STRBUF_DATA_TYPE *) eina_strbuf_common_string_steal(_STRBUF_CSIZE, buf);
130}
131
132EAPI void
133_FUNC_EXPAND(string_free)(_STRBUF_STRUCT_NAME *buf)
134{
135 EINA_MAGIC_CHECK_STRBUF(buf);
136 eina_strbuf_common_string_free(_STRBUF_CSIZE, buf);
137}
138
139EAPI size_t
140_FUNC_EXPAND(length_get)(const _STRBUF_STRUCT_NAME *buf)
141{
142 EINA_MAGIC_CHECK_STRBUF(buf, 0);
143 return eina_strbuf_common_length_get(buf);
144}
diff --git a/libraries/eina/src/lib/eina_binshare.c b/libraries/eina/src/lib/eina_binshare.c
new file mode 100644
index 0000000..68a82fc
--- /dev/null
+++ b/libraries/eina/src/lib/eina_binshare.c
@@ -0,0 +1,127 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler,
3 * Jorge Luis Zapata Muga,
4 * Cedric Bail,
5 * Gustavo Sverzut Barbieri
6 * Tom Hacohen
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library;
20 * if not, see <http://www.gnu.org/licenses/>.
21
22 */
23
24#include "eina_share_common.h"
25#include "eina_unicode.h"
26#include "eina_private.h"
27#include "eina_binshare.h"
28
29/*============================================================================*
30 * Local *
31 *============================================================================*/
32
33/**
34 * @cond LOCAL
35 */
36
37/* The actual share */
38static Eina_Share *binshare_share;
39static const char EINA_MAGIC_BINSHARE_NODE_STR[] = "Eina Binshare Node";
40
41/**
42 * @endcond
43 */
44
45
46/*============================================================================*
47* Global *
48*============================================================================*/
49
50/**
51 * @internal
52 * @brief Initialize the share_common module.
53 *
54 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
55 *
56 * This function sets up the share_common module of Eina. It is called by
57 * eina_init().
58 *
59 * @see eina_init()
60 */
61EAPI Eina_Bool
62eina_binshare_init(void)
63{
64 return eina_share_common_init(&binshare_share,
65 EINA_MAGIC_BINSHARE_NODE,
66 EINA_MAGIC_BINSHARE_NODE_STR);
67}
68
69/**
70 * @internal
71 * @brief Shut down the share_common module.
72 *
73 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
74 *
75 * This function shuts down the share_common module set up by
76 * eina_share_common_init(). It is called by eina_shutdown().
77 *
78 * @see eina_shutdown()
79 */
80EAPI Eina_Bool
81eina_binshare_shutdown(void)
82{
83 Eina_Bool ret;
84 ret = eina_share_common_shutdown(&binshare_share);
85 return ret;
86}
87
88
89/*============================================================================*
90 * API *
91 *============================================================================*/
92
93EAPI void
94eina_binshare_del(const void *obj)
95{
96 if (!obj)
97 return;
98
99 eina_share_common_del(binshare_share, obj);
100}
101
102EAPI const void *
103eina_binshare_add_length(const void *obj, unsigned int olen)
104{
105 return eina_share_common_add_length(binshare_share,
106 obj,
107 (olen) * sizeof(char),
108 0);
109}
110
111EAPI const void *
112eina_binshare_ref(const void *obj)
113{
114 return eina_share_common_ref(binshare_share, obj);
115}
116
117EAPI int
118eina_binshare_length(const void *obj)
119{
120 return eina_share_common_length(binshare_share, obj);
121}
122
123EAPI void
124eina_binshare_dump(void)
125{
126 eina_share_common_dump(binshare_share, NULL, 0);
127}
diff --git a/libraries/eina/src/lib/eina_convert.c b/libraries/eina/src/lib/eina_convert.c
new file mode 100644
index 0000000..63b6654
--- /dev/null
+++ b/libraries/eina/src/lib/eina_convert.c
@@ -0,0 +1,483 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric BAIL, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <math.h>
24#include <stdlib.h>
25#include <string.h>
26#include <stdio.h>
27
28#ifdef HAVE_EVIL
29# include <Evil.h>
30#endif
31
32#include "eina_config.h"
33#include "eina_private.h"
34#include "eina_log.h"
35
36/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
37#include "eina_safety_checks.h"
38#include "eina_convert.h"
39#include "eina_fp.h"
40
41/*============================================================================*
42* Local *
43*============================================================================*/
44
45/**
46 * @cond LOCAL
47 */
48
49static const char look_up_table[] = {'0', '1', '2', '3', '4',
50 '5', '6', '7', '8', '9',
51 'a', 'b', 'c', 'd', 'e', 'f'};
52static int _eina_convert_log_dom = -1;
53
54#ifdef ERR
55#undef ERR
56#endif
57#define ERR(...) EINA_LOG_DOM_ERR(_eina_convert_log_dom, __VA_ARGS__)
58
59#ifdef DBG
60#undef DBG
61#endif
62#define DBG(...) EINA_LOG_DOM_DBG(_eina_convert_log_dom, __VA_ARGS__)
63
64#define HEXA_TO_INT(Hexa) (Hexa >= 'a') ? Hexa - 'a' + 10 : Hexa - '0'
65
66static inline void reverse(char s[], int length)
67{
68 int i, j;
69 char c;
70
71 for (i = 0, j = length - 1; i < j; i++, j--)
72 {
73 c = s[i];
74 s[i] = s[j];
75 s[j] = c;
76 }
77}
78
79/**
80 * @endcond
81 */
82
83/*============================================================================*
84* Global *
85*============================================================================*/
86
87/**
88 * @cond LOCAL
89 */
90
91EAPI Eina_Error EINA_ERROR_CONVERT_P_NOT_FOUND = 0;
92EAPI Eina_Error EINA_ERROR_CONVERT_0X_NOT_FOUND = 0;
93EAPI Eina_Error EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH = 0;
94
95static const char EINA_ERROR_CONVERT_0X_NOT_FOUND_STR[] =
96 "Error during string conversion to float, First '0x' was not found.";
97static const char EINA_ERROR_CONVERT_P_NOT_FOUND_STR[] =
98 "Error during string conversion to float, First 'p' was not found.";
99static const char EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH_STR[] =
100 "Error outrun string limit during conversion string conversion to float.";
101
102/**
103 * @endcond
104 */
105
106/**
107 * @internal
108 * @brief Initialize the convert module.
109 *
110 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
111 *
112 * This function sets up the convert module of Eina. It is called by
113 * eina_init().
114 *
115 * This function sets up the error module of Eina and registers the
116 * errors #EINA_ERROR_CONVERT_0X_NOT_FOUND,
117 * #EINA_ERROR_CONVERT_P_NOT_FOUND and
118 * #EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH.
119 *
120 * @see eina_init()
121 */
122Eina_Bool
123eina_convert_init(void)
124{
125 _eina_convert_log_dom = eina_log_domain_register("eina_convert",
126 EINA_LOG_COLOR_DEFAULT);
127 if (_eina_convert_log_dom < 0)
128 {
129 EINA_LOG_ERR("Could not register log domain: eina_convert");
130 return EINA_FALSE;
131 }
132
133#define EEMR(n) n = eina_error_msg_static_register(n ## _STR)
134 EEMR(EINA_ERROR_CONVERT_0X_NOT_FOUND);
135 EEMR(EINA_ERROR_CONVERT_P_NOT_FOUND);
136 EEMR(EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH);
137#undef EEMR
138
139 return EINA_TRUE;
140}
141
142/**
143 * @internal
144 * @brief Shut down the convert module.
145 *
146 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
147 *
148 * This function shuts down the convert module set up by
149 * eina_convert_init(). It is called by eina_shutdown().
150 *
151 * @see eina_shutdown()
152 */
153Eina_Bool
154eina_convert_shutdown(void)
155{
156 eina_log_domain_unregister(_eina_convert_log_dom);
157 _eina_convert_log_dom = -1;
158 return EINA_TRUE;
159}
160
161/*============================================================================*
162* API *
163*============================================================================*/
164
165/*
166 * Come from the second edition of The C Programming Language ("K&R2") on page 64
167 */
168
169EAPI int
170eina_convert_itoa(int n, char *s)
171{
172 int i = 0;
173 int r = 0;
174
175 EINA_SAFETY_ON_NULL_RETURN_VAL(s, 0);
176
177 if (n < 0)
178 {
179 n = -n;
180 *s++ = '-';
181 r = 1;
182 }
183
184 do {
185 s[i++] = n % 10 + '0';
186 } while ((n /= 10) > 0);
187
188 s[i] = '\0';
189
190 reverse(s, i);
191
192 return i + r;
193}
194
195EAPI int
196eina_convert_xtoa(unsigned int n, char *s)
197{
198 int i;
199
200 EINA_SAFETY_ON_NULL_RETURN_VAL(s, 0);
201
202 i = 0;
203 do {
204 s[i++] = look_up_table[n & 0xF];
205 } while ((n >>= 4) > 0);
206
207 s[i] = '\0';
208
209 reverse(s, i);
210
211 return i;
212}
213
214EAPI Eina_Bool
215eina_convert_atod(const char *src, int length, long long *m, long *e)
216{
217 const char *str = src;
218 long long mantisse;
219 long exponent;
220 int nbr_decimals = 0;
221 int sign = 1;
222
223 EINA_SAFETY_ON_NULL_RETURN_VAL(src, EINA_FALSE);
224 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
225 EINA_SAFETY_ON_NULL_RETURN_VAL(e, EINA_FALSE);
226
227 if (length <= 0)
228 goto on_length_error;
229
230 /* Compute the mantisse. */
231 if (*str == '-')
232 {
233 sign = -1;
234 str++;
235 length--;
236 }
237
238 if (length <= 2)
239 goto on_length_error;
240
241 if (strncmp(str, "0x", 2))
242 {
243 eina_error_set(EINA_ERROR_CONVERT_0X_NOT_FOUND);
244 DBG("'0x' not found in '%s'", src);
245 return EINA_FALSE;
246 }
247
248 str += 2;
249 length -= 2;
250
251 mantisse = HEXA_TO_INT(*str);
252
253 str++;
254 length--; if (length <= 0)
255 goto on_length_error;
256
257 if (*str == '.')
258 for (str++, length--;
259 length > 0 && *str != 'p';
260 ++str, --length, ++nbr_decimals)
261 {
262 mantisse <<= 4;
263 mantisse += HEXA_TO_INT(*str);
264 }
265
266 if (sign < 0)
267 mantisse = -mantisse;
268
269 /* Compute the exponent. */
270 if (*str != 'p')
271 {
272 eina_error_set(EINA_ERROR_CONVERT_P_NOT_FOUND);
273 DBG("'p' not found in '%s'", src);
274 return EINA_FALSE;
275 }
276
277 sign = +1;
278
279 str++;
280 length--; if (length <= 0)
281 goto on_length_error;
282
283 if (strchr("-+", *str))
284 {
285 sign = (*str == '-') ? -1 : +1;
286
287 str++; length--;
288 }
289
290 for (exponent = 0; length > 0 && *str != '\0'; ++str, --length)
291 {
292 exponent *= 10;
293 exponent += *str - '0';
294 }
295
296 if (length < 0)
297 goto on_length_error;
298
299 if (sign < 0)
300 exponent = -exponent;
301
302 *m = mantisse;
303 *e = exponent - (nbr_decimals << 2);
304
305 return EINA_TRUE;
306
307on_length_error:
308 eina_error_set(EINA_ERROR_CONVERT_OUTRUN_STRING_LENGTH);
309 return EINA_FALSE;
310}
311
312EAPI int
313eina_convert_dtoa(double d, char *des)
314{
315 int length = 0;
316 int p;
317 int i;
318
319 EINA_SAFETY_ON_NULL_RETURN_VAL(des, EINA_FALSE);
320
321 if (d < 0.0)
322 {
323 *(des++) = '-';
324 d = -d;
325 length++;
326 }
327
328 d = frexp(d, &p);
329
330 if (p)
331 {
332 d *= 2;
333 p -= 1;
334 }
335
336 *(des++) = '0';
337 *(des++) = 'x';
338 *(des++) = look_up_table[(size_t)d];
339 *(des++) = '.';
340 length += 4;
341
342 for (i = 0; i < 16; i++, length++)
343 {
344 d -= floor(d);
345 d *= 16;
346 *(des++) = look_up_table[(size_t)d];
347 }
348
349 while (*(des - 1) == '0')
350 {
351 des--;
352 length--;
353 }
354
355 if (*(des - 1) == '.')
356 {
357 des--;
358 length--;
359 }
360
361 *(des++) = 'p';
362 if (p < 0)
363 {
364 *(des++) = '-';
365 p = -p;
366 }
367 else
368 *(des++) = '+';
369
370 length += 2;
371
372 return length + eina_convert_itoa(p, des);
373}
374
375EAPI int
376eina_convert_fptoa(Eina_F32p32 fp, char *des)
377{
378 int length = 0;
379 int p = 0;
380 int i;
381
382 EINA_SAFETY_ON_NULL_RETURN_VAL(des, EINA_FALSE);
383
384 if (fp == 0)
385 {
386 memcpy(des, "0x0p+0", 7);
387 return 7;
388 }
389
390 if (fp < 0)
391 {
392 *(des++) = '-';
393 fp = -fp;
394 length++;
395 }
396
397 /* fp >= 1 */
398 if (fp >= 0x0000000100000000LL)
399 while (fp >= 0x0000000100000000LL)
400 {
401 p++;
402 /* fp /= 2 */
403 fp >>= 1;
404 } /* fp < 0.5 */
405 else if (fp < 0x80000000)
406 while (fp < 0x80000000)
407 {
408 p--;
409 /* fp *= 2 */
410 fp <<= 1;
411 }
412
413 if (p)
414 {
415 p--;
416 /* fp *= 2 */
417 fp <<= 1;
418 }
419
420 *(des++) = '0';
421 *(des++) = 'x';
422 *(des++) = look_up_table[fp >> 32];
423 *(des++) = '.';
424 length += 4;
425
426 for (i = 0; i < 16; i++, length++)
427 {
428 fp &= 0x00000000ffffffffLL;
429 fp <<= 4; /* fp *= 16 */
430 *(des++) = look_up_table[fp >> 32];
431 }
432
433 while (*(des - 1) == '0')
434 {
435 des--;
436 length--;
437 }
438
439 if (*(des - 1) == '.')
440 {
441 des--;
442 length--;
443 }
444
445 *(des++) = 'p';
446 if (p < 0)
447 {
448 *(des++) = '-';
449 p = -p;
450 }
451 else
452 *(des++) = '+';
453
454 length += 2;
455
456 return length + eina_convert_itoa(p, des);
457}
458
459EAPI Eina_Bool
460eina_convert_atofp(const char *src, int length, Eina_F32p32 *fp)
461{
462 long long m;
463 long e;
464
465 if (!eina_convert_atod(src, length, &m, &e))
466 return EINA_FALSE;
467
468 if (!fp)
469 return EINA_TRUE;
470
471 e += 32;
472
473 if (e > 0)
474 *fp = m << e;
475 else
476 *fp = m >> -e;
477
478 return EINA_TRUE;
479}
480
481/**
482 * @}
483 */
diff --git a/libraries/eina/src/lib/eina_counter.c b/libraries/eina/src/lib/eina_counter.c
new file mode 100644
index 0000000..6ca9417
--- /dev/null
+++ b/libraries/eina/src/lib/eina_counter.c
@@ -0,0 +1,362 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24#include <stdlib.h>
25#include <string.h>
26#include <stdarg.h>
27#ifndef _WIN32
28# include <time.h>
29# include <sys/time.h>
30#else
31# define WIN32_LEAN_AND_MEAN
32# include <windows.h>
33# undef WIN32_LEAN_AND_MEAN
34#endif /* _WIN2 */
35
36#include "eina_config.h"
37#include "eina_private.h"
38#include "eina_inlist.h"
39#include "eina_error.h"
40
41/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
42#include "eina_safety_checks.h"
43#include "eina_counter.h"
44
45#ifdef HAVE_ESCAPE
46# include <Escape.h>
47#endif
48
49/*============================================================================*
50 * Local *
51 *============================================================================*/
52
53/**
54 * @cond LOCAL
55 */
56
57#ifndef _WIN32
58typedef struct timespec Eina_Nano_Time;
59#else
60typedef LARGE_INTEGER Eina_Nano_Time;
61#endif
62
63typedef struct _Eina_Clock Eina_Clock;
64
65struct _Eina_Counter
66{
67 EINA_INLIST;
68
69 Eina_Inlist *clocks;
70 const char *name;
71};
72
73struct _Eina_Clock
74{
75 EINA_INLIST;
76
77 Eina_Nano_Time start;
78 Eina_Nano_Time end;
79 int specimen;
80
81 Eina_Bool valid;
82};
83
84#ifndef _WIN32
85static inline int
86_eina_counter_time_get(Eina_Nano_Time *tp)
87{
88# if defined(CLOCK_PROCESS_CPUTIME_ID)
89 return clock_gettime(CLOCK_PROCESS_CPUTIME_ID, tp);
90# elif defined(CLOCK_PROF)
91 return clock_gettime(CLOCK_PROF, tp);
92# elif defined(CLOCK_REALTIME)
93 return clock_gettime(CLOCK_REALTIME, tp);
94# else
95 struct timeval tv;
96
97 if (gettimeofday(&tv, NULL))
98 return -1;
99
100 tp->tv_sec = tv.tv_sec;
101 tp->tv_nsec = tv.tv_usec * 1000L;
102
103 return 0;
104# endif
105}
106#else
107static const char EINA_ERROR_COUNTER_WINDOWS_STR[] =
108 "Change your OS, you moron !";
109static int EINA_ERROR_COUNTER_WINDOWS = 0;
110static LARGE_INTEGER _eina_counter_frequency;
111
112static inline int
113_eina_counter_time_get(Eina_Nano_Time *tp)
114{
115 return QueryPerformanceCounter(tp);
116}
117#endif /* _WIN2 */
118
119static char *
120_eina_counter_asiprintf(char *base, int *position, const char *format, ...)
121{
122 char *tmp, *result;
123 int size = 32;
124 int n;
125 va_list ap;
126
127 tmp = realloc(base, sizeof (char) * (*position + size));
128 if (!tmp)
129 return base;
130
131 result = tmp;
132
133 while (1)
134 {
135 va_start(ap, format);
136 n = vsnprintf(result + *position, size, format, ap);
137 va_end(ap);
138
139 if (n > -1 && n < size)
140 {
141 /* If we always have glibc > 2.2, we could just return *position += n. */
142 *position += strlen(result + *position);
143 return result;
144 }
145
146 if (n > -1)
147 size = n + 1;
148 else
149 size <<= 1;
150
151 tmp = realloc(result, sizeof (char) * (*position + size));
152 if (!tmp)
153 return result;
154
155 result = tmp;
156 }
157}
158
159/**
160 * @endcond
161 */
162
163/*============================================================================*
164 * Global *
165 *============================================================================*/
166
167/**
168 * @internal
169 * @brief Initialize the eina counter internal structure.
170 *
171 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
172 *
173 * This function shuts down the counter module set up by
174 * eina_counter_init(). It is called by eina_init().
175 *
176 * This function sets up the error module of Eina and only on Windows,
177 * it initializes the high precision timer. It also registers, only on
178 * Windows, the error #EINA_ERROR_COUNTER_WINDOWS. It is also called
179 * by eina_init(). It returns 0 on failure, otherwise it returns the
180 * number of times it has already been called.
181 *
182 * @see eina_init()
183 */
184Eina_Bool
185eina_counter_init(void)
186{
187#ifdef _WIN32
188 EINA_ERROR_COUNTER_WINDOWS = eina_error_msg_static_register(
189 EINA_ERROR_COUNTER_WINDOWS_STR);
190 if (!QueryPerformanceFrequency(&_eina_counter_frequency))
191 {
192 eina_error_set(EINA_ERROR_COUNTER_WINDOWS);
193 return EINA_FALSE;
194 }
195
196#endif /* _WIN2 */
197 return EINA_TRUE;
198}
199
200/**
201 * @internal
202 * @brief Shut down the counter module.
203 *
204 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
205 *
206 * This function shuts down the counter module set up by
207 * eina_counter_init(). It is called by eina_shutdown().
208 *
209 * @see eina_shutdown()
210 */
211Eina_Bool
212eina_counter_shutdown(void)
213{
214 return EINA_TRUE;
215}
216
217/*============================================================================*
218 * API *
219 *============================================================================*/
220
221EAPI Eina_Counter *
222eina_counter_new(const char *name)
223{
224 Eina_Counter *counter;
225 size_t length;
226
227 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
228
229 length = strlen(name) + 1;
230
231 eina_error_set(0);
232 counter = calloc(1, sizeof (Eina_Counter) + length);
233 if (!counter)
234 {
235 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
236 return NULL;
237 }
238
239 counter->name = (char *)(counter + 1);
240 memcpy((char *)counter->name, name, length);
241
242 return counter;
243}
244
245EAPI void
246eina_counter_free(Eina_Counter *counter)
247{
248 EINA_SAFETY_ON_NULL_RETURN(counter);
249
250 while (counter->clocks)
251 {
252 Eina_Clock *clk = (Eina_Clock *)counter->clocks;
253
254 counter->clocks = eina_inlist_remove(counter->clocks, counter->clocks);
255 free(clk);
256 }
257
258 free(counter);
259}
260
261EAPI void
262eina_counter_start(Eina_Counter *counter)
263{
264 Eina_Clock *clk;
265 Eina_Nano_Time tp;
266
267 EINA_SAFETY_ON_NULL_RETURN(counter);
268 if (_eina_counter_time_get(&tp) != 0)
269 return;
270
271 eina_error_set(0);
272 clk = calloc(1, sizeof (Eina_Clock));
273 if (!clk)
274 {
275 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
276 return;
277 }
278
279 counter->clocks = eina_inlist_prepend(counter->clocks, EINA_INLIST_GET(clk));
280
281 clk->valid = EINA_FALSE;
282 clk->start = tp;
283}
284
285EAPI void
286eina_counter_stop(Eina_Counter *counter, int specimen)
287{
288 Eina_Clock *clk;
289 Eina_Nano_Time tp;
290
291 EINA_SAFETY_ON_NULL_RETURN(counter);
292 if (_eina_counter_time_get(&tp) != 0)
293 return;
294
295 clk = (Eina_Clock *)counter->clocks;
296
297 if (!clk || clk->valid == EINA_TRUE)
298 return;
299
300 clk->end = tp;
301 clk->specimen = specimen;
302 clk->valid = EINA_TRUE;
303}
304
305EAPI char *
306eina_counter_dump(Eina_Counter *counter)
307{
308 Eina_Clock *clk;
309 char *result = NULL;
310 int position = 0;
311
312 EINA_SAFETY_ON_NULL_RETURN_VAL(counter, NULL);
313
314 result = _eina_counter_asiprintf(
315 result,
316 &position,
317 "# specimen\texperiment time\tstarting time\tending time\n");
318 if (!result)
319 return NULL;
320
321 EINA_INLIST_REVERSE_FOREACH(counter->clocks, clk)
322 {
323 long int start;
324 long int end;
325 long int diff;
326
327 if (clk->valid == EINA_FALSE)
328 continue;
329
330#ifndef _WIN32
331 start = clk->start.tv_sec * 1000000000 + clk->start.tv_nsec;
332 end = clk->end.tv_sec * 1000000000 + clk->end.tv_nsec;
333 diff =
334 (clk->end.tv_sec -
335 clk->start.tv_sec) * 1000000000 + clk->end.tv_nsec -
336 clk->start.tv_nsec;
337#else
338 start =
339 (long int)(((long long int)clk->start.QuadPart *
340 1000000000ll) /
341 (long long int)_eina_counter_frequency.QuadPart);
342 end =
343 (long int)(((long long int)clk->end.QuadPart *
344 1000000000LL) /
345 (long long int)_eina_counter_frequency.QuadPart);
346 diff =
347 (long int)(((long long int)(clk->end.QuadPart -
348 clk->start.QuadPart) *
349 1000000000LL) /
350 (long long int)_eina_counter_frequency.QuadPart);
351#endif /* _WIN2 */
352
353 result = _eina_counter_asiprintf(result, &position,
354 "%i\t%li\t%li\t%li\n",
355 clk->specimen,
356 diff,
357 start,
358 end);
359 }
360
361 return result;
362}
diff --git a/libraries/eina/src/lib/eina_cpu.c b/libraries/eina/src/lib/eina_cpu.c
new file mode 100644
index 0000000..8af550d
--- /dev/null
+++ b/libraries/eina/src/lib/eina_cpu.c
@@ -0,0 +1,207 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef EFL_HAVE_THREADS
24# ifdef _WIN32
25# define WIN32_LEAN_AND_MEAN
26# include <windows.h>
27# elif defined (__SUNPRO_C) || defined(__GNU__)
28# include <unistd.h>
29# elif defined (__FreeBSD__) || defined (__OpenBSD__) || \
30 defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) || \
31 (defined (__MACH__) && defined (__APPLE__))
32# include <unistd.h>
33# include <sys/param.h>
34# include <sys/sysctl.h>
35# elif defined (__linux__) || defined(__GLIBC__)
36# include <sched.h>
37# endif
38# ifdef EFL_HAVE_POSIX_THREADS
39# include <pthread.h>
40# endif
41
42# define TH_MAX 8
43#endif
44
45#include <stdio.h>
46#include <string.h>
47#include <errno.h>
48
49#include "eina_cpu.h"
50
51/*============================================================================*
52* Local *
53*============================================================================*/
54
55/* FIXME this ifdefs should be replaced */
56#if defined(__i386__) || defined(__x86_64__)
57/* We save ebx and restore it to be PIC compatible */
58static inline void _x86_cpuid(int op, int *a, int *b, int *c, int *d)
59{
60 asm volatile (
61#if defined(__x86_64__)
62 "pushq %%rbx \n\t" /* save %ebx */
63#else
64 "pushl %%ebx \n\t" /* save %ebx */
65#endif
66 "cpuid \n\t"
67 "movl %%ebx, %1 \n\t" /* save what cpuid just put in %ebx */
68#if defined(__x86_64__)
69 "popq %%rbx \n\t" /* restore the old %ebx */
70#else
71 "popl %%ebx \n\t" /* restore the old %ebx */
72#endif
73 : "=a" (*a), "=r" (*b), "=c" (*c), "=d" (*d)
74 : "a" (op)
75 : "cc");
76}
77
78static
79void _x86_simd(Eina_Cpu_Features *features)
80{
81 int a, b, c, d;
82
83 _x86_cpuid(1, &a, &b, &c, &d);
84 /*
85 * edx
86 * 18 = PN (Processor Number)
87 * 19 = CLFlush (Cache Line Flush)
88 * 23 = MMX
89 * 25 = SSE
90 * 26 = SSE2
91 * 28 = HTT (Hyper Threading)
92 * ecx
93 * 0 = SSE3
94 */
95 if ((d >> 23) & 1)
96 *features |= EINA_CPU_MMX;
97
98 if ((d >> 25) & 1)
99 *features |= EINA_CPU_SSE;
100
101 if ((d >> 26) & 1)
102 *features |= EINA_CPU_SSE2;
103
104 if (c & 1)
105 *features |= EINA_CPU_SSE3;
106}
107#endif
108
109/*============================================================================*
110* Global *
111*============================================================================*/
112
113/*============================================================================*
114* API *
115*============================================================================*/
116
117/* FIXME the features checks should be called when this function is called?
118 * or make it static by doing eina_cpu_init() and return a local var
119 */
120/**
121 *
122 * @return
123 */
124EAPI Eina_Cpu_Features eina_cpu_features_get(void)
125{
126 Eina_Cpu_Features ecf = 0;
127#if defined(__i386__) || defined(__x86_64__)
128 _x86_simd(&ecf);
129#endif
130 return ecf;
131}
132
133EAPI int eina_cpu_count(void)
134{
135#ifdef EFL_HAVE_THREADS
136
137# if defined (_WIN32)
138 SYSTEM_INFO sysinfo;
139
140 GetSystemInfo(&sysinfo);
141 return sysinfo.dwNumberOfProcessors;
142
143# elif defined (__SUNPRO_C) || defined(__GNU__)
144 /*
145 * _SC_NPROCESSORS_ONLN: number of processors that are online, that
146 is available when sysconf is called. The number
147 of cpu can change by admins.
148 * _SC_NPROCESSORS_CONF: maximum number of processors that are available
149 to the current OS instance. That number can be
150 change after a reboot.
151 * _SC_NPROCESSORS_MAX : maximum number of processors that are on the
152 motherboard.
153 */
154 return sysconf(_SC_NPROCESSORS_ONLN);
155
156# elif defined (__FreeBSD__) || defined (__OpenBSD__) || \
157 defined (__NetBSD__) || defined (__DragonFly__) || defined (__MacOSX__) || \
158 (defined (__MACH__) && defined (__APPLE__))
159
160 int mib[4];
161 int cpus;
162 size_t len = sizeof(cpus);
163
164 mib[0] = CTL_HW;
165#ifdef HW_AVAILCPU
166 mib[1] = HW_AVAILCPU;
167#else
168 mib[1] = HW_NCPU;
169#endif
170 sysctl(mib, 2, &cpus, &len, NULL, 0);
171 if (cpus < 1)
172 cpus = 1;
173
174 return cpus;
175
176# elif defined (__linux__) || defined(__GLIBC__)
177 cpu_set_t cpu;
178 int i;
179 static int cpus = 0;
180
181 if (cpus != 0)
182 return cpus;
183
184 CPU_ZERO(&cpu);
185 if (sched_getaffinity(0, sizeof(cpu), &cpu) != 0)
186 {
187 fprintf(stderr, "[Eina] could not get cpu affinity: %s\n",
188 strerror(errno));
189 return 1;
190 }
191
192 for (i = 0; i < TH_MAX; i++)
193 {
194 if (CPU_ISSET(i, &cpu))
195 cpus = i + 1;
196 else
197 break;
198 }
199 return cpus;
200
201# else
202# error "eina_cpu_count() error: Platform not supported"
203# endif
204#else
205 return 1;
206#endif
207}
diff --git a/libraries/eina/src/lib/eina_error.c b/libraries/eina/src/lib/eina_error.c
new file mode 100644
index 0000000..428c414
--- /dev/null
+++ b/libraries/eina/src/lib/eina_error.c
@@ -0,0 +1,279 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24#include <string.h>
25#include <stdlib.h>
26
27#ifdef HAVE_EVIL
28# include <Evil.h>
29#endif
30
31#include "eina_config.h"
32#include "eina_private.h"
33
34
35/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
36#include "eina_safety_checks.h"
37#include "eina_error.h"
38#include "eina_stringshare.h"
39
40/* TODO
41 * + add a wrapper for assert?
42 * + add common error numbers, messages
43 * + add a calltrace of errors, not only store the last error but a list of them
44 * and also store the function that set it
45 */
46
47/*============================================================================*
48* Local *
49*============================================================================*/
50
51/**
52 * @cond LOCAL
53 */
54
55typedef struct _Eina_Error_Message Eina_Error_Message;
56struct _Eina_Error_Message
57{
58 Eina_Bool string_allocated;
59 const char *string;
60};
61
62static Eina_Error_Message *_eina_errors = NULL;
63static size_t _eina_errors_count = 0;
64static size_t _eina_errors_allocated = 0;
65static Eina_Error _eina_last_error;
66
67static Eina_Error_Message *
68_eina_error_msg_alloc(void)
69{
70 size_t idx;
71
72 if (_eina_errors_count == _eina_errors_allocated)
73 {
74 void *tmp;
75 size_t size;
76
77 if (EINA_UNLIKELY(_eina_errors_allocated == 0))
78 size = 24;
79 else
80 size = _eina_errors_allocated + 8;
81
82 tmp = realloc(_eina_errors, sizeof(Eina_Error_Message) * size);
83 if (!tmp)
84 return NULL;
85
86 _eina_errors = tmp;
87 _eina_errors_allocated = size;
88 }
89
90 idx = _eina_errors_count;
91 _eina_errors_count++;
92 return _eina_errors + idx;
93}
94
95/**
96 * @endcond
97 */
98
99
100/*============================================================================*
101* Global *
102*============================================================================*/
103
104/**
105 * @cond LOCAL
106 */
107
108EAPI Eina_Error EINA_ERROR_OUT_OF_MEMORY = 0;
109
110static const char EINA_ERROR_OUT_OF_MEMORY_STR[] = "Out of memory";
111
112/**
113 * @endcond
114 */
115
116/**
117 * @internal
118 * @brief Initialize the error module.
119 *
120 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
121 *
122 * This function sets up the error module of Eina. It is called by
123 * eina_init().
124 *
125 * This function registers the error #EINA_ERROR_OUT_OF_MEMORY.
126 *
127 * @see eina_init()
128 */
129Eina_Bool
130eina_error_init(void)
131{
132 /* TODO register the eina's basic errors */
133 EINA_ERROR_OUT_OF_MEMORY = eina_error_msg_static_register(
134 EINA_ERROR_OUT_OF_MEMORY_STR);
135 return EINA_TRUE;
136}
137
138/**
139 * @internal
140 * @brief Shut down the error module.
141 *
142 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
143 *
144 * This function shuts down the error module set up by
145 * eina_error_init(). It is called by eina_shutdown().
146 *
147 * @see eina_shutdown()
148 */
149Eina_Bool
150eina_error_shutdown(void)
151{
152 Eina_Error_Message *eem, *eem_end;
153
154 eem = _eina_errors;
155 eem_end = eem + _eina_errors_count;
156
157 for (; eem < eem_end; eem++)
158 if (eem->string_allocated)
159 eina_stringshare_del(eem->string);
160
161 free(_eina_errors);
162 _eina_errors = NULL;
163 _eina_errors_count = 0;
164 _eina_errors_allocated = 0;
165
166 return EINA_TRUE;
167}
168
169/*============================================================================*
170* API *
171*============================================================================*/
172
173EAPI Eina_Error
174eina_error_msg_register(const char *msg)
175{
176 Eina_Error_Message *eem;
177
178 EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0);
179
180 eem = _eina_error_msg_alloc();
181 if (!eem)
182 return 0;
183
184 eem->string_allocated = EINA_TRUE;
185 eem->string = eina_stringshare_add(msg);
186 if (!eem->string)
187 {
188 _eina_errors_count--;
189 return 0;
190 }
191
192 return _eina_errors_count; /* identifier = index + 1 (== _count). */
193}
194
195EAPI Eina_Error
196eina_error_msg_static_register(const char *msg)
197{
198 Eina_Error_Message *eem;
199
200 EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0);
201
202 eem = _eina_error_msg_alloc();
203 if (!eem)
204 return 0;
205
206 eem->string_allocated = EINA_FALSE;
207 eem->string = msg;
208 return _eina_errors_count; /* identifier = index + 1 (== _count). */
209}
210
211EAPI Eina_Bool
212eina_error_msg_modify(Eina_Error error, const char *msg)
213{
214 EINA_SAFETY_ON_NULL_RETURN_VAL(msg, EINA_FALSE);
215 if (error < 1)
216 return EINA_FALSE;
217
218 if ((size_t)error > _eina_errors_count)
219 return EINA_FALSE;
220
221 if (_eina_errors[error - 1].string_allocated)
222 {
223 const char *tmp;
224
225 if (!(tmp = eina_stringshare_add(msg)))
226 return EINA_FALSE;
227
228 eina_stringshare_del(_eina_errors[error - 1].string);
229 _eina_errors[error - 1].string = tmp;
230 return EINA_TRUE;
231 }
232
233 _eina_errors[error - 1].string = msg;
234 return EINA_TRUE;
235}
236
237EAPI const char *
238eina_error_msg_get(Eina_Error error)
239{
240 if (error < 1)
241 return NULL;
242
243 if ((size_t)error > _eina_errors_count)
244 return NULL;
245
246 return _eina_errors[error - 1].string;
247}
248
249EAPI Eina_Error
250eina_error_get(void)
251{
252 return _eina_last_error;
253}
254
255EAPI void
256eina_error_set(Eina_Error err)
257{
258 _eina_last_error = err;
259}
260
261EAPI Eina_Error
262eina_error_find(const char *msg)
263{
264 size_t i;
265
266 EINA_SAFETY_ON_NULL_RETURN_VAL(msg, 0);
267
268 for (i = 0; i < _eina_errors_count; i++)
269 {
270 if (_eina_errors[i].string_allocated)
271 {
272 if (_eina_errors[i].string == msg)
273 return i + 1;
274 }
275 if (!strcmp(_eina_errors[i].string, msg))
276 return i + 1;
277 }
278 return 0;
279}
diff --git a/libraries/eina/src/lib/eina_file.c b/libraries/eina/src/lib/eina_file.c
new file mode 100644
index 0000000..84b9e78
--- /dev/null
+++ b/libraries/eina/src/lib/eina_file.c
@@ -0,0 +1,1187 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Vincent Torri
3 * Copyright (C) 2010-2011 Cedric Bail
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#ifdef HAVE_ALLOCA_H
25# include <alloca.h>
26#elif defined __GNUC__
27# define alloca __builtin_alloca
28#elif defined _AIX
29# define alloca __alloca
30#elif defined _MSC_VER
31# include <malloc.h>
32# define alloca _alloca
33#else
34# include <stddef.h>
35# ifdef __cplusplus
36extern "C"
37# endif
38void *alloca (size_t);
39#endif
40
41#include <string.h>
42#include <stddef.h>
43#include <dirent.h>
44#include <sys/types.h>
45#include <sys/stat.h>
46#include <unistd.h>
47#include <sys/mman.h>
48#include <fcntl.h>
49
50#define PATH_DELIM '/'
51
52#include "eina_config.h"
53#include "eina_private.h"
54
55/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
56#include "eina_safety_checks.h"
57#include "eina_file.h"
58#include "eina_stringshare.h"
59#include "eina_hash.h"
60#include "eina_list.h"
61#include "eina_lock.h"
62#include "eina_mmap.h"
63
64#ifdef HAVE_ESCAPE_H
65# include <Escape.h>
66#endif
67
68/*============================================================================*
69 * Local *
70 *============================================================================*/
71
72/**
73 * @cond LOCAL
74 */
75
76#ifndef EINA_LOG_COLOR_DEFAULT
77#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
78#endif
79
80#ifdef ERR
81#undef ERR
82#endif
83#define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__)
84
85#ifdef WRN
86#undef WRN
87#endif
88#define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__)
89
90#ifdef DBG
91#undef DBG
92#endif
93#define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__)
94
95#define EINA_SMALL_PAGE 4096
96# define EINA_HUGE_PAGE 16 * 1024 * 1024
97
98typedef struct _Eina_File_Iterator Eina_File_Iterator;
99typedef struct _Eina_File_Map Eina_File_Map;
100
101struct _Eina_File_Iterator
102{
103 Eina_Iterator iterator;
104
105 DIR *dirp;
106 int length;
107
108 char dir[1];
109};
110
111struct _Eina_File
112{
113 const char *filename;
114
115 Eina_Hash *map;
116 Eina_Hash *rmap;
117 void *global_map;
118
119 Eina_Lock lock;
120
121 unsigned long long length;
122 time_t mtime;
123 ino_t inode;
124#ifdef _STAT_VER_LINUX
125 unsigned long int mtime_nsec;
126#endif
127
128 int refcount;
129 int global_refcount;
130
131 int fd;
132
133 Eina_Bool shared : 1;
134 Eina_Bool delete_me : 1;
135};
136
137struct _Eina_File_Map
138{
139 void *map;
140
141 unsigned long int offset;
142 unsigned long int length;
143
144 int refcount;
145
146 Eina_Bool hugetlb : 1;
147};
148
149static Eina_Hash *_eina_file_cache = NULL;
150static Eina_Lock _eina_file_lock_cache;
151
152static int _eina_file_log_dom = -1;
153
154/*
155 * This complex piece of code is needed due to possible race condition.
156 * The code and description of the issue can be found at :
157 * http://womble.decadent.org.uk/readdir_r-advisory.html
158 */
159static long
160_eina_name_max(DIR *dirp)
161{
162 long name_max;
163
164#if defined(HAVE_FPATHCONF) && defined(HAVE_DIRFD) && defined(_PC_NAME_MAX)
165 name_max = fpathconf(dirfd(dirp), _PC_NAME_MAX);
166
167 if (name_max == -1)
168 {
169# if defined(NAME_MAX)
170 name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
171# else
172 name_max = PATH_MAX;
173# endif
174 }
175#else
176# if defined(NAME_MAX)
177 name_max = (NAME_MAX > 255) ? NAME_MAX : 255;
178# else
179# ifdef _PC_NAME_MAX
180# warning "buffer size for readdir_r cannot be determined safely, best effort, but racy"
181 name_max = pathconf(dirp, _PC_NAME_MAX);
182# else
183# error "buffer size for readdir_r cannot be determined safely"
184# endif
185# endif
186#endif
187
188 return name_max;
189}
190
191static size_t
192_eina_dirent_buffer_size(DIR *dirp)
193{
194 long name_max = _eina_name_max(dirp);
195 size_t name_end;
196
197 name_end = (size_t) offsetof(struct dirent, d_name) + name_max + 1;
198
199 return (name_end > sizeof (struct dirent) ? name_end : sizeof (struct dirent));
200}
201
202static Eina_Bool
203_eina_file_ls_iterator_next(Eina_File_Iterator *it, void **data)
204{
205 struct dirent *dp;
206 char *name;
207 size_t length;
208
209 dp = alloca(_eina_dirent_buffer_size(it->dirp));
210
211 do
212 {
213 if (readdir_r(it->dirp, dp, &dp))
214 return EINA_FALSE;
215 if (dp == NULL)
216 return EINA_FALSE;
217 }
218 while ((dp->d_name[0] == '.') &&
219 ((dp->d_name[1] == '\0') ||
220 ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0'))));
221
222#ifdef _DIRENT_HAVE_D_NAMLEN
223 length = dp->d_namlen;
224#else
225 length = strlen(dp->d_name);
226#endif
227 name = alloca(length + 2 + it->length);
228
229 memcpy(name, it->dir, it->length);
230 memcpy(name + it->length, "/", 1);
231 memcpy(name + it->length + 1, dp->d_name, length + 1);
232
233 *data = (char *)eina_stringshare_add(name);
234 return EINA_TRUE;
235}
236
237static DIR *
238_eina_file_ls_iterator_container(Eina_File_Iterator *it)
239{
240 return it->dirp;
241}
242
243static void
244_eina_file_ls_iterator_free(Eina_File_Iterator *it)
245{
246 closedir(it->dirp);
247
248 EINA_MAGIC_SET(&it->iterator, 0);
249 free(it);
250}
251
252typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator;
253struct _Eina_File_Direct_Iterator
254{
255 Eina_Iterator iterator;
256
257 DIR *dirp;
258 int length;
259
260 Eina_File_Direct_Info info;
261
262 char dir[1];
263};
264
265static Eina_Bool
266_eina_file_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
267{
268 struct dirent *dp;
269 size_t length;
270
271 dp = alloca(_eina_dirent_buffer_size(it->dirp));
272
273 do
274 {
275 if (readdir_r(it->dirp, dp, &dp))
276 return EINA_FALSE;
277 if (!dp)
278 return EINA_FALSE;
279
280#ifdef _DIRENT_HAVE_D_NAMLEN
281 length = dp->d_namlen;
282#else
283 length = strlen(dp->d_name);
284#endif
285 if (it->info.name_start + length + 1 >= EINA_PATH_MAX)
286 continue;
287 }
288 while ((dp->d_name[0] == '.') &&
289 ((dp->d_name[1] == '\0') ||
290 ((dp->d_name[1] == '.') && (dp->d_name[2] == '\0'))));
291
292 memcpy(it->info.path + it->info.name_start, dp->d_name, length);
293 it->info.name_length = length;
294 it->info.path_length = it->info.name_start + length;
295 it->info.path[it->info.path_length] = '\0';
296
297#ifdef _DIRENT_HAVE_D_TYPE
298 switch (dp->d_type)
299 {
300 case DT_FIFO:
301 it->info.type = EINA_FILE_FIFO;
302 break;
303 case DT_CHR:
304 it->info.type = EINA_FILE_CHR;
305 break;
306 case DT_DIR:
307 it->info.type = EINA_FILE_DIR;
308 break;
309 case DT_BLK:
310 it->info.type = EINA_FILE_BLK;
311 break;
312 case DT_REG:
313 it->info.type = EINA_FILE_REG;
314 break;
315 case DT_LNK:
316 it->info.type = EINA_FILE_LNK;
317 break;
318 case DT_SOCK:
319 it->info.type = EINA_FILE_SOCK;
320 break;
321 case DT_WHT:
322 it->info.type = EINA_FILE_WHT;
323 break;
324 default:
325 it->info.type = EINA_FILE_UNKNOWN;
326 break;
327 }
328#else
329 it->info.type = EINA_FILE_UNKNOWN;
330#endif
331
332 *data = &it->info;
333 return EINA_TRUE;
334}
335
336static DIR *
337_eina_file_direct_ls_iterator_container(Eina_File_Direct_Iterator *it)
338{
339 return it->dirp;
340}
341
342static void
343_eina_file_direct_ls_iterator_free(Eina_File_Direct_Iterator *it)
344{
345 closedir(it->dirp);
346
347 EINA_MAGIC_SET(&it->iterator, 0);
348 free(it);
349}
350
351static Eina_Bool
352_eina_file_stat_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
353{
354 struct stat st;
355
356 if (!_eina_file_direct_ls_iterator_next(it, data))
357 return EINA_FALSE;
358
359 if (it->info.type == EINA_FILE_UNKNOWN)
360 {
361#ifdef HAVE_FSTATAT
362 int fd;
363
364 fd = dirfd(it->dirp);
365 if (fstatat(fd, it->info.path + it->info.name_start, &st, 0))
366#else
367 if (stat(it->info.path, &st))
368#endif
369 it->info.type = EINA_FILE_UNKNOWN;
370 else
371 {
372 if (S_ISREG(st.st_mode))
373 it->info.type = EINA_FILE_REG;
374 else if (S_ISDIR(st.st_mode))
375 it->info.type = EINA_FILE_DIR;
376 else if (S_ISCHR(st.st_mode))
377 it->info.type = EINA_FILE_CHR;
378 else if (S_ISBLK(st.st_mode))
379 it->info.type = EINA_FILE_BLK;
380 else if (S_ISFIFO(st.st_mode))
381 it->info.type = EINA_FILE_FIFO;
382 else if (S_ISLNK(st.st_mode))
383 it->info.type = EINA_FILE_LNK;
384 else if (S_ISSOCK(st.st_mode))
385 it->info.type = EINA_FILE_SOCK;
386 else
387 it->info.type = EINA_FILE_UNKNOWN;
388 }
389 }
390
391 return EINA_TRUE;
392}
393
394static void
395_eina_file_real_close(Eina_File *file)
396{
397 if (file->refcount != 0) return;
398
399 eina_hash_free(file->rmap);
400 eina_hash_free(file->map);
401
402 if (file->global_map != MAP_FAILED)
403 munmap(file->global_map, file->length);
404
405 close(file->fd);
406
407 free(file);
408}
409
410static void
411_eina_file_map_close(Eina_File_Map *map)
412{
413 munmap(map->map, map->length);
414 free(map);
415}
416
417static unsigned int
418_eina_file_map_key_length(const void *key __UNUSED__)
419{
420 return sizeof (unsigned long int) * 2;
421}
422
423static int
424_eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__,
425 const unsigned long int *key2, int key2_length __UNUSED__)
426{
427 if (key1[0] - key2[0] == 0) return key1[1] - key2[1];
428 return key1[0] - key2[0];
429}
430
431static int
432_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__)
433{
434 return eina_hash_int64(&key[0], sizeof (unsigned long int))
435 ^ eina_hash_int64(&key[1], sizeof (unsigned long int));
436}
437
438#ifndef MAP_POPULATE
439static unsigned int
440_eina_file_map_populate(char *map, unsigned int size, Eina_Bool hugetlb)
441{
442 unsigned int r = 0xDEADBEEF;
443 unsigned int i;
444 unsigned int s;
445
446 s = hugetlb ? EINA_HUGE_PAGE : EINA_SMALL_PAGE;
447
448 for (i = 0; i < size; i += s)
449 r ^= map[i];
450
451 r ^= map[size];
452
453 return r;
454}
455#endif
456
457static int
458_eina_file_map_rule_apply(Eina_File_Populate rule, void *addr, unsigned long int size, Eina_Bool hugetlb)
459{
460 int tmp = 42;
461 int flag = MADV_RANDOM;
462
463 switch (rule)
464 {
465 case EINA_FILE_RANDOM: flag = MADV_RANDOM; break;
466 case EINA_FILE_SEQUENTIAL: flag = MADV_SEQUENTIAL; break;
467 case EINA_FILE_POPULATE: flag = MADV_WILLNEED; break;
468 case EINA_FILE_WILLNEED: flag = MADV_WILLNEED; break;
469 }
470
471 madvise(addr, size, flag);
472
473#ifndef MAP_POPULATE
474 if (rule == EINA_FILE_POPULATE)
475 tmp ^= _eina_file_map_populate(addr, size, hugetlb);
476#else
477 (void) hugetlb;
478#endif
479
480 return tmp;
481}
482
483static Eina_Bool
484_eina_file_timestamp_compare(Eina_File *f, struct stat *st)
485{
486 if (f->mtime != st->st_mtime) return EINA_FALSE;
487 if (f->length != (unsigned long long) st->st_size) return EINA_FALSE;
488 if (f->inode != st->st_ino) return EINA_FALSE;
489#ifdef _STAT_VER_LINUX
490# if (defined __USE_MISC && defined st_mtime)
491 if (f->mtime_nsec != (unsigned long int)st->st_mtim.tv_nsec)
492 return EINA_FALSE;
493# else
494 if (f->mtime_nsec != (unsigned long int)st->st_mtimensec)
495 return EINA_FALSE;
496# endif
497#endif
498 return EINA_TRUE;
499}
500
501static void
502slprintf(char *str, size_t size, const char *format, ...)
503{
504 va_list ap;
505
506 va_start(ap, format);
507
508 vsnprintf(str, size, format, ap);
509 str[size - 1] = 0;
510
511 va_end(ap);
512}
513
514static char*
515_eina_file_escape(const char* path, int* length)
516{
517 char *result = strdup(path ? path : "");
518 char *p = result;
519 char *q = result;
520 int len;
521
522 if (!result)
523 return NULL;
524
525 if (length) len = *length;
526 else len = strlen(result);
527
528 while ((p = strchr(p, '/')))
529 {
530 // remove double `/'
531 if (p[1] == '/')
532 {
533 memmove(p, p + 1, --len - (p - result));
534 result[len] = '\0';
535 }
536 else
537 if (p[1] == '.'
538 && p[2] == '.')
539 {
540 // remove `/../'
541 if (p[3] == '/')
542 {
543 char tmp;
544
545 len -= p + 3 - q;
546 memmove(q, p + 3, len - (q - result));
547 result[len] = '\0';
548 p = q;
549
550 /* Update q correctly. */
551 tmp = *p;
552 *p = '\0';
553 q = strrchr(result, '/');
554 if (!q) q = result;
555 *p = tmp;
556 }
557 else
558 // remove '/..$'
559 if (p[3] == '\0')
560 {
561 len -= p + 2 - q;
562 result[len] = '\0';
563 q = p;
564 ++p;
565 }
566 else
567 {
568 q = p;
569 ++p;
570 }
571 }
572 else
573 {
574 q = p;
575 ++p;
576 }
577 }
578
579 if (length)
580 *length = len;
581 return result;
582}
583
584Eina_Bool
585eina_file_init(void)
586{
587 _eina_file_log_dom = eina_log_domain_register("eina_file",
588 EINA_LOG_COLOR_DEFAULT);
589 if (_eina_file_log_dom < 0)
590 {
591 EINA_LOG_ERR("Could not register log domain: eina_file");
592 return EINA_FALSE;
593 }
594
595 _eina_file_cache = eina_hash_string_djb2_new(NULL);
596 if (!_eina_file_cache)
597 {
598 ERR("Could not create cache.");
599 eina_log_domain_unregister(_eina_file_log_dom);
600 _eina_file_log_dom = -1;
601 return EINA_FALSE;
602 }
603
604 eina_lock_new(&_eina_file_lock_cache);
605
606 return EINA_TRUE;
607}
608
609Eina_Bool
610eina_file_shutdown(void)
611{
612 if (eina_hash_population(_eina_file_cache) > 0)
613 {
614 Eina_Iterator *it;
615 const char *key;
616
617 it = eina_hash_iterator_key_new(_eina_file_cache);
618 EINA_ITERATOR_FOREACH(it, key)
619 ERR("File [%s] still open !", key);
620 eina_iterator_free(it);
621 }
622
623 eina_hash_free(_eina_file_cache);
624
625 eina_lock_free(&_eina_file_lock_cache);
626
627 eina_log_domain_unregister(_eina_file_log_dom);
628 _eina_file_log_dom = -1;
629 return EINA_TRUE;
630}
631
632/**
633 * @endcond
634 */
635
636/*============================================================================*
637 * Global *
638 *============================================================================*/
639
640/*============================================================================*
641 * API *
642 *============================================================================*/
643
644EAPI char *
645eina_file_path_sanitize(const char *path)
646{
647 char *result = NULL;
648 int len;
649
650 if (!path) return NULL;
651
652 len = strlen(path);
653
654 if (*path != '/')
655 {
656 char cwd[PATH_MAX];
657 char *tmp = NULL;
658
659 tmp = getcwd(cwd, PATH_MAX);
660 if (!tmp) return NULL;
661
662 len += strlen(cwd) + 2;
663 tmp = alloca(sizeof (char) * len);
664
665 slprintf(tmp, len, "%s/%s", cwd, path);
666
667 result = tmp;
668 }
669
670 return _eina_file_escape(result ? result : path, &len);
671}
672
673EAPI Eina_Bool
674eina_file_dir_list(const char *dir,
675 Eina_Bool recursive,
676 Eina_File_Dir_List_Cb cb,
677 void *data)
678{
679 Eina_File_Direct_Info *info;
680 Eina_Iterator *it;
681
682 EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE);
683 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE);
684 EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE);
685
686 it = eina_file_stat_ls(dir);
687 if (!it)
688 return EINA_FALSE;
689
690 EINA_ITERATOR_FOREACH(it, info)
691 {
692 cb(info->path + info->name_start, dir, data);
693
694 if (recursive == EINA_TRUE && info->type == EINA_FILE_DIR)
695 {
696 eina_file_dir_list(info->path, recursive, cb, data);
697 }
698 }
699
700 eina_iterator_free(it);
701
702 return EINA_TRUE;
703}
704
705EAPI Eina_Array *
706eina_file_split(char *path)
707{
708 Eina_Array *ea;
709 char *current;
710 size_t length;
711
712 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
713
714 ea = eina_array_new(16);
715
716 if (!ea)
717 return NULL;
718
719 for (current = strchr(path, PATH_DELIM);
720 current;
721 path = current + 1, current = strchr(path, PATH_DELIM))
722 {
723 length = current - path;
724
725 if (length <= 0)
726 continue;
727
728 eina_array_push(ea, path);
729 *current = '\0';
730 }
731
732 if (*path != '\0')
733 eina_array_push(ea, path);
734
735 return ea;
736}
737
738EAPI Eina_Iterator *
739eina_file_ls(const char *dir)
740{
741 Eina_File_Iterator *it;
742 size_t length;
743
744 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
745
746 length = strlen(dir);
747 if (length < 1)
748 return NULL;
749
750 it = calloc(1, sizeof (Eina_File_Iterator) + length);
751 if (!it)
752 return NULL;
753
754 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
755
756 it->dirp = opendir(dir);
757 if (!it->dirp)
758 {
759 free(it);
760 return NULL;
761 }
762
763 memcpy(it->dir, dir, length + 1);
764 if (dir[length - 1] != '/')
765 it->length = length;
766 else
767 it->length = length - 1;
768
769 it->iterator.version = EINA_ITERATOR_VERSION;
770 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_ls_iterator_next);
771 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
772 _eina_file_ls_iterator_container);
773 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_ls_iterator_free);
774
775 return &it->iterator;
776}
777
778EAPI Eina_Iterator *
779eina_file_direct_ls(const char *dir)
780{
781 Eina_File_Direct_Iterator *it;
782 size_t length;
783
784 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
785
786 length = strlen(dir);
787 if (length < 1)
788 return NULL;
789
790 it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length);
791 if (!it)
792 return NULL;
793
794 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
795
796 it->dirp = opendir(dir);
797 if (!it->dirp)
798 {
799 free(it);
800 return NULL;
801 }
802
803 if (length + _eina_name_max(it->dirp) + 2 >= EINA_PATH_MAX)
804 {
805 _eina_file_direct_ls_iterator_free(it);
806 return NULL;
807 }
808
809 memcpy(it->dir, dir, length + 1);
810 it->length = length;
811
812 memcpy(it->info.path, dir, length);
813 if (dir[length - 1] == '/')
814 it->info.name_start = length;
815 else
816 {
817 it->info.path[length] = '/';
818 it->info.name_start = length + 1;
819 }
820
821 it->iterator.version = EINA_ITERATOR_VERSION;
822 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_direct_ls_iterator_next);
823 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
824 _eina_file_direct_ls_iterator_container);
825 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free);
826
827 return &it->iterator;
828}
829
830EAPI Eina_Iterator *
831eina_file_stat_ls(const char *dir)
832{
833 Eina_File_Direct_Iterator *it;
834 size_t length;
835
836 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, NULL);
837
838 length = strlen(dir);
839 if (length < 1)
840 return NULL;
841
842 it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length);
843 if (!it)
844 return NULL;
845
846 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
847
848 it->dirp = opendir(dir);
849 if (!it->dirp)
850 {
851 free(it);
852 return NULL;
853 }
854
855 if (length + _eina_name_max(it->dirp) + 2 >= EINA_PATH_MAX)
856 {
857 _eina_file_direct_ls_iterator_free(it);
858 return NULL;
859 }
860
861 memcpy(it->dir, dir, length + 1);
862 it->length = length;
863
864 memcpy(it->info.path, dir, length);
865 if (dir[length - 1] == '/')
866 it->info.name_start = length;
867 else
868 {
869 it->info.path[length] = '/';
870 it->info.name_start = length + 1;
871 }
872
873 it->iterator.version = EINA_ITERATOR_VERSION;
874 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_stat_ls_iterator_next);
875 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
876 _eina_file_direct_ls_iterator_container);
877 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_direct_ls_iterator_free);
878
879 return &it->iterator;
880}
881
882EAPI Eina_File *
883eina_file_open(const char *path, Eina_Bool shared)
884{
885 Eina_File *file;
886 Eina_File *n;
887 char *filename;
888 struct stat file_stat;
889 int fd = -1;
890 int flags;
891
892 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
893
894 filename = eina_file_path_sanitize(path);
895 if (!filename) return NULL;
896
897 if (shared)
898#ifdef HAVE_SHMOPEN
899 fd = shm_open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
900#else
901 goto on_error;
902#endif
903 else
904 fd = open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
905
906 if (fd < 0) goto on_error;
907
908#ifdef HAVE_EXECVP
909 flags = fcntl(fd, F_GETFD);
910 if (flags == -1)
911 goto on_error;
912
913 flags |= FD_CLOEXEC;
914 if (fcntl(fd, F_SETFD, flags) == -1)
915 goto on_error;
916#endif
917
918 if (fstat(fd, &file_stat))
919 goto on_error;
920
921 eina_lock_take(&_eina_file_lock_cache);
922
923 file = eina_hash_find(_eina_file_cache, filename);
924 if ((file) && _eina_file_timestamp_compare(file, &file_stat))
925 {
926 file->delete_me = EINA_TRUE;
927 eina_hash_del(_eina_file_cache, file->filename, file);
928 _eina_file_real_close(file);
929 file = NULL;
930 }
931
932 if (!file)
933 {
934 n = malloc(sizeof (Eina_File) + strlen(filename) + 1);
935 if (!n)
936 {
937 eina_lock_release(&_eina_file_lock_cache);
938 goto on_error;
939 }
940
941 n->filename = (char*) (n + 1);
942 strcpy((char*) n->filename, filename);
943 n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length),
944 EINA_KEY_CMP(_eina_file_map_key_cmp),
945 EINA_KEY_HASH(_eina_file_map_key_hash),
946 EINA_FREE_CB(_eina_file_map_close),
947 3);
948 n->rmap = eina_hash_pointer_new(NULL);
949 n->global_map = MAP_FAILED;
950 n->global_refcount = 0;
951 n->length = file_stat.st_size;
952 n->mtime = file_stat.st_mtime;
953#ifdef _STAT_VER_LINUX
954# if (defined __USE_MISC && defined st_mtime)
955 n->mtime_nsec = (unsigned long int)file_stat.st_mtim.tv_nsec;
956# else
957 n->mtime_nsec = (unsigned long int)file_stat.st_mtimensec;
958# endif
959#endif
960 n->inode = file_stat.st_ino;
961 n->refcount = 0;
962 n->fd = fd;
963 n->shared = shared;
964 n->delete_me = EINA_FALSE;
965 eina_lock_new(&n->lock);
966 eina_hash_direct_add(_eina_file_cache, n->filename, n);
967 }
968 else
969 {
970 close(fd);
971 n = file;
972 }
973 eina_lock_take(&n->lock);
974 n->refcount++;
975 eina_lock_release(&n->lock);
976
977 eina_lock_release(&_eina_file_lock_cache);
978
979 free(filename);
980
981 return n;
982
983 on_error:
984 free(filename);
985 if (fd >= 0) close(fd);
986 return NULL;
987}
988
989EAPI void
990eina_file_close(Eina_File *file)
991{
992 EINA_SAFETY_ON_NULL_RETURN(file);
993
994 eina_lock_take(&file->lock);
995 file->refcount--;
996 eina_lock_release(&file->lock);
997
998 if (file->refcount != 0) return;
999 eina_lock_take(&_eina_file_lock_cache);
1000
1001 eina_hash_del(_eina_file_cache, file->filename, file);
1002 _eina_file_real_close(file);
1003
1004 eina_lock_release(&_eina_file_lock_cache);
1005}
1006
1007EAPI size_t
1008eina_file_size_get(Eina_File *file)
1009{
1010 EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0);
1011 return file->length;
1012}
1013
1014EAPI time_t
1015eina_file_mtime_get(Eina_File *file)
1016{
1017 EINA_SAFETY_ON_NULL_RETURN_VAL(file, 0);
1018 return file->mtime;
1019}
1020
1021EAPI const char *
1022eina_file_filename_get(Eina_File *file)
1023{
1024 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1025 return file->filename;
1026}
1027
1028EAPI void *
1029eina_file_map_all(Eina_File *file, Eina_File_Populate rule)
1030{
1031 int flags = MAP_SHARED;
1032 void *ret = NULL;
1033
1034 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1035
1036// bsd people will lack this feature
1037#ifdef MAP_POPULATE
1038 if (rule == EINA_FILE_POPULATE) flags |= MAP_POPULATE;
1039#endif
1040#ifdef MAP_HUGETLB
1041 if (file->length > EINA_HUGE_PAGE) flags |= MAP_HUGETLB;
1042#endif
1043
1044 eina_mmap_safety_enabled_set(EINA_TRUE);
1045 eina_lock_take(&file->lock);
1046 if (file->global_map == MAP_FAILED)
1047 file->global_map = mmap(NULL, file->length, PROT_READ, flags, file->fd, 0);
1048#ifdef MAP_HUGETLB
1049 if ((file->global_map == MAP_FAILED) && (flags & MAP_HUGETLB))
1050 {
1051 flags &= ~MAP_HUGETLB;
1052 file->global_map = mmap(NULL, file->length, PROT_READ, flags, file->fd, 0);
1053 }
1054#endif
1055
1056 if (file->global_map != MAP_FAILED)
1057 {
1058 Eina_Bool hugetlb = EINA_FALSE;
1059
1060#ifdef MAP_HUGETLB
1061 hugetlb = !!(flags & MAP_HUGETLB);
1062#endif
1063 _eina_file_map_rule_apply(rule, file->global_map, file->length, hugetlb);
1064 file->global_refcount++;
1065 ret = file->global_map;
1066 }
1067
1068 eina_lock_release(&file->lock);
1069 return ret;
1070}
1071
1072EAPI void *
1073eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
1074 unsigned long int offset, unsigned long int length)
1075{
1076 Eina_File_Map *map;
1077 unsigned long int key[2];
1078
1079 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
1080
1081 if (offset > file->length)
1082 return NULL;
1083 if (offset + length > file->length)
1084 return NULL;
1085
1086 if (offset == 0 && length == file->length)
1087 return eina_file_map_all(file, rule);
1088
1089 key[0] = offset;
1090 key[1] = length;
1091
1092 eina_mmap_safety_enabled_set(EINA_TRUE);
1093 eina_lock_take(&file->lock);
1094
1095 map = eina_hash_find(file->map, &key);
1096 if (!map)
1097 {
1098 int flags = MAP_SHARED;
1099
1100// bsd people will lack this feature
1101#ifdef MAP_POPULATE
1102 if (rule == EINA_FILE_POPULATE) flags |= MAP_POPULATE;
1103#endif
1104#ifdef MAP_HUGETLB
1105 if (length > EINA_HUGE_PAGE) flags |= MAP_HUGETLB;
1106#endif
1107
1108 map = malloc(sizeof (Eina_File_Map));
1109 if (!map) goto on_error;
1110
1111 map->map = mmap(NULL, length, PROT_READ, flags, file->fd, offset);
1112#ifdef MAP_HUGETLB
1113 if (map->map == MAP_FAILED && (flags & MAP_HUGETLB))
1114 {
1115 flags &= ~MAP_HUGETLB;
1116 map->map = mmap(NULL, length, PROT_READ, flags, file->fd, offset);
1117 }
1118
1119 map->hugetlb = !!(flags & MAP_HUGETLB);
1120#else
1121 map->hugetlb = EINA_FALSE;
1122#endif
1123 map->offset = offset;
1124 map->length = length;
1125 map->refcount = 0;
1126
1127 if (map->map == MAP_FAILED) goto on_error;
1128
1129 eina_hash_add(file->map, &key, map);
1130 eina_hash_direct_add(file->rmap, map->map, map);
1131 }
1132
1133 map->refcount++;
1134
1135 _eina_file_map_rule_apply(rule, map->map, length, map->hugetlb);
1136
1137 eina_lock_release(&file->lock);
1138
1139 return map->map;
1140
1141 on_error:
1142 free(map);
1143 eina_lock_release(&file->lock);
1144
1145 return NULL;
1146}
1147
1148EAPI void
1149eina_file_map_free(Eina_File *file, void *map)
1150{
1151 EINA_SAFETY_ON_NULL_RETURN(file);
1152
1153 eina_lock_take(&file->lock);
1154
1155 if (file->global_map == map)
1156 {
1157 file->global_refcount--;
1158
1159 if (file->global_refcount > 0) goto on_exit;
1160
1161 munmap(file->global_map, file->length);
1162 file->global_map = MAP_FAILED;
1163 }
1164 else
1165 {
1166 Eina_File_Map *em;
1167 unsigned long int key[2];
1168
1169 em = eina_hash_find(file->rmap, &map);
1170 if (!em) return ;
1171
1172 em->refcount--;
1173
1174 if (em->refcount > 0) goto on_exit;
1175
1176 key[0] = em->offset;
1177 key[1] = em->length;
1178
1179 eina_hash_del(file->rmap, &map, em);
1180 eina_hash_del(file->map, &key, em);
1181 }
1182
1183 on_exit:
1184 eina_lock_release(&file->lock);
1185}
1186
1187
diff --git a/libraries/eina/src/lib/eina_file_win32.c b/libraries/eina/src/lib/eina_file_win32.c
new file mode 100644
index 0000000..1cd8665
--- /dev/null
+++ b/libraries/eina/src/lib/eina_file_win32.c
@@ -0,0 +1,1021 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef HAVE_ALLOCA_H
24# include <alloca.h>
25#elif defined __GNUC__
26# define alloca __builtin_alloca
27#elif defined _AIX
28# define alloca __alloca
29#elif defined _MSC_VER
30# include <malloc.h>
31# define alloca _alloca
32#else
33# include <stddef.h>
34# ifdef __cplusplus
35extern "C"
36# endif
37void *alloca (size_t);
38#endif
39
40#define WIN32_LEAN_AND_MEAN
41#include <windows.h>
42#undef WIN32_LEAN_AND_MEAN
43
44//#include <Evil.h>
45
46#include "eina_config.h"
47#include "eina_private.h"
48
49/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
50#include "eina_safety_checks.h"
51#include "eina_file.h"
52#include "eina_stringshare.h"
53#include "eina_hash.h"
54#include "eina_list.h"
55
56/*============================================================================*
57 * Local *
58 *============================================================================*/
59
60/**
61 * @cond LOCAL
62 */
63
64#ifndef EINA_LOG_COLOR_DEFAULT
65#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
66#endif
67
68#ifdef ERR
69#undef ERR
70#endif
71#define ERR(...) EINA_LOG_DOM_ERR(_eina_file_log_dom, __VA_ARGS__)
72
73#ifdef WRN
74#undef WRN
75#endif
76#define WRN(...) EINA_LOG_DOM_WARN(_eina_file_log_dom, __VA_ARGS__)
77
78#ifdef DBG
79#undef DBG
80#endif
81#define DBG(...) EINA_LOG_DOM_DBG(_eina_file_log_dom, __VA_ARGS__)
82
83#ifdef MAP_FAILED
84# undef MAP_FAILED
85#endif
86#define MAP_FAILED ((void *)-1)
87
88typedef struct _Eina_File_Iterator Eina_File_Iterator;
89typedef struct _Eina_File_Direct_Iterator Eina_File_Direct_Iterator;
90typedef struct _Eina_File_Map Eina_File_Map;
91
92struct _Eina_File_Iterator
93{
94 Eina_Iterator iterator;
95
96 WIN32_FIND_DATA data;
97 HANDLE handle;
98 size_t length;
99 Eina_Bool is_last : 1;
100
101 char dir[1];
102};
103
104struct _Eina_File_Direct_Iterator
105{
106 Eina_Iterator iterator;
107
108 WIN32_FIND_DATA data;
109 HANDLE handle;
110 size_t length;
111 Eina_Bool is_last : 1;
112
113 Eina_File_Direct_Info info;
114
115 char dir[1];
116};
117
118struct _Eina_File
119{
120 const char *filename;
121
122 Eina_Hash *map;
123 Eina_Hash *rmap;
124 void *global_map;
125
126 ULONGLONG length;
127 ULONGLONG mtime;
128
129 int refcount;
130 int global_refcount;
131
132 HANDLE handle;
133 HANDLE fm;
134
135 Eina_Bool shared : 1;
136 Eina_Bool delete_me : 1;
137};
138
139struct _Eina_File_Map
140{
141 void *map;
142
143 unsigned long int offset;
144 unsigned long int length;
145
146 int refcount;
147};
148
149static Eina_Hash *_eina_file_cache = NULL;
150static Eina_List *_eina_file_cache_lru = NULL;
151static Eina_List *_eina_file_cache_delete = NULL;
152
153static int _eina_file_log_dom = -1;
154
155static void
156_eina_file_win32_backslash_change(char *dir)
157{
158 char *tmp;
159
160 tmp = dir;
161 while (*tmp)
162 {
163 if (*tmp == '/') *tmp = '\\';
164 tmp++;
165 }
166}
167
168static Eina_Bool
169_eina_file_win32_is_dir(const char *dir)
170{
171#ifdef UNICODE
172 wchar_t *wdir = NULL;
173#endif
174 DWORD attr;
175
176 /* check if it's a directory */
177#ifdef UNICODE
178 wdir = evil_char_to_wchar(dir);
179 if (!wdir)
180 return EINA_FALSE;
181
182 attr = GetFileAttributes(wdir);
183 free(wdir);
184#else
185 attr = GetFileAttributes(dir);
186#endif
187
188 if (attr == 0xFFFFFFFF)
189 return EINA_FALSE;
190
191 if (!(attr & FILE_ATTRIBUTE_DIRECTORY))
192 return EINA_FALSE;
193
194 return EINA_TRUE;
195}
196
197static char *
198_eina_file_win32_dir_new(const char *dir)
199{
200 char *new_dir;
201 size_t length;
202
203 length = strlen(dir);
204
205 new_dir = (char *)malloc(sizeof(char) * length + 5);
206 if (!new_dir)
207 return NULL;
208
209 memcpy(new_dir, dir, length);
210 memcpy(new_dir + length, "\\*.*", 5);
211 _eina_file_win32_backslash_change(new_dir);
212
213 return new_dir;
214}
215
216static HANDLE
217_eina_file_win32_first_file(const char *dir, WIN32_FIND_DATA *fd)
218{
219 HANDLE h;
220#ifdef UNICODE
221 wchar_t *wdir = NULL;
222
223 wdir = evil_char_to_wchar(dir);
224 if (!wdir)
225 return NULL;
226
227 h = FindFirstFile(wdir, fd);
228 free(wdir);
229#else
230 h = FindFirstFile(dir, fd);
231#endif
232
233 if (!h)
234 return NULL;
235
236 while ((fd->cFileName[0] == '.') &&
237 ((fd->cFileName[1] == '\0') ||
238 ((fd->cFileName[1] == '.') && (fd->cFileName[2] == '\0'))))
239 {
240 if (!FindNextFile(h, fd))
241 return NULL;
242 }
243
244 return h;
245}
246
247static Eina_Bool
248_eina_file_win32_ls_iterator_next(Eina_File_Iterator *it, void **data)
249{
250#ifdef UNICODE
251 wchar_t *old_name;
252#else
253 char *old_name;
254#endif
255 char *name;
256 char *cname;
257 size_t length;
258 Eina_Bool is_last;
259 Eina_Bool res = EINA_TRUE;
260
261 if (it->handle == INVALID_HANDLE_VALUE)
262 return EINA_FALSE;
263
264 is_last = it->is_last;
265#ifdef UNICODE
266 old_name = _wcsdup(it->data.cFileName);
267#else
268 old_name = _strdup(it->data.cFileName);
269#endif
270 if (!old_name)
271 return EINA_FALSE;
272
273 do {
274 if (!FindNextFile(it->handle, &it->data))
275 {
276 if (GetLastError() == ERROR_NO_MORE_FILES)
277 it->is_last = EINA_TRUE;
278 else
279 res = EINA_FALSE;
280 }
281 } while ((it->data.cFileName[0] == '.') &&
282 ((it->data.cFileName[1] == '\0') ||
283 ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */
284
285#ifdef UNICODE
286 cname = evil_wchar_to_char(old_name);
287 if (!cname)
288 return EINA_FALSE;
289#else
290 cname = old_name;
291#endif
292
293 length = strlen(cname);
294 name = alloca(length + 2 + it->length);
295
296 memcpy(name, it->dir, it->length);
297 memcpy(name + it->length, "\\", 1);
298 memcpy(name + it->length + 1, cname, length + 1);
299
300 *data = (char *)eina_stringshare_add(name);
301
302#ifdef UNICODE
303 free(cname);
304#endif
305 free(old_name);
306
307 if (is_last)
308 res = EINA_FALSE;
309
310 return res;
311}
312
313static HANDLE
314_eina_file_win32_ls_iterator_container(Eina_File_Iterator *it)
315{
316 return it->handle;
317}
318
319static void
320_eina_file_win32_ls_iterator_free(Eina_File_Iterator *it)
321{
322 if (it->handle != INVALID_HANDLE_VALUE)
323 FindClose(it->handle);
324
325 EINA_MAGIC_SET(&it->iterator, 0);
326 free(it);
327}
328
329static Eina_Bool
330_eina_file_win32_direct_ls_iterator_next(Eina_File_Direct_Iterator *it, void **data)
331{
332#ifdef UNICODE
333 wchar_t *old_name;
334#else
335 char *old_name;
336#endif
337 char *cname;
338 size_t length;
339 DWORD attr;
340 Eina_Bool is_last;
341 Eina_Bool res = EINA_TRUE;
342
343 if (it->handle == INVALID_HANDLE_VALUE)
344 return EINA_FALSE;
345
346 attr = it->data.dwFileAttributes;
347 is_last = it->is_last;
348#ifdef UNICODE
349 old_name = _wcsdup(it->data.cFileName);
350#else
351 old_name = _strdup(it->data.cFileName);
352#endif
353 if (!old_name)
354 return EINA_FALSE;
355
356 do {
357 if (!FindNextFile(it->handle, &it->data))
358 {
359 if (GetLastError() == ERROR_NO_MORE_FILES)
360 it->is_last = EINA_TRUE;
361 else
362 res = EINA_FALSE;
363 }
364
365#ifdef UNICODE
366 length = wcslen(old_name);
367#else
368 length = strlen(old_name);
369#endif
370 if (it->info.name_start + length + 1 >= PATH_MAX)
371 {
372 free(old_name);
373#ifdef UNICODE
374 old_name = _wcsdup(it->data.cFileName);
375#else
376 old_name = _strdup(it->data.cFileName);
377#endif
378 continue;
379 }
380
381 } while ((it->data.cFileName[0] == '.') &&
382 ((it->data.cFileName[1] == '\0') ||
383 ((it->data.cFileName[1] == '.') && (it->data.cFileName[2] == '\0')))); /* FIXME: what about UNICODE ? */
384
385#ifdef UNICODE
386 cname = evil_wchar_to_char(old_name);
387 if (!cname)
388 return EINA_FALSE;
389#else
390 cname = old_name;
391#endif
392
393 memcpy(it->info.path + it->info.name_start, cname, length);
394 it->info.name_length = length;
395 it->info.path_length = it->info.name_start + length;
396 it->info.path[it->info.path_length] = '\0';
397
398 if (attr & FILE_ATTRIBUTE_DIRECTORY)
399 it->info.type = EINA_FILE_DIR;
400 else if (attr & FILE_ATTRIBUTE_REPARSE_POINT)
401 it->info.type = EINA_FILE_LNK;
402 else if (attr & (FILE_ATTRIBUTE_ARCHIVE |
403 FILE_ATTRIBUTE_COMPRESSED |
404 FILE_ATTRIBUTE_COMPRESSED |
405 FILE_ATTRIBUTE_HIDDEN |
406 FILE_ATTRIBUTE_NORMAL |
407 FILE_ATTRIBUTE_SPARSE_FILE |
408 FILE_ATTRIBUTE_TEMPORARY))
409 it->info.type = EINA_FILE_REG;
410 else
411 it->info.type = EINA_FILE_UNKNOWN;
412
413 *data = &it->info;
414
415#ifdef UNICODE
416 free(cname);
417#endif
418
419 free(old_name);
420
421 if (is_last)
422 res = EINA_FALSE;
423
424 return res;
425}
426
427static HANDLE
428_eina_file_win32_direct_ls_iterator_container(Eina_File_Direct_Iterator *it)
429{
430 return it->handle;
431}
432
433static void
434_eina_file_win32_direct_ls_iterator_free(Eina_File_Direct_Iterator *it)
435{
436 if (it->handle != INVALID_HANDLE_VALUE)
437 FindClose(it->handle);
438
439 EINA_MAGIC_SET(&it->iterator, 0);
440 free(it);
441}
442
443static void
444_eina_file_real_close(Eina_File *file)
445{
446 eina_hash_free(file->rmap);
447 eina_hash_free(file->map);
448
449 if (file->global_map != MAP_FAILED)
450 UnmapViewOfFile(file->global_map);
451
452 CloseHandle(file->fm);
453 CloseHandle(file->handle);
454
455 eina_stringshare_del(file->filename);
456
457 free(file);
458}
459
460static void
461_eina_file_map_close(Eina_File_Map *map)
462{
463 if (map->map != MAP_FAILED)
464 UnmapViewOfFile(map->map);
465 free(map);
466}
467
468static unsigned int
469_eina_file_map_key_length(const void *key __UNUSED__)
470{
471 return sizeof (unsigned long int) * 2;
472}
473
474static int
475_eina_file_map_key_cmp(const unsigned long int *key1, int key1_length __UNUSED__,
476 const unsigned long int *key2, int key2_length __UNUSED__)
477{
478 if (key1[0] - key2[0] == 0) return key1[1] - key2[1];
479 return key1[0] - key2[0];
480}
481
482static int
483_eina_file_map_key_hash(const unsigned long int *key, int key_length __UNUSED__)
484{
485 return eina_hash_int64(&key[0], sizeof (unsigned long int))
486 ^ eina_hash_int64(&key[1], sizeof (unsigned long int));
487}
488
489Eina_Bool
490eina_file_init(void)
491{
492 _eina_file_log_dom = eina_log_domain_register("eina_file",
493 EINA_LOG_COLOR_DEFAULT);
494 if (_eina_file_log_dom < 0)
495 {
496 EINA_LOG_ERR("Could not register log domain: eina_file");
497 return EINA_FALSE;
498 }
499
500 _eina_file_cache = eina_hash_string_djb2_new(EINA_FREE_CB(_eina_file_real_close));
501 if (!_eina_file_cache)
502 {
503 ERR("Could not create cache.");
504 eina_log_domain_unregister(_eina_file_log_dom);
505 _eina_file_log_dom = -1;
506 return EINA_FALSE;
507 }
508
509 return EINA_TRUE;
510}
511
512Eina_Bool
513eina_file_shutdown(void)
514{
515 Eina_File *f;
516 Eina_List *l;
517
518 EINA_LIST_FREE(_eina_file_cache_delete, f)
519 _eina_file_real_close(f);
520
521 EINA_LIST_FOREACH(_eina_file_cache_lru, l, f)
522 eina_hash_del(_eina_file_cache, f->filename, f);
523
524 if (eina_hash_population(_eina_file_cache) > 0)
525 {
526 Eina_Iterator *it;
527 const char *key;
528
529 it = eina_hash_iterator_key_new(_eina_file_cache);
530 EINA_ITERATOR_FOREACH(it, key)
531 ERR("File [%s] still open !", key);
532 eina_iterator_free(it);
533 }
534
535 eina_hash_free(_eina_file_cache);
536
537 eina_log_domain_unregister(_eina_file_log_dom);
538 _eina_file_log_dom = -1;
539 return EINA_TRUE;
540}
541
542
543/**
544 * @endcond
545 */
546
547/*============================================================================*
548 * Global *
549 *============================================================================*/
550
551/*============================================================================*
552 * API *
553 *============================================================================*/
554
555EAPI Eina_Bool
556eina_file_dir_list(const char *dir,
557 Eina_Bool recursive,
558 Eina_File_Dir_List_Cb cb,
559 void *data)
560{
561 WIN32_FIND_DATA file;
562 HANDLE h;
563 char *new_dir;
564
565 EINA_SAFETY_ON_NULL_RETURN_VAL(cb, EINA_FALSE);
566 EINA_SAFETY_ON_NULL_RETURN_VAL(dir, EINA_FALSE);
567 EINA_SAFETY_ON_TRUE_RETURN_VAL(dir[0] == '\0', EINA_FALSE);
568
569 if (!_eina_file_win32_is_dir(dir))
570 return EINA_FALSE;
571
572 new_dir = _eina_file_win32_dir_new(dir);
573 if (!new_dir)
574 return EINA_FALSE;
575
576 h = _eina_file_win32_first_file(new_dir, &file);
577
578 if (h == INVALID_HANDLE_VALUE)
579 return EINA_FALSE;
580
581 do
582 {
583 char *filename;
584
585# ifdef UNICODE
586 filename = evil_wchar_to_char(file.cFileName);
587# else
588 filename = file.cFileName;
589# endif /* ! UNICODE */
590 if (!strcmp(filename, ".") || !strcmp(filename, ".."))
591 continue;
592
593 cb(filename, dir, data);
594
595 if (recursive == EINA_TRUE)
596 {
597 char *path;
598
599 path = alloca(strlen(dir) + strlen(filename) + 2);
600 strcpy(path, dir);
601 strcat(path, "/");
602 strcat(path, filename);
603
604 if (!(file.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
605 continue;
606
607 eina_file_dir_list(path, recursive, cb, data);
608 }
609
610# ifdef UNICODE
611 free(filename);
612# endif /* UNICODE */
613
614 } while (FindNextFile(h, &file));
615 FindClose(h);
616
617 return EINA_TRUE;
618}
619
620EAPI Eina_Array *
621eina_file_split(char *path)
622{
623 Eina_Array *ea;
624 char *current;
625 size_t length;
626
627 EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
628
629 ea = eina_array_new(16);
630
631 if (!ea)
632 return NULL;
633
634 for (current = strchr(path, '\\');
635 current;
636 path = current + 1, current = strchr(path, '\\'))
637 {
638 length = current - path;
639
640 if (length <= 0)
641 continue;
642
643 eina_array_push(ea, path);
644 *current = '\0';
645 }
646
647 if (*path != '\0')
648 eina_array_push(ea, path);
649
650 return ea;
651}
652
653EAPI Eina_Iterator *
654eina_file_ls(const char *dir)
655{
656 Eina_File_Iterator *it;
657 char *new_dir;
658 size_t length;
659
660 if (!dir || !*dir)
661 return NULL;
662
663 if (!_eina_file_win32_is_dir(dir))
664 return NULL;
665
666 length = strlen(dir);
667
668 it = calloc(1, sizeof (Eina_File_Iterator) + length);
669 if (!it)
670 return NULL;
671
672 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
673
674 new_dir = _eina_file_win32_dir_new(dir);
675 if (!new_dir)
676 goto free_it;
677
678 it->handle = _eina_file_win32_first_file(new_dir, &it->data);
679 free(new_dir);
680 if (it->handle == INVALID_HANDLE_VALUE)
681 goto free_it;
682
683 memcpy(it->dir, dir, length + 1);
684 if (dir[length - 1] != '\\')
685 it->length = length;
686 else
687 it->length = length - 1;
688 _eina_file_win32_backslash_change(it->dir);
689
690 it->iterator.version = EINA_ITERATOR_VERSION;
691 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_ls_iterator_next);
692 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_ls_iterator_container);
693 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_ls_iterator_free);
694
695 return &it->iterator;
696
697 free_it:
698 free(it);
699
700 return NULL;
701}
702
703EAPI Eina_Iterator *
704eina_file_direct_ls(const char *dir)
705{
706 Eina_File_Direct_Iterator *it;
707 char *new_dir;
708 size_t length;
709
710 if (!dir || !*dir)
711 return NULL;
712
713 length = strlen(dir);
714
715 if (length + 12 + 2 >= MAX_PATH)
716 return NULL;
717
718 it = calloc(1, sizeof(Eina_File_Direct_Iterator) + length);
719 if (!it)
720 return NULL;
721
722 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
723
724 new_dir = _eina_file_win32_dir_new(dir);
725 if (!new_dir)
726 goto free_it;
727
728 it->handle = _eina_file_win32_first_file(new_dir, &it->data);
729 free(new_dir);
730 if (it->handle == INVALID_HANDLE_VALUE)
731 goto free_it;
732
733 memcpy(it->dir, dir, length + 1);
734 it->length = length;
735 _eina_file_win32_backslash_change(it->dir);
736
737 memcpy(it->info.path, dir, length);
738 if (dir[length - 1] == '\\')
739 it->info.name_start = length;
740 else
741 {
742 it->info.path[length] = '\\';
743 it->info.name_start = length + 1;
744 }
745 _eina_file_win32_backslash_change(it->info.path);
746
747 it->iterator.version = EINA_ITERATOR_VERSION;
748 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_file_win32_direct_ls_iterator_next);
749 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_file_win32_direct_ls_iterator_container);
750 it->iterator.free = FUNC_ITERATOR_FREE(_eina_file_win32_direct_ls_iterator_free);
751
752 return &it->iterator;
753
754 free_it:
755 free(it);
756
757 return NULL;
758}
759
760EAPI Eina_Iterator *
761eina_file_stat_ls(const char *dir)
762{
763 return eina_file_direct_ls(dir);
764}
765
766EAPI Eina_File *
767eina_file_open(const char *filename, Eina_Bool shared)
768{
769 Eina_File *file;
770 Eina_File *n;
771 HANDLE handle;
772 HANDLE fm;
773 WIN32_FILE_ATTRIBUTE_DATA fad;
774 ULARGE_INTEGER length;
775 ULARGE_INTEGER mtime;
776 Eina_Bool create = EINA_FALSE;
777
778 /* FIXME: always open absolute path (need to fix filename according to current
779 directory) */
780
781 /* FIXME: how to emulate shm_open ? Just OpenFileMapping ? */
782#if 0
783 if (shared)
784 handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
785 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY,
786 NULL);
787 else
788#endif
789 handle = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ,
790 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY,
791 NULL);
792
793 if (handle == INVALID_HANDLE_VALUE)
794 return NULL;
795
796 fm = CreateFileMapping(handle, NULL, PAGE_READONLY, 0, 0, NULL);
797 if (!fm)
798 goto close_handle;
799
800 if (!GetFileAttributesEx(filename, GetFileExInfoStandard, &fad))
801 goto close_fm;
802
803 length.u.LowPart = fad.nFileSizeLow;
804 length.u.HighPart = fad.nFileSizeHigh;
805 mtime.u.LowPart = fad.ftLastWriteTime.dwLowDateTime;
806 mtime.u.HighPart = fad.ftLastWriteTime.dwHighDateTime;
807
808 file = eina_hash_find(_eina_file_cache, filename);
809 if (file &&
810 (file->mtime != mtime.QuadPart || file->length != length.QuadPart))
811 {
812 create = EINA_TRUE;
813
814 if (file->refcount == 0)
815 {
816 _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file);
817 eina_hash_del(_eina_file_cache, file->filename, file);
818
819 file = NULL;
820 }
821 else if (!file->delete_me)
822 {
823 file->delete_me = EINA_TRUE;
824 _eina_file_cache_delete = eina_list_prepend(_eina_file_cache_delete, file);
825 }
826 }
827
828 if (!file || create)
829 {
830 n = calloc(1, sizeof (Eina_File));
831 if (!n)
832 goto close_fm;
833
834 n->filename = eina_stringshare_add(filename);
835 n->map = eina_hash_new(EINA_KEY_LENGTH(_eina_file_map_key_length),
836 EINA_KEY_CMP(_eina_file_map_key_cmp),
837 EINA_KEY_HASH(_eina_file_map_key_hash),
838 EINA_FREE_CB(_eina_file_map_close),
839 3);
840 n->rmap = eina_hash_pointer_new(NULL);
841 n->global_map = MAP_FAILED;
842 n->length = length.QuadPart;
843 n->mtime = mtime.QuadPart;
844 n->refcount = 0;
845 n->handle = handle;
846 n->fm = fm;
847 n->shared = shared;
848 n->delete_me = EINA_FALSE;
849
850 eina_hash_set(_eina_file_cache, filename, n);
851 }
852 else
853 {
854 CloseHandle(fm);
855 CloseHandle(handle);
856
857 n = file;
858
859 if (n->refcount == 0)
860 _eina_file_cache_lru = eina_list_remove(_eina_file_cache_lru, n);
861 }
862
863 n->refcount++;
864
865 return n;
866
867 close_fm:
868 CloseHandle(fm);
869 close_handle:
870 CloseHandle(handle);
871
872 return NULL;
873}
874
875EAPI void
876eina_file_close(Eina_File *file)
877{
878 file->refcount--;
879
880 if (file->refcount != 0) return ;
881
882 if (file->delete_me)
883 {
884 _eina_file_cache_delete = eina_list_remove(_eina_file_cache_delete, file);
885 _eina_file_real_close(file);
886 }
887 else
888 {
889 _eina_file_cache_lru = eina_list_prepend(_eina_file_cache_lru, file);
890 }
891}
892
893EAPI size_t
894eina_file_size_get(Eina_File *file)
895{
896 return file->length;
897}
898
899EAPI time_t
900eina_file_mtime_get(Eina_File *file)
901{
902 return file->mtime;
903}
904
905EAPI const char *
906eina_file_filename_get(Eina_File *file)
907{
908 return file->filename;
909}
910
911EAPI void *
912eina_file_map_all(Eina_File *file, Eina_File_Populate rule __UNUSED__)
913{
914 if (file->global_map == MAP_FAILED)
915 {
916 void *data;
917
918 data = MapViewOfFile(file->fm, FILE_MAP_READ,
919 0, 0, file->length);
920 if (!data)
921 file->global_map = MAP_FAILED;
922 else
923 file->global_map = data;
924 }
925
926 if (file->global_map != MAP_FAILED)
927 {
928 file->global_refcount++;
929 return file->global_map;
930 }
931
932 return NULL;
933}
934
935EAPI void *
936eina_file_map_new(Eina_File *file, Eina_File_Populate rule,
937 unsigned long int offset, unsigned long int length)
938{
939 Eina_File_Map *map;
940 unsigned long int key[2];
941
942 if (offset > file->length)
943 return NULL;
944 if (offset + length > file->length)
945 return NULL;
946
947 if (offset == 0 && length == file->length)
948 return eina_file_map_all(file, rule);
949
950 key[0] = offset;
951 key[1] = length;
952
953 map = eina_hash_find(file->map, &key);
954 if (!map)
955 {
956 void *data;
957
958 map = malloc(sizeof (Eina_File_Map));
959 if (!map) return NULL;
960
961 data = MapViewOfFile(file->fm, FILE_MAP_READ,
962 offset & 0xffff0000,
963 offset & 0x0000ffff,
964 length);
965 if (!data)
966 map->map = MAP_FAILED;
967 else
968 map->map = data;
969
970 map->offset = offset;
971 map->length = length;
972 map->refcount = 0;
973
974 if (map->map == MAP_FAILED)
975 {
976 free(map);
977 return NULL;
978 }
979
980 eina_hash_add(file->map, &key, map);
981 eina_hash_direct_add(file->rmap, map->map, map);
982 }
983
984 map->refcount++;
985
986 return map->map;
987}
988
989EAPI void
990eina_file_map_free(Eina_File *file, void *map)
991{
992 if (file->global_map == map)
993 {
994 file->global_refcount--;
995
996 if (file->global_refcount > 0) return ;
997
998 /* FIXME: are we sure that file->global_map != MAP_FAILED ? */
999 if (file->global_map != MAP_FAILED)
1000 UnmapViewOfFile(file->global_map);
1001 file->global_map = MAP_FAILED;
1002 }
1003 else
1004 {
1005 Eina_File_Map *em;
1006 unsigned long int key[2];
1007
1008 em = eina_hash_find(file->rmap, &map);
1009 if (!em) return ;
1010
1011 em->refcount--;
1012
1013 if (em->refcount > 0) return ;
1014
1015 key[0] = em->offset;
1016 key[1] = em->length;
1017
1018 eina_hash_del(file->rmap, &map, em);
1019 eina_hash_del(file->map, &key, em);
1020 }
1021}
diff --git a/libraries/eina/src/lib/eina_fp.c b/libraries/eina/src/lib/eina_fp.c
new file mode 100644
index 0000000..8984b49
--- /dev/null
+++ b/libraries/eina/src/lib/eina_fp.c
@@ -0,0 +1,532 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6#include <math.h>
7
8#include "eina_types.h"
9#include "eina_fp.h"
10
11#define MAX_PREC 1025
12static const Eina_F32p32 eina_trigo[MAX_PREC] =
13{
14 0x0000000100000000, 0x00000000ffffec43, 0x00000000ffffb10b,
15 0x00000000ffff4e5a, 0x00000000fffec42e, 0x00000000fffe1287,
16 0x00000000fffd3967, 0x00000000fffc38cd, 0x00000000fffb10b9,
17 0x00000000fff9c12c,
18 0x00000000fff84a25, 0x00000000fff6aba5, 0x00000000fff4e5ac,
19 0x00000000fff2f83b, 0x00000000fff0e351, 0x00000000ffeea6ef,
20 0x00000000ffec4316, 0x00000000ffe9b7c5, 0x00000000ffe704fe,
21 0x00000000ffe42ac0,
22 0x00000000ffe1290b, 0x00000000ffddffe2, 0x00000000ffdaaf43,
23 0x00000000ffd7372f, 0x00000000ffd397a8, 0x00000000ffcfd0ad,
24 0x00000000ffcbe23f, 0x00000000ffc7cc5f, 0x00000000ffc38f0d,
25 0x00000000ffbf2a4b,
26 0x00000000ffba9e17, 0x00000000ffb5ea75, 0x00000000ffb10f63,
27 0x00000000ffac0ce3, 0x00000000ffa6e2f6, 0x00000000ffa1919c,
28 0x00000000ff9c18d6, 0x00000000ff9678a6, 0x00000000ff90b10b,
29 0x00000000ff8ac208,
30 0x00000000ff84ab9c, 0x00000000ff7e6dc8, 0x00000000ff78088f,
31 0x00000000ff717bf0, 0x00000000ff6ac7ec, 0x00000000ff63ec85,
32 0x00000000ff5ce9bc, 0x00000000ff55bf92, 0x00000000ff4e6e08,
33 0x00000000ff46f51f,
34 0x00000000ff3f54d8, 0x00000000ff378d34, 0x00000000ff2f9e35,
35 0x00000000ff2787dc, 0x00000000ff1f4a2a, 0x00000000ff16e520,
36 0x00000000ff0e58c0, 0x00000000ff05a50a, 0x00000000fefcca01,
37 0x00000000fef3c7a6,
38 0x00000000feea9df9, 0x00000000fee14cfe, 0x00000000fed7d4b3,
39 0x00000000fece351d, 0x00000000fec46e3b, 0x00000000feba800f,
40 0x00000000feb06a9c, 0x00000000fea62de1, 0x00000000fe9bc9e2,
41 0x00000000fe913e9f,
42 0x00000000fe868c1b, 0x00000000fe7bb256, 0x00000000fe70b153,
43 0x00000000fe658913, 0x00000000fe5a3998, 0x00000000fe4ec2e4,
44 0x00000000fe4324f9, 0x00000000fe375fd7, 0x00000000fe2b7382,
45 0x00000000fe1f5ffa,
46 0x00000000fe132543, 0x00000000fe06c35d, 0x00000000fdfa3a4b,
47 0x00000000fded8a0e, 0x00000000fde0b2a8, 0x00000000fdd3b41c,
48 0x00000000fdc68e6c, 0x00000000fdb94199, 0x00000000fdabcda5,
49 0x00000000fd9e3294,
50 0x00000000fd907065, 0x00000000fd82871d, 0x00000000fd7476bd,
51 0x00000000fd663f46, 0x00000000fd57e0bd, 0x00000000fd495b21,
52 0x00000000fd3aae77, 0x00000000fd2bdabf, 0x00000000fd1cdffd,
53 0x00000000fd0dbe32,
54 0x00000000fcfe7562, 0x00000000fcef058e, 0x00000000fcdf6eb8,
55 0x00000000fccfb0e4, 0x00000000fcbfcc13, 0x00000000fcafc048,
56 0x00000000fc9f8d86, 0x00000000fc8f33ce, 0x00000000fc7eb325,
57 0x00000000fc6e0b8b,
58 0x00000000fc5d3d03, 0x00000000fc4c4791, 0x00000000fc3b2b37,
59 0x00000000fc29e7f7, 0x00000000fc187dd5, 0x00000000fc06ecd2,
60 0x00000000fbf534f2, 0x00000000fbe35637, 0x00000000fbd150a3,
61 0x00000000fbbf243b,
62 0x00000000fbacd100, 0x00000000fb9a56f6, 0x00000000fb87b61f,
63 0x00000000fb74ee7e, 0x00000000fb620016, 0x00000000fb4eeaea,
64 0x00000000fb3baefd, 0x00000000fb284c52, 0x00000000fb14c2eb,
65 0x00000000fb0112cd,
66 0x00000000faed3bf9, 0x00000000fad93e73, 0x00000000fac51a3f,
67 0x00000000fab0cf5e, 0x00000000fa9c5dd5, 0x00000000fa87c5a6,
68 0x00000000fa7306d5, 0x00000000fa5e2164, 0x00000000fa491558,
69 0x00000000fa33e2b3,
70 0x00000000fa1e8978, 0x00000000fa0909ab, 0x00000000f9f36350,
71 0x00000000f9dd9668, 0x00000000f9c7a2f9, 0x00000000f9b18905,
72 0x00000000f99b488f, 0x00000000f984e19c, 0x00000000f96e542e,
73 0x00000000f957a049,
74 0x00000000f940c5f1, 0x00000000f929c528, 0x00000000f9129df3,
75 0x00000000f8fb5056, 0x00000000f8e3dc53, 0x00000000f8cc41ee,
76 0x00000000f8b4812b, 0x00000000f89c9a0e, 0x00000000f8848c9b,
77 0x00000000f86c58d4,
78 0x00000000f853febe, 0x00000000f83b7e5d, 0x00000000f822d7b4,
79 0x00000000f80a0ac7, 0x00000000f7f1179a, 0x00000000f7d7fe31,
80 0x00000000f7bebe90, 0x00000000f7a558ba, 0x00000000f78bccb3,
81 0x00000000f7721a80,
82 0x00000000f7584225, 0x00000000f73e43a5, 0x00000000f7241f04,
83 0x00000000f709d446, 0x00000000f6ef6370, 0x00000000f6d4cc85,
84 0x00000000f6ba0f8a, 0x00000000f69f2c83, 0x00000000f6842374,
85 0x00000000f668f461,
86 0x00000000f64d9f4e, 0x00000000f632243f, 0x00000000f616833a,
87 0x00000000f5fabc41, 0x00000000f5decf59, 0x00000000f5c2bc87,
88 0x00000000f5a683cf, 0x00000000f58a2535, 0x00000000f56da0be,
89 0x00000000f550f66e,
90 0x00000000f5342649, 0x00000000f5173054, 0x00000000f4fa1494,
91 0x00000000f4dcd30c, 0x00000000f4bf6bc2, 0x00000000f4a1deb9,
92 0x00000000f4842bf7, 0x00000000f4665380, 0x00000000f4485559,
93 0x00000000f42a3186,
94 0x00000000f40be80c, 0x00000000f3ed78ef, 0x00000000f3cee434,
95 0x00000000f3b029e1, 0x00000000f39149f9, 0x00000000f3724482,
96 0x00000000f3531980, 0x00000000f333c8f8, 0x00000000f31452ef,
97 0x00000000f2f4b76a,
98 0x00000000f2d4f66d, 0x00000000f2b50ffe, 0x00000000f2950421,
99 0x00000000f274d2dc, 0x00000000f2547c33, 0x00000000f234002b,
100 0x00000000f2135eca, 0x00000000f1f29814, 0x00000000f1d1ac0e,
101 0x00000000f1b09abe,
102 0x00000000f18f6429, 0x00000000f16e0853, 0x00000000f14c8742,
103 0x00000000f12ae0fb, 0x00000000f1091583, 0x00000000f0e724e0,
104 0x00000000f0c50f17, 0x00000000f0a2d42c, 0x00000000f0807426,
105 0x00000000f05def09,
106 0x00000000f03b44db, 0x00000000f01875a1, 0x00000000eff58161,
107 0x00000000efd2681f, 0x00000000efaf29e2, 0x00000000ef8bc6af,
108 0x00000000ef683e8b, 0x00000000ef44917b, 0x00000000ef20bf86,
109 0x00000000eefcc8b1,
110 0x00000000eed8ad01, 0x00000000eeb46c7b, 0x00000000ee900727,
111 0x00000000ee6b7d08, 0x00000000ee46ce25, 0x00000000ee21fa83,
112 0x00000000edfd0228, 0x00000000edd7e51a, 0x00000000edb2a35f,
113 0x00000000ed8d3cfc,
114 0x00000000ed67b1f6, 0x00000000ed420255, 0x00000000ed1c2e1d,
115 0x00000000ecf63554, 0x00000000ecd01801, 0x00000000eca9d628,
116 0x00000000ec836fd1, 0x00000000ec5ce501, 0x00000000ec3635bd,
117 0x00000000ec0f620d,
118 0x00000000ebe869f5, 0x00000000ebc14d7d, 0x00000000eb9a0ca9,
119 0x00000000eb72a780, 0x00000000eb4b1e08, 0x00000000eb237047,
120 0x00000000eafb9e43, 0x00000000ead3a803, 0x00000000eaab8d8d,
121 0x00000000ea834ee6,
122 0x00000000ea5aec15, 0x00000000ea326520, 0x00000000ea09ba0d,
123 0x00000000e9e0eae4, 0x00000000e9b7f7a9, 0x00000000e98ee063,
124 0x00000000e965a51a, 0x00000000e93c45d2, 0x00000000e912c292,
125 0x00000000e8e91b61,
126 0x00000000e8bf5046, 0x00000000e8956146, 0x00000000e86b4e68,
127 0x00000000e84117b3, 0x00000000e816bd2d, 0x00000000e7ec3edc,
128 0x00000000e7c19cc8, 0x00000000e796d6f6, 0x00000000e76bed6e,
129 0x00000000e740e036,
130 0x00000000e715af54, 0x00000000e6ea5ad0, 0x00000000e6bee2af,
131 0x00000000e69346f9, 0x00000000e66787b5, 0x00000000e63ba4e9,
132 0x00000000e60f9e9b, 0x00000000e5e374d4, 0x00000000e5b72798,
133 0x00000000e58ab6f1,
134 0x00000000e55e22e3, 0x00000000e5316b76, 0x00000000e50490b1,
135 0x00000000e4d7929c, 0x00000000e4aa713c, 0x00000000e47d2c98,
136 0x00000000e44fc4b9, 0x00000000e42239a4, 0x00000000e3f48b61,
137 0x00000000e3c6b9f7,
138 0x00000000e398c56c, 0x00000000e36aadc9, 0x00000000e33c7314,
139 0x00000000e30e1554, 0x00000000e2df9490, 0x00000000e2b0f0d0,
140 0x00000000e2822a1a, 0x00000000e2534077, 0x00000000e22433ec,
141 0x00000000e1f50482,
142 0x00000000e1c5b240, 0x00000000e1963d2d, 0x00000000e166a550,
143 0x00000000e136eab0, 0x00000000e1070d56, 0x00000000e0d70d48,
144 0x00000000e0a6ea8e, 0x00000000e076a52f, 0x00000000e0463d33,
145 0x00000000e015b2a1,
146 0x00000000dfe50580, 0x00000000dfb435d9, 0x00000000df8343b2,
147 0x00000000df522f13, 0x00000000df20f804, 0x00000000deef9e8d,
148 0x00000000debe22b5, 0x00000000de8c8483, 0x00000000de5ac3ff,
149 0x00000000de28e131,
150 0x00000000ddf6dc21, 0x00000000ddc4b4d6, 0x00000000dd926b59,
151 0x00000000dd5fffb0, 0x00000000dd2d71e3, 0x00000000dcfac1fb,
152 0x00000000dcc7f000, 0x00000000dc94fbf8, 0x00000000dc61e5ec,
153 0x00000000dc2eade4,
154 0x00000000dbfb53e8, 0x00000000dbc7d7ff, 0x00000000db943a31,
155 0x00000000db607a88, 0x00000000db2c9909, 0x00000000daf895bf,
156 0x00000000dac470af, 0x00000000da9029e3, 0x00000000da5bc163,
157 0x00000000da273737,
158 0x00000000d9f28b66, 0x00000000d9bdbdf9, 0x00000000d988cef8,
159 0x00000000d953be6b, 0x00000000d91e8c5b, 0x00000000d8e938d0,
160 0x00000000d8b3c3d1, 0x00000000d87e2d67, 0x00000000d848759b,
161 0x00000000d8129c74,
162 0x00000000d7dca1fb, 0x00000000d7a68638, 0x00000000d7704934,
163 0x00000000d739eaf7, 0x00000000d7036b89, 0x00000000d6cccaf3,
164 0x00000000d696093d, 0x00000000d65f266f, 0x00000000d6282293,
165 0x00000000d5f0fdb0,
166 0x00000000d5b9b7d0, 0x00000000d58250fa, 0x00000000d54ac937,
167 0x00000000d513208f, 0x00000000d4db570c, 0x00000000d4a36cb6,
168 0x00000000d46b6195, 0x00000000d43335b3, 0x00000000d3fae917,
169 0x00000000d3c27bcb,
170 0x00000000d389edd7, 0x00000000d3513f43, 0x00000000d318701a,
171 0x00000000d2df8063, 0x00000000d2a67027, 0x00000000d26d3f6f,
172 0x00000000d233ee43, 0x00000000d1fa7cae, 0x00000000d1c0eab7,
173 0x00000000d1873867,
174 0x00000000d14d65c8, 0x00000000d11372e1, 0x00000000d0d95fbd,
175 0x00000000d09f2c64, 0x00000000d064d8df, 0x00000000d02a6537,
176 0x00000000cfefd176, 0x00000000cfb51da3, 0x00000000cf7a49c8,
177 0x00000000cf3f55ef,
178 0x00000000cf044220, 0x00000000cec90e64, 0x00000000ce8dbac5,
179 0x00000000ce52474c, 0x00000000ce16b401, 0x00000000cddb00ef,
180 0x00000000cd9f2e1e, 0x00000000cd633b97, 0x00000000cd272964,
181 0x00000000cceaf78e,
182 0x00000000ccaea61e, 0x00000000cc72351e, 0x00000000cc35a497,
183 0x00000000cbf8f492, 0x00000000cbbc2519, 0x00000000cb7f3634,
184 0x00000000cb4227ee, 0x00000000cb04fa50, 0x00000000cac7ad63,
185 0x00000000ca8a4131,
186 0x00000000ca4cb5c3, 0x00000000ca0f0b22, 0x00000000c9d14159,
187 0x00000000c9935870, 0x00000000c9555072, 0x00000000c9172967,
188 0x00000000c8d8e35a, 0x00000000c89a7e53, 0x00000000c85bfa5e,
189 0x00000000c81d5782,
190 0x00000000c7de95cb, 0x00000000c79fb541, 0x00000000c760b5ee,
191 0x00000000c72197dc, 0x00000000c6e25b15, 0x00000000c6a2ffa3,
192 0x00000000c663858f, 0x00000000c623ece2, 0x00000000c5e435a8,
193 0x00000000c5a45fe9,
194 0x00000000c5646bb0, 0x00000000c5245906, 0x00000000c4e427f6,
195 0x00000000c4a3d888, 0x00000000c4636ac8, 0x00000000c422debf,
196 0x00000000c3e23476, 0x00000000c3a16bf9, 0x00000000c3608550,
197 0x00000000c31f8087,
198 0x00000000c2de5da6, 0x00000000c29d1cb8, 0x00000000c25bbdc8,
199 0x00000000c21a40de, 0x00000000c1d8a606, 0x00000000c196ed49,
200 0x00000000c15516b2, 0x00000000c113224a, 0x00000000c0d1101d,
201 0x00000000c08ee033,
202 0x00000000c04c9297, 0x00000000c00a2754, 0x00000000bfc79e73,
203 0x00000000bf84f800, 0x00000000bf423404, 0x00000000beff5289,
204 0x00000000bebc539a, 0x00000000be793741, 0x00000000be35fd89,
205 0x00000000bdf2a67b,
206 0x00000000bdaf3223, 0x00000000bd6ba08b, 0x00000000bd27f1bc,
207 0x00000000bce425c2, 0x00000000bca03ca7, 0x00000000bc5c3676,
208 0x00000000bc181338, 0x00000000bbd3d2f9, 0x00000000bb8f75c3,
209 0x00000000bb4afba1,
210 0x00000000bb06649c, 0x00000000bac1b0c0, 0x00000000ba7ce018,
211 0x00000000ba37f2ad, 0x00000000b9f2e88b, 0x00000000b9adc1bc,
212 0x00000000b9687e4a, 0x00000000b9231e41, 0x00000000b8dda1ac,
213 0x00000000b8980894,
214 0x00000000b8525305, 0x00000000b80c8109, 0x00000000b7c692ac,
215 0x00000000b78087f7, 0x00000000b73a60f6, 0x00000000b6f41db4,
216 0x00000000b6adbe3a, 0x00000000b6674296, 0x00000000b620aad0,
217 0x00000000b5d9f6f4,
218 0x00000000b593270e, 0x00000000b54c3b27, 0x00000000b505334a,
219 0x00000000b4be0f84, 0x00000000b476cfde, 0x00000000b42f7464,
220 0x00000000b3e7fd20, 0x00000000b3a06a1e, 0x00000000b358bb69,
221 0x00000000b310f10c,
222 0x00000000b2c90b11, 0x00000000b2810985, 0x00000000b238ec71,
223 0x00000000b1f0b3e2, 0x00000000b1a85fe2, 0x00000000b15ff07c,
224 0x00000000b11765bc, 0x00000000b0cebfad, 0x00000000b085fe5a,
225 0x00000000b03d21ce,
226 0x00000000aff42a15, 0x00000000afab1739, 0x00000000af61e946,
227 0x00000000af18a048, 0x00000000aecf3c49, 0x00000000ae85bd55,
228 0x00000000ae3c2377, 0x00000000adf26ebb, 0x00000000ada89f2c,
229 0x00000000ad5eb4d5,
230 0x00000000ad14afc2, 0x00000000acca8ffd, 0x00000000ac805594,
231 0x00000000ac360090, 0x00000000abeb90fe, 0x00000000aba106e9,
232 0x00000000ab56625d, 0x00000000ab0ba364, 0x00000000aac0ca0b,
233 0x00000000aa75d65d,
234 0x00000000aa2ac865, 0x00000000a9dfa030, 0x00000000a9945dc9,
235 0x00000000a949013a, 0x00000000a8fd8a91, 0x00000000a8b1f9d8,
236 0x00000000a8664f1c, 0x00000000a81a8a68, 0x00000000a7ceabc7,
237 0x00000000a782b345,
238 0x00000000a736a0ef, 0x00000000a6ea74cf, 0x00000000a69e2ef2,
239 0x00000000a651cf63, 0x00000000a605562f, 0x00000000a5b8c360,
240 0x00000000a56c1702, 0x00000000a51f5123, 0x00000000a4d271cc,
241 0x00000000a485790b,
242 0x00000000a43866eb, 0x00000000a3eb3b77, 0x00000000a39df6bd,
243 0x00000000a35098c7, 0x00000000a30321a2, 0x00000000a2b5915a,
244 0x00000000a267e7fa, 0x00000000a21a258e, 0x00000000a1cc4a24,
245 0x00000000a17e55c5,
246 0x00000000a1304880, 0x00000000a0e2225f, 0x00000000a093e36f,
247 0x00000000a0458bbb, 0x000000009ff71b50, 0x000000009fa8923a,
248 0x000000009f59f086, 0x000000009f0b363e, 0x000000009ebc6370,
249 0x000000009e6d7827,
250 0x000000009e1e746f, 0x000000009dcf5856, 0x000000009d8023e6,
251 0x000000009d30d72d, 0x000000009ce17236, 0x000000009c91f50e,
252 0x000000009c425fc1, 0x000000009bf2b25b, 0x000000009ba2ece8,
253 0x000000009b530f76,
254 0x000000009b031a0f, 0x000000009ab30cc1, 0x000000009a62e797,
255 0x000000009a12aa9f, 0x0000000099c255e5, 0x000000009971e974,
256 0x000000009921655a, 0x0000000098d0c9a2, 0x0000000098801659,
257 0x00000000982f4b8d,
258 0x0000000097de6948, 0x00000000978d6f97, 0x00000000973c5e88,
259 0x0000000096eb3626, 0x000000009699f67f, 0x0000000096489f9e,
260 0x0000000095f73190, 0x0000000095a5ac61, 0x000000009554101f,
261 0x0000000095025cd6,
262 0x0000000094b09292, 0x00000000945eb161, 0x00000000940cb94e,
263 0x0000000093baaa66, 0x00000000936884b6, 0x000000009316484b,
264 0x0000000092c3f531, 0x0000000092718b75, 0x00000000921f0b24,
265 0x0000000091cc744b,
266 0x000000009179c6f5, 0x0000000091270331, 0x0000000090d4290a,
267 0x000000009081388e, 0x00000000902e31c8, 0x000000008fdb14c7,
268 0x000000008f87e197, 0x000000008f349845, 0x000000008ee138dd,
269 0x000000008e8dc36c,
270 0x000000008e3a3800, 0x000000008de696a5, 0x000000008d92df68,
271 0x000000008d3f1256, 0x000000008ceb2f7c, 0x000000008c9736e7,
272 0x000000008c4328a3, 0x000000008bef04bf, 0x000000008b9acb46,
273 0x000000008b467c45,
274 0x000000008af217cb, 0x000000008a9d9de3, 0x000000008a490e9b,
275 0x0000000089f469ff, 0x00000000899fb01e, 0x00000000894ae103,
276 0x0000000088f5fcbc, 0x0000000088a10357, 0x00000000884bf4df,
277 0x0000000087f6d163,
278 0x0000000087a198f0, 0x00000000874c4b92, 0x0000000086f6e956,
279 0x0000000086a1724b, 0x00000000864be67c, 0x0000000085f645f8,
280 0x0000000085a090cc, 0x00000000854ac704, 0x0000000084f4e8ad,
281 0x00000000849ef5d7,
282 0x000000008448ee8c, 0x0000000083f2d2db, 0x00000000839ca2d1,
283 0x0000000083465e7c, 0x0000000082f005e8, 0x0000000082999922,
284 0x0000000082431839, 0x0000000081ec833a, 0x000000008195da31,
285 0x00000000813f1d2d,
286 0x0000000080e84c3a, 0x0000000080916766, 0x00000000803a6ebf,
287 0x000000007fe36251, 0x000000007f8c422b, 0x000000007f350e59,
288 0x000000007eddc6ea, 0x000000007e866bea, 0x000000007e2efd67,
289 0x000000007dd77b6f,
290 0x000000007d7fe60f, 0x000000007d283d54, 0x000000007cd0814c,
291 0x000000007c78b205, 0x000000007c20cf8c, 0x000000007bc8d9ef,
292 0x000000007b70d13b, 0x000000007b18b57e, 0x000000007ac086c5,
293 0x000000007a68451f,
294 0x000000007a0ff098, 0x0000000079b7893e, 0x00000000795f0f1f,
295 0x0000000079068248, 0x0000000078ade2c8, 0x00000000785530ab,
296 0x0000000077fc6c01, 0x0000000077a394d5, 0x00000000774aab36,
297 0x0000000076f1af32,
298 0x000000007698a0d6, 0x00000000763f8030, 0x0000000075e64d4e,
299 0x00000000758d083e, 0x000000007533b10d, 0x0000000074da47c9,
300 0x000000007480cc80, 0x0000000074273f3f, 0x0000000073cda016,
301 0x000000007373ef10,
302 0x00000000731a2c3d, 0x0000000072c057aa, 0x0000000072667164,
303 0x00000000720c797a, 0x0000000071b26ffa, 0x00000000715854f2,
304 0x0000000070fe286e, 0x0000000070a3ea7e, 0x0000000070499b30,
305 0x000000006fef3a90,
306 0x000000006f94c8ae, 0x000000006f3a4596, 0x000000006edfb157,
307 0x000000006e850c00, 0x000000006e2a559d, 0x000000006dcf8e3d,
308 0x000000006d74b5ee, 0x000000006d19ccbe, 0x000000006cbed2bb,
309 0x000000006c63c7f3,
310 0x000000006c08ac74, 0x000000006bad804c, 0x000000006b524389,
311 0x000000006af6f639, 0x000000006a9b986b, 0x000000006a402a2c,
312 0x0000000069e4ab8a, 0x0000000069891c94, 0x00000000692d7d57,
313 0x0000000068d1cde3,
314 0x0000000068760e44, 0x00000000681a3e89, 0x0000000067be5ec1,
315 0x0000000067626ef9, 0x0000000067066f40, 0x0000000066aa5fa3,
316 0x00000000664e4032, 0x0000000065f210f9, 0x000000006595d209,
317 0x000000006539836d,
318 0x0000000064dd2536, 0x000000006480b770, 0x0000000064243a2b,
319 0x0000000063c7ad75, 0x00000000636b115c, 0x00000000630e65ed,
320 0x0000000062b1ab39, 0x000000006254e14c, 0x0000000061f80835,
321 0x00000000619b2002,
322 0x00000000613e28c2, 0x0000000060e12283, 0x0000000060840d54,
323 0x000000006026e943, 0x000000005fc9b65d, 0x000000005f6c74b2,
324 0x000000005f0f2450, 0x000000005eb1c545, 0x000000005e5457a0,
325 0x000000005df6db6f,
326 0x000000005d9950c0, 0x000000005d3bb7a3, 0x000000005cde1024,
327 0x000000005c805a54, 0x000000005c22963f, 0x000000005bc4c3f6,
328 0x000000005b66e385, 0x000000005b08f4fd, 0x000000005aaaf86a,
329 0x000000005a4ceddc,
330 0x0000000059eed561, 0x000000005990af08, 0x0000000059327adf,
331 0x0000000058d438f4, 0x000000005875e957, 0x0000000058178c16,
332 0x0000000057b9213f, 0x00000000575aa8e0, 0x0000000056fc230a,
333 0x00000000569d8fc9,
334 0x00000000563eef2d, 0x0000000055e04144, 0x000000005581861d,
335 0x000000005522bdc6, 0x0000000054c3e84e, 0x00000000546505c4,
336 0x0000000054061636, 0x0000000053a719b3, 0x000000005348104a,
337 0x0000000052e8fa09,
338 0x000000005289d6ff, 0x00000000522aa73a, 0x0000000051cb6aca,
339 0x00000000516c21bc, 0x00000000510ccc20, 0x0000000050ad6a05,
340 0x00000000504dfb78, 0x000000004fee808a, 0x000000004f8ef947,
341 0x000000004f2f65c0,
342 0x000000004ecfc603, 0x000000004e701a1f, 0x000000004e106222,
343 0x000000004db09e1b, 0x000000004d50ce19, 0x000000004cf0f22b,
344 0x000000004c910a5f, 0x000000004c3116c5, 0x000000004bd1176b,
345 0x000000004b710c5f,
346 0x000000004b10f5b2, 0x000000004ab0d371, 0x000000004a50a5ab,
347 0x0000000049f06c70, 0x00000000499027cd, 0x00000000492fd7d3,
348 0x0000000048cf7c8f, 0x00000000486f1611, 0x00000000480ea467,
349 0x0000000047ae27a1,
350 0x00000000474d9fcd, 0x0000000046ed0cfa, 0x00000000468c6f37,
351 0x00000000462bc693, 0x0000000045cb131c, 0x00000000456a54e3,
352 0x0000000045098bf5, 0x0000000044a8b861, 0x000000004447da37,
353 0x0000000043e6f186,
354 0x000000004385fe5c, 0x00000000432500c8, 0x0000000042c3f8d9,
355 0x000000004262e69f, 0x000000004201ca28, 0x0000000041a0a383,
356 0x00000000413f72bf, 0x0000000040de37eb, 0x00000000407cf317,
357 0x00000000401ba450,
358 0x000000003fba4ba7, 0x000000003f58e92a, 0x000000003ef77ce8,
359 0x000000003e9606f1, 0x000000003e348752, 0x000000003dd2fe1c,
360 0x000000003d716b5e, 0x000000003d0fcf25, 0x000000003cae2982,
361 0x000000003c4c7a83,
362 0x000000003beac238, 0x000000003b8900b0, 0x000000003b2735f9,
363 0x000000003ac56223, 0x000000003a63853d, 0x000000003a019f56,
364 0x00000000399fb07d, 0x00000000393db8c1, 0x0000000038dbb831,
365 0x000000003879aedd,
366 0x0000000038179cd3, 0x0000000037b58222, 0x0000000037535edb,
367 0x0000000036f1330b, 0x00000000368efec2, 0x00000000362cc20f,
368 0x0000000035ca7d02, 0x0000000035682fa9, 0x000000003505da14,
369 0x0000000034a37c51,
370 0x0000000034411671, 0x0000000033dea881, 0x00000000337c3292,
371 0x000000003319b4b3, 0x0000000032b72ef2, 0x000000003254a15e,
372 0x0000000031f20c08, 0x00000000318f6efe, 0x00000000312cca50,
373 0x0000000030ca1e0c,
374 0x0000000030676a43, 0x000000003004af02, 0x000000002fa1ec5a,
375 0x000000002f3f2259, 0x000000002edc510f, 0x000000002e79788b,
376 0x000000002e1698dc, 0x000000002db3b212, 0x000000002d50c43c,
377 0x000000002cedcf68,
378 0x000000002c8ad3a7, 0x000000002c27d108, 0x000000002bc4c799,
379 0x000000002b61b76b, 0x000000002afea08c, 0x000000002a9b830b,
380 0x000000002a385ef9, 0x0000000029d53464, 0x000000002972035b,
381 0x00000000290ecbee,
382 0x0000000028ab8e2c, 0x0000000028484a25, 0x0000000027e4ffe7,
383 0x000000002781af83, 0x00000000271e5906, 0x0000000026bafc82,
384 0x0000000026579a04, 0x0000000025f4319d, 0x000000002590c35c,
385 0x00000000252d4f4f,
386 0x0000000024c9d587, 0x0000000024665613, 0x000000002402d101,
387 0x00000000239f4662, 0x00000000233bb644, 0x0000000022d820b8,
388 0x00000000227485cc, 0x000000002210e590, 0x0000000021ad4013,
389 0x0000000021499565,
390 0x0000000020e5e594, 0x00000000208230b1, 0x00000000201e76ca,
391 0x000000001fbab7ef, 0x000000001f56f430, 0x000000001ef32b9b,
392 0x000000001e8f5e41, 0x000000001e2b8c30, 0x000000001dc7b578,
393 0x000000001d63da29,
394 0x000000001cfffa51, 0x000000001c9c1600, 0x000000001c382d46,
395 0x000000001bd44032, 0x000000001b704ed3, 0x000000001b0c5939,
396 0x000000001aa85f74, 0x000000001a446191, 0x0000000019e05fa2,
397 0x00000000197c59b5,
398 0x0000000019184fdb, 0x0000000018b44221, 0x0000000018503098,
399 0x0000000017ec1b50, 0x0000000017880257, 0x000000001723e5bd,
400 0x0000000016bfc591, 0x00000000165ba1e4, 0x0000000015f77ac3,
401 0x0000000015935040,
402 0x00000000152f2269, 0x0000000014caf14d, 0x000000001466bcfd,
403 0x0000000014028587, 0x00000000139e4afb, 0x00000000133a0d69,
404 0x0000000012d5cce0, 0x000000001271896f, 0x00000000120d4326,
405 0x0000000011a8fa15,
406 0x000000001144ae4a, 0x0000000010e05fd6, 0x00000000107c0ec7,
407 0x000000001017bb2d, 0x000000000fb36519, 0x000000000f4f0c98,
408 0x000000000eeab1bb, 0x000000000e865491, 0x000000000e21f52a,
409 0x000000000dbd9395,
410 0x000000000d592fe1, 0x000000000cf4ca1f, 0x000000000c90625c,
411 0x000000000c2bf8aa, 0x000000000bc78d18, 0x000000000b631fb4,
412 0x000000000afeb08f, 0x000000000a9a3fb8, 0x000000000a35cd3e,
413 0x0000000009d15931,
414 0x00000000096ce3a1, 0x0000000009086c9c, 0x0000000008a3f433,
415 0x00000000083f7a75, 0x0000000007daff71, 0x0000000007768337,
416 0x00000000071205d6, 0x0000000006ad875f, 0x00000000064907df,
417 0x0000000005e48768,
418 0x0000000005800608, 0x00000000051b83cf, 0x0000000004b700cc,
419 0x0000000004527d0f, 0x0000000003edf8a7, 0x00000000038973a4,
420 0x000000000324ee16, 0x0000000002c0680b, 0x00000000025be194,
421 0x0000000001f75ac0,
422 0x000000000192d39e, 0x00000000012e4c3e, 0x0000000000c9c4af,
423 0x0000000000653d02, 0x0000000000000000
424};
425
426EAPI Eina_F32p32
427eina_f32p32_cos(Eina_F32p32 a)
428{
429 Eina_F32p32 F32P32_2PI;
430 Eina_F32p32 F32P32_PI2;
431 Eina_F32p32 F32P32_3PI2;
432 Eina_F32p32 remainder_2PI;
433 Eina_F32p32 remainder_PI;
434 Eina_F32p32 interpol;
435 Eina_F32p32 result;
436 int idx;
437 int index2;
438
439 F32P32_2PI = EINA_F32P32_PI << 1;
440 F32P32_PI2 = EINA_F32P32_PI >> 1;
441 F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2;
442
443 /* Take advantage of cosinus symetrie. */
444 a = eina_fp32p32_llabs(a);
445
446 /* Find table entry in 0 to PI / 2 */
447 remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI;
448
449 /* Find which case from 0 to 2 * PI */
450 remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI;
451
452 interpol = eina_f32p32_div(eina_f32p32_scale(remainder_PI, MAX_PREC * 2),
453 EINA_F32P32_PI);
454 idx = eina_f32p32_int_to(interpol);
455 if (idx >= MAX_PREC)
456 idx = 2 * MAX_PREC - (idx + 1);
457
458 index2 = idx + 1;
459 if (index2 == MAX_PREC)
460 index2 = idx - 1;
461
462 result = eina_f32p32_add(eina_trigo[idx],
463 eina_f32p32_mul(eina_f32p32_sub(eina_trigo[idx],
464 eina_trigo[index2]),
465 (Eina_F32p32)eina_f32p32_fracc_get(
466 interpol)));
467
468 if (0 <= remainder_2PI && remainder_2PI < F32P32_PI2)
469 return result;
470 else if (F32P32_PI2 <= remainder_2PI && remainder_2PI < EINA_F32P32_PI)
471 return -result;
472 else if (EINA_F32P32_PI <= remainder_2PI && remainder_2PI < F32P32_3PI2)
473 return -result;
474 else /* if (F32P32_3PI2 <= remainder_2PI) */
475 return result;
476}
477
478EAPI Eina_F32p32
479eina_f32p32_sin(Eina_F32p32 a)
480{
481 Eina_F32p32 F32P32_2PI;
482 Eina_F32p32 F32P32_PI2;
483 Eina_F32p32 F32P32_3PI2;
484 Eina_F32p32 remainder_2PI;
485 Eina_F32p32 remainder_PI;
486 Eina_F32p32 interpol;
487 Eina_F32p32 result;
488 int idx;
489 int index2;
490
491 F32P32_2PI = EINA_F32P32_PI << 1;
492 F32P32_PI2 = EINA_F32P32_PI >> 1;
493 F32P32_3PI2 = EINA_F32P32_PI + F32P32_PI2;
494
495 /* We only have a table for cosinus, but sin(a) = cos(pi / 2 - a) */
496 a = eina_f32p32_sub(F32P32_PI2, a);
497
498 /* Take advantage of cosinus symetrie. */
499 a = eina_fp32p32_llabs(a);
500
501 /* Find table entry in 0 to PI / 2 */
502 remainder_PI = a - (a / EINA_F32P32_PI) * EINA_F32P32_PI;
503
504 /* Find which case from 0 to 2 * PI */
505 remainder_2PI = a - (a / F32P32_2PI) * F32P32_2PI;
506
507 interpol = eina_f32p32_div(eina_f32p32_scale(remainder_PI, MAX_PREC * 2),
508 EINA_F32P32_PI);
509 idx = eina_f32p32_int_to(interpol);
510 if (idx >= MAX_PREC)
511 idx = 2 * MAX_PREC - (idx + 1);
512
513 index2 = idx + 1;
514 if (index2 == MAX_PREC)
515 index2 = idx - 1;
516
517 result = eina_f32p32_add(eina_trigo[idx],
518 eina_f32p32_mul(eina_f32p32_sub(eina_trigo[idx],
519 eina_trigo[index2]),
520 (Eina_F32p32)eina_f32p32_fracc_get(
521 interpol)));
522
523 if (0 <= remainder_2PI && remainder_2PI < F32P32_PI2)
524 return result;
525 else if (F32P32_PI2 <= remainder_2PI && remainder_2PI < EINA_F32P32_PI)
526 return -result;
527 else if (EINA_F32P32_PI <= remainder_2PI && remainder_2PI < F32P32_3PI2)
528 return -result;
529 else /* if (F32P32_3PI2 <= remainder_2PI) */
530 return result;
531}
532
diff --git a/libraries/eina/src/lib/eina_hamster.c b/libraries/eina/src/lib/eina_hamster.c
new file mode 100644
index 0000000..cebc10b
--- /dev/null
+++ b/libraries/eina/src/lib/eina_hamster.c
@@ -0,0 +1,113 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24#include <string.h>
25
26#include "eina_config.h"
27#include "eina_types.h"
28#include "eina_hamster.h"
29
30/*============================================================================*
31* Local *
32*============================================================================*/
33
34/**
35 * @cond LOCAL
36 */
37
38const char *_eina_hamster_time = __TIME__;
39const char *_eina_hamster_date = __DATE__;
40static int _eina_hamsters = -1;
41
42/**
43 * @endcond
44 */
45
46/*============================================================================*
47* Global *
48*============================================================================*/
49
50/*============================================================================*
51* API *
52*============================================================================*/
53
54EAPI int
55eina_hamster_count(void)
56{
57 if (_eina_hamsters < 0)
58 {
59 int hrs = 0, min = 0, sec = 0;
60 char mon[8] = "";
61 int monnum = 0, day = 0, year = 0;
62 int fields;
63
64 fields = sscanf(_eina_hamster_time, "%02d:%02d:%02d", &hrs, &min, &sec);
65 if (fields == 3)
66 {
67 _eina_hamsters = (hrs * 60) + min;
68 fields = sscanf(_eina_hamster_date, "%s %d %d", mon, &day, &year);
69 if (fields == 3)
70 {
71 int i;
72 const char *mons[] =
73 {
74 "Jan",
75 "Feb",
76 "Mar",
77 "Apr",
78 "May",
79 "Jun",
80 "Jul",
81 "Aug",
82 "Sep",
83 "Oct",
84 "Nov",
85 "Dec"
86 };
87
88 for (i = 0; i < 12; i++)
89 {
90 if (!strcmp(mon, mons[i]))
91 {
92 monnum = i + 1;
93 break;
94 }
95 }
96 // alloc 60 for mins, 24 for hrs
97 // alloc 1-31 (32) for days, 1-12 (13) for months
98 // use year as-is, for 31 bits (signed) this gives us up to
99 // 3584 years, which is good enough imho. - 1500 years from
100 // now or so. :)
101 _eina_hamsters +=
102 (day + (monnum * 32) + (13 * 32 * year)) * (24 * 60);
103 }
104 }
105 }
106
107 // format: [rest - year][0-12 - month][0-31 - day][0-23 - hrs][0-59 - sec]
108 return _eina_hamsters;
109}
110
111/**
112 * @}
113 */
diff --git a/libraries/eina/src/lib/eina_hash.c b/libraries/eina/src/lib/eina_hash.c
new file mode 100644
index 0000000..5df20aa
--- /dev/null
+++ b/libraries/eina/src/lib/eina_hash.c
@@ -0,0 +1,1375 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri,
3 * Vincent Torri, Jorge Luis Zapata Muga, Cedric Bail
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#include <stdio.h>
25#include <stdlib.h>
26#include <string.h>
27
28#ifdef HAVE_STDINT_H
29# include <stdint.h>
30#endif
31
32#ifdef _MSC_VER
33# include <Evil.h>
34#endif
35
36#include "eina_config.h"
37#include "eina_private.h"
38#include "eina_rbtree.h"
39#include "eina_error.h"
40
41/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
42#include "eina_safety_checks.h"
43#include "eina_hash.h"
44
45/*============================================================================*
46 * Local *
47 *============================================================================*/
48
49/**
50 * @cond LOCAL
51 */
52
53#define EINA_MAGIC_CHECK_HASH(d) \
54 do { \
55 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_HASH)) { \
56 EINA_MAGIC_FAIL(d, EINA_MAGIC_HASH); } \
57 } while(0)
58
59#define EINA_MAGIC_CHECK_HASH_ITERATOR(d, ...) \
60 do { \
61 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_HASH_ITERATOR)) \
62 { \
63 EINA_MAGIC_FAIL(d, EINA_MAGIC_HASH_ITERATOR); \
64 return __VA_ARGS__; \
65 } \
66 } while(0)
67
68#define EINA_HASH_BUCKET_SIZE 8
69#define EINA_HASH_SMALL_BUCKET_SIZE 5
70
71#define EINA_HASH_RBTREE_MASK 0xFFF
72
73typedef struct _Eina_Hash_Head Eina_Hash_Head;
74typedef struct _Eina_Hash_Element Eina_Hash_Element;
75typedef struct _Eina_Hash_Foreach_Data Eina_Hash_Foreach_Data;
76typedef struct _Eina_Iterator_Hash Eina_Iterator_Hash;
77typedef struct _Eina_Hash_Each Eina_Hash_Each;
78
79struct _Eina_Hash
80{
81 Eina_Key_Length key_length_cb;
82 Eina_Key_Cmp key_cmp_cb;
83 Eina_Key_Hash key_hash_cb;
84 Eina_Free_Cb data_free_cb;
85
86 Eina_Rbtree **buckets;
87 int size;
88 int mask;
89
90 int population;
91
92 EINA_MAGIC
93};
94
95struct _Eina_Hash_Head
96{
97 EINA_RBTREE;
98 int hash;
99
100 Eina_Rbtree *head;
101};
102
103struct _Eina_Hash_Element
104{
105 EINA_RBTREE;
106 Eina_Hash_Tuple tuple;
107 Eina_Bool begin : 1;
108};
109
110struct _Eina_Hash_Foreach_Data
111{
112 Eina_Hash_Foreach cb;
113 const void *fdata;
114};
115
116typedef void *(*Eina_Iterator_Get_Content_Callback)(Eina_Iterator_Hash *it);
117#define FUNC_ITERATOR_GET_CONTENT(Function) \
118 ((Eina_Iterator_Get_Content_Callback)Function)
119
120struct _Eina_Iterator_Hash
121{
122 Eina_Iterator iterator;
123
124 Eina_Iterator_Get_Content_Callback get_content;
125 const Eina_Hash *hash;
126
127 Eina_Iterator *current;
128 Eina_Iterator *list;
129 Eina_Hash_Head *hash_head;
130 Eina_Hash_Element *hash_element;
131 int bucket;
132
133 int index;
134
135 EINA_MAGIC
136};
137
138struct _Eina_Hash_Each
139{
140 Eina_Hash_Head *hash_head;
141 const Eina_Hash_Element *hash_element;
142 const void *data;
143};
144
145#undef get16bits
146#if (defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) \
147 || defined(_MSC_VER) || defined (__BORLANDC__) || defined (__TURBOC__)
148# define get16bits(d) (*((const uint16_t *)(d)))
149#endif
150
151#if !defined (get16bits)
152# define get16bits(d) ((((uint32_t)(((const uint8_t *)(d))[1])) << 8) \
153 + (uint32_t)(((const uint8_t *)(d))[0]))
154#endif
155
156static inline int
157_eina_hash_hash_rbtree_cmp_hash(const Eina_Hash_Head *hash_head,
158 const int *hash,
159 __UNUSED__ int key_length,
160 __UNUSED__ void *data)
161{
162 return hash_head->hash - *hash;
163}
164
165static Eina_Rbtree_Direction
166_eina_hash_hash_rbtree_cmp_node(const Eina_Hash_Head *left,
167 const Eina_Hash_Head *right,
168 __UNUSED__ void *data)
169{
170 if (left->hash - right->hash < 0)
171 return EINA_RBTREE_LEFT;
172
173 return EINA_RBTREE_RIGHT;
174}
175
176static inline int
177_eina_hash_key_rbtree_cmp_key_data(const Eina_Hash_Element *hash_element,
178 const Eina_Hash_Tuple *tuple,
179 __UNUSED__ unsigned int key_length,
180 Eina_Key_Cmp cmp)
181{
182 int result;
183
184 result = cmp(hash_element->tuple.key,
185 hash_element->tuple.key_length,
186 tuple->key,
187 tuple->key_length);
188
189 if (result == 0 && tuple->data && tuple->data != hash_element->tuple.data)
190 return 1;
191
192 return result;
193}
194
195static Eina_Rbtree_Direction
196_eina_hash_key_rbtree_cmp_node(const Eina_Hash_Element *left,
197 const Eina_Hash_Element *right,
198 Eina_Key_Cmp cmp)
199{
200 int result;
201
202 result = cmp(left->tuple.key, left->tuple.key_length,
203 right->tuple.key, right->tuple.key_length);
204
205 if (result < 0)
206 return EINA_RBTREE_LEFT;
207
208 return EINA_RBTREE_RIGHT;
209}
210
211static inline Eina_Bool
212eina_hash_add_alloc_by_hash(Eina_Hash *hash,
213 const void *key, int key_length, int alloc_length,
214 int key_hash,
215 const void *data)
216{
217 Eina_Hash_Element *new_hash_element = NULL;
218 Eina_Hash_Head *hash_head;
219 Eina_Error error = 0;
220 int hash_num;
221
222 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
223 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
224 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
225 EINA_MAGIC_CHECK_HASH(hash);
226
227 error = EINA_ERROR_OUT_OF_MEMORY;
228
229 /* Apply eina mask to hash. */
230 hash_num = key_hash & hash->mask;
231 key_hash &= EINA_HASH_RBTREE_MASK;
232
233 if (!hash->buckets)
234 {
235 hash->buckets = calloc(sizeof (Eina_Rbtree *), hash->size);
236 if (!hash->buckets) goto on_error;
237
238 hash_head = NULL;
239 }
240 else
241 /* Look up for head node. */
242 hash_head = (Eina_Hash_Head *)
243 eina_rbtree_inline_lookup(hash->buckets[hash_num],
244 &key_hash, 0,
245 EINA_RBTREE_CMP_KEY_CB(
246 _eina_hash_hash_rbtree_cmp_hash),
247 NULL);
248
249 if (!hash_head)
250 {
251 /* If not found allocate it and an element. */
252 hash_head = malloc(sizeof(Eina_Hash_Head) + sizeof(Eina_Hash_Element)
253 + alloc_length);
254 if (!hash_head)
255 goto on_error;
256
257 hash_head->hash = key_hash;
258 hash_head->head = NULL;
259
260 hash->buckets[hash_num] =
261 eina_rbtree_inline_insert(hash->buckets[hash_num],
262 EINA_RBTREE_GET(hash_head),
263 EINA_RBTREE_CMP_NODE_CB(
264 _eina_hash_hash_rbtree_cmp_node),
265 NULL);
266
267 new_hash_element = (Eina_Hash_Element *)(hash_head + 1);
268 new_hash_element->begin = EINA_TRUE;
269 }
270
271 if (!new_hash_element)
272 {
273 /*
274 Alloc a new element
275 (No more lookup as we expect to support more than one item for one key).
276 */
277 new_hash_element = malloc(sizeof (Eina_Hash_Element) + alloc_length);
278 if (!new_hash_element)
279 goto on_error;
280
281 new_hash_element->begin = EINA_FALSE;
282 }
283
284 /* Setup the element */
285 new_hash_element->tuple.key_length = key_length;
286 new_hash_element->tuple.data = (void *)data;
287 if (alloc_length > 0)
288 {
289 new_hash_element->tuple.key = (char *)(new_hash_element + 1);
290 memcpy((char *)new_hash_element->tuple.key, key, alloc_length);
291 }
292 else
293 new_hash_element->tuple.key = key;
294
295 /* add the new element to the hash. */
296 hash_head->head = eina_rbtree_inline_insert(hash_head->head,
297 EINA_RBTREE_GET(new_hash_element),
298 EINA_RBTREE_CMP_NODE_CB(
299 _eina_hash_key_rbtree_cmp_node),
300 (const void *)hash->key_cmp_cb);
301 hash->population++;
302 return EINA_TRUE;
303
304on_error:
305 eina_error_set(error);
306 return EINA_FALSE;
307}
308
309static Eina_Bool
310_eina_hash_rbtree_each(__UNUSED__ const Eina_Rbtree *container,
311 const Eina_Hash_Head *hash_head,
312 Eina_Hash_Each *data)
313{
314 Eina_Iterator *it;
315 Eina_Hash_Element *hash_element;
316 Eina_Bool found = EINA_TRUE;
317
318 it = eina_rbtree_iterator_prefix(hash_head->head);
319 EINA_ITERATOR_FOREACH(it, hash_element)
320 {
321 if (hash_element->tuple.data == data->data)
322 {
323 data->hash_element = hash_element;
324 data->hash_head = (Eina_Hash_Head *)hash_head;
325 found = EINA_FALSE;
326 break;
327 }
328 }
329
330 eina_iterator_free(it);
331 return found;
332}
333
334static inline Eina_Hash_Element *
335_eina_hash_find_by_hash(const Eina_Hash *hash,
336 Eina_Hash_Tuple *tuple,
337 int key_hash,
338 Eina_Hash_Head **hash_head)
339{
340 Eina_Hash_Element *hash_element;
341 int rb_hash = key_hash & EINA_HASH_RBTREE_MASK;
342
343 key_hash &= hash->mask;
344
345 if (!hash->buckets)
346 return NULL;
347
348 *hash_head = (Eina_Hash_Head *)
349 eina_rbtree_inline_lookup(hash->buckets[key_hash],
350 &rb_hash, 0,
351 EINA_RBTREE_CMP_KEY_CB(
352 _eina_hash_hash_rbtree_cmp_hash),
353 NULL);
354 if (!*hash_head)
355 return NULL;
356
357 hash_element = (Eina_Hash_Element *)
358 eina_rbtree_inline_lookup((*hash_head)->head,
359 tuple, 0,
360 EINA_RBTREE_CMP_KEY_CB(
361 _eina_hash_key_rbtree_cmp_key_data),
362 (const void *)hash->key_cmp_cb);
363
364 return hash_element;
365}
366
367static inline Eina_Hash_Element *
368_eina_hash_find_by_data(const Eina_Hash *hash,
369 const void *data,
370 int *key_hash,
371 Eina_Hash_Head **hash_head)
372{
373 Eina_Hash_Each each;
374 Eina_Iterator *it;
375 int hash_num;
376
377 if (!hash->buckets)
378 return NULL;
379
380 each.hash_element = NULL;
381 each.data = data;
382
383 for (hash_num = 0; hash_num < hash->size; hash_num++)
384 {
385 if (!hash->buckets[hash_num])
386 continue;
387
388 it = eina_rbtree_iterator_prefix(hash->buckets[hash_num]);
389 eina_iterator_foreach(it, EINA_EACH_CB(_eina_hash_rbtree_each), &each);
390 eina_iterator_free(it);
391
392 if (each.hash_element)
393 {
394 *key_hash = hash_num;
395 *hash_head = each.hash_head;
396 return (Eina_Hash_Element *)each.hash_element;
397 }
398 }
399
400 return NULL;
401}
402
403static void
404_eina_hash_el_free(Eina_Hash_Element *hash_element, Eina_Hash *hash)
405{
406 if (hash->data_free_cb)
407 hash->data_free_cb(hash_element->tuple.data);
408
409 if (hash_element->begin == EINA_FALSE)
410 free(hash_element);
411}
412
413static void
414_eina_hash_head_free(Eina_Hash_Head *hash_head, Eina_Hash *hash)
415{
416 eina_rbtree_delete(hash_head->head, EINA_RBTREE_FREE_CB(_eina_hash_el_free), hash);
417 free(hash_head);
418}
419
420static Eina_Bool
421_eina_hash_del_by_hash_el(Eina_Hash *hash,
422 Eina_Hash_Element *hash_element,
423 Eina_Hash_Head *hash_head,
424 int key_hash)
425{
426 hash_head->head = eina_rbtree_inline_remove(hash_head->head, EINA_RBTREE_GET(
427 hash_element), EINA_RBTREE_CMP_NODE_CB(
428 _eina_hash_key_rbtree_cmp_node),
429 (const void *)hash->key_cmp_cb);
430 _eina_hash_el_free(hash_element, hash);
431
432 if (!hash_head->head)
433 {
434 key_hash &= hash->mask;
435
436 hash->buckets[key_hash] =
437 eina_rbtree_inline_remove(hash->buckets[key_hash], EINA_RBTREE_GET(
438 hash_head),
439 EINA_RBTREE_CMP_NODE_CB(
440 _eina_hash_hash_rbtree_cmp_node), NULL);
441 free(hash_head);
442 }
443
444 hash->population--;
445 if (hash->population == 0)
446 {
447 free(hash->buckets);
448 hash->buckets = NULL;
449 }
450
451 return EINA_TRUE;
452}
453
454static Eina_Bool
455_eina_hash_del_by_key_hash(Eina_Hash *hash,
456 const void *key,
457 int key_length,
458 int key_hash,
459 const void *data)
460{
461 Eina_Hash_Element *hash_element;
462 Eina_Hash_Head *hash_head;
463 Eina_Hash_Tuple tuple;
464
465 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
466 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
467 EINA_MAGIC_CHECK_HASH(hash);
468
469 if (!hash->buckets)
470 return EINA_FALSE;
471
472 tuple.key = (void *)key;
473 tuple.key_length = key_length;
474 tuple.data = (void *)data;
475
476 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
477 if (!hash_element)
478 return EINA_FALSE;
479
480 return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash);
481}
482
483static Eina_Bool
484_eina_hash_del_by_key(Eina_Hash *hash, const void *key, const void *data)
485{
486 int key_length, key_hash;
487
488 EINA_MAGIC_CHECK_HASH(hash);
489 if (!hash)
490 return EINA_FALSE;
491
492 if (!key)
493 return EINA_FALSE;
494
495 if (!hash->buckets)
496 return EINA_FALSE;
497
498 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
499 key_hash = hash->key_hash_cb(key, key_length);
500 return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data);
501}
502
503static unsigned int
504_eina_string_key_length(const char *key)
505{
506 if (!key)
507 return 0;
508
509 return (int)strlen(key) + 1;
510}
511
512static int
513_eina_string_key_cmp(const char *key1, __UNUSED__ int key1_length,
514 const char *key2, __UNUSED__ int key2_length)
515{
516 return strcmp(key1, key2);
517}
518
519static int
520_eina_stringshared_key_cmp(const char *key1, __UNUSED__ int key1_length,
521 const char *key2, __UNUSED__ int key2_length)
522{
523 return key1 - key2;
524}
525
526static unsigned int
527_eina_int32_key_length(__UNUSED__ const uint32_t *key)
528{
529 return 4;
530}
531
532static int
533_eina_int32_key_cmp(const uint32_t *key1, __UNUSED__ int key1_length,
534 const uint32_t *key2, __UNUSED__ int key2_length)
535{
536 return *key1 - *key2;
537}
538
539static unsigned int
540_eina_int64_key_length(__UNUSED__ const uint32_t *key)
541{
542 return 8;
543}
544
545static int
546_eina_int64_key_cmp(const uint64_t *key1, __UNUSED__ int key1_length,
547 const uint64_t *key2, __UNUSED__ int key2_length)
548{
549 return *key1 - *key2;
550}
551
552static Eina_Bool
553_eina_foreach_cb(const Eina_Hash *hash,
554 Eina_Hash_Tuple *data,
555 Eina_Hash_Foreach_Data *fdata)
556{
557 return fdata->cb((Eina_Hash *)hash,
558 data->key,
559 data->data,
560 (void *)fdata->fdata);
561}
562
563static void *
564_eina_hash_iterator_data_get_content(Eina_Iterator_Hash *it)
565{
566 Eina_Hash_Element *stuff;
567
568 EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL);
569
570 stuff = it->hash_element;
571
572 if (!stuff)
573 return NULL;
574
575 return stuff->tuple.data;
576}
577
578static void *
579_eina_hash_iterator_key_get_content(Eina_Iterator_Hash *it)
580{
581 Eina_Hash_Element *stuff;
582
583 EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL);
584
585 stuff = it->hash_element;
586
587 if (!stuff)
588 return NULL;
589
590 return (void *)stuff->tuple.key;
591}
592
593static Eina_Hash_Tuple *
594_eina_hash_iterator_tuple_get_content(Eina_Iterator_Hash *it)
595{
596 Eina_Hash_Element *stuff;
597
598 EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL);
599
600 stuff = it->hash_element;
601
602 if (!stuff)
603 return NULL;
604
605 return &stuff->tuple;
606}
607
608static Eina_Bool
609_eina_hash_iterator_next(Eina_Iterator_Hash *it, void **data)
610{
611 Eina_Bool ok;
612 int bucket;
613
614 if (!(it->index < it->hash->population))
615 return EINA_FALSE;
616
617 if (!it->current)
618 {
619 ok = EINA_FALSE;
620 bucket = 0;
621 it->index = -1;
622 }
623 else
624 {
625 ok = eina_iterator_next(it->list, (void **)(void*)&it->hash_element);
626 if (!ok)
627 {
628 eina_iterator_free(it->list);
629 it->list = NULL;
630
631 ok = eina_iterator_next(it->current, (void **)(void*)&it->hash_head);
632 if (!ok)
633 {
634 eina_iterator_free(it->current);
635 it->current = NULL;
636 it->bucket++;
637 }
638 else
639 {
640 it->list = eina_rbtree_iterator_prefix(it->hash_head->head);
641 ok = eina_iterator_next(it->list, (void **)(void*)&it->hash_element);
642 }
643 }
644
645 bucket = it->bucket;
646 }
647
648 if (ok == EINA_FALSE)
649 {
650 while (bucket < it->hash->size)
651 {
652 if (it->hash->buckets[bucket])
653 {
654 it->current =
655 eina_rbtree_iterator_prefix(it->hash->buckets[bucket]);
656 ok = eina_iterator_next(it->current, (void **)(void*)&it->hash_head);
657 if (ok)
658 break;
659
660 eina_iterator_free(it->current);
661 it->current = NULL;
662 }
663
664 ++bucket;
665 }
666 if (it->list)
667 eina_iterator_free(it->list);
668
669 it->list = eina_rbtree_iterator_prefix(it->hash_head->head);
670 ok = eina_iterator_next(it->list, (void **)(void*)&it->hash_element);
671 if (bucket == it->hash->size)
672 ok = EINA_FALSE;
673 }
674
675 it->index++;
676 it->bucket = bucket;
677
678 if (ok)
679 *data = it->get_content(it);
680
681 return ok;
682}
683
684static void *
685_eina_hash_iterator_get_container(Eina_Iterator_Hash *it)
686{
687 EINA_MAGIC_CHECK_HASH_ITERATOR(it, NULL);
688 return (void *)it->hash;
689}
690
691static void
692_eina_hash_iterator_free(Eina_Iterator_Hash *it)
693{
694 EINA_MAGIC_CHECK_HASH_ITERATOR(it);
695 if (it->current)
696 eina_iterator_free(it->current);
697
698 if (it->list)
699 eina_iterator_free(it->list);
700
701 free(it);
702}
703
704/**
705 * @endcond
706 */
707
708/*============================================================================*
709 * Global *
710 *============================================================================*/
711
712/*============================================================================*
713 * API *
714 *============================================================================*/
715
716EAPI void
717eina_hash_free_cb_set(Eina_Hash *hash, Eina_Free_Cb data_free_cb)
718{
719 EINA_MAGIC_CHECK_HASH(hash);
720 EINA_SAFETY_ON_NULL_RETURN(hash);
721
722 hash->data_free_cb = data_free_cb;
723}
724
725EAPI Eina_Hash *
726eina_hash_new(Eina_Key_Length key_length_cb,
727 Eina_Key_Cmp key_cmp_cb,
728 Eina_Key_Hash key_hash_cb,
729 Eina_Free_Cb data_free_cb,
730 int buckets_power_size)
731{
732 /* FIXME: Use mempool. */
733 Eina_Hash *new;
734
735 eina_error_set(0);
736 EINA_SAFETY_ON_NULL_RETURN_VAL(key_cmp_cb, NULL);
737 EINA_SAFETY_ON_NULL_RETURN_VAL(key_hash_cb, NULL);
738 EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size <= 2, NULL);
739 EINA_SAFETY_ON_TRUE_RETURN_VAL(buckets_power_size >= 17, NULL);
740
741 new = malloc(sizeof (Eina_Hash));
742 if (!new)
743 goto on_error;
744
745 EINA_MAGIC_SET(new, EINA_MAGIC_HASH);
746
747 new->key_length_cb = key_length_cb;
748 new->key_cmp_cb = key_cmp_cb;
749 new->key_hash_cb = key_hash_cb;
750 new->data_free_cb = data_free_cb;
751 new->buckets = NULL;
752 new->population = 0;
753
754 new->size = 1 << buckets_power_size;
755 new->mask = new->size - 1;
756
757 return new;
758
759on_error:
760 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
761 return NULL;
762}
763
764EAPI Eina_Hash *
765eina_hash_string_djb2_new(Eina_Free_Cb data_free_cb)
766{
767 return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
768 EINA_KEY_CMP(_eina_string_key_cmp),
769 EINA_KEY_HASH(eina_hash_djb2),
770 data_free_cb,
771 EINA_HASH_BUCKET_SIZE);
772}
773
774EAPI Eina_Hash *
775eina_hash_string_superfast_new(Eina_Free_Cb data_free_cb)
776{
777 return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
778 EINA_KEY_CMP(_eina_string_key_cmp),
779 EINA_KEY_HASH(eina_hash_superfast),
780 data_free_cb,
781 EINA_HASH_BUCKET_SIZE);
782}
783
784EAPI Eina_Hash *
785eina_hash_string_small_new(Eina_Free_Cb data_free_cb)
786{
787 return eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
788 EINA_KEY_CMP(_eina_string_key_cmp),
789 EINA_KEY_HASH(eina_hash_superfast),
790 data_free_cb,
791 EINA_HASH_SMALL_BUCKET_SIZE);
792}
793
794EAPI Eina_Hash *
795eina_hash_int32_new(Eina_Free_Cb data_free_cb)
796{
797 return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length),
798 EINA_KEY_CMP(_eina_int32_key_cmp),
799 EINA_KEY_HASH(eina_hash_int32),
800 data_free_cb,
801 EINA_HASH_BUCKET_SIZE);
802}
803
804EAPI Eina_Hash *
805eina_hash_int64_new(Eina_Free_Cb data_free_cb)
806{
807 return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length),
808 EINA_KEY_CMP(_eina_int64_key_cmp),
809 EINA_KEY_HASH(eina_hash_int64),
810 data_free_cb,
811 EINA_HASH_BUCKET_SIZE);
812}
813
814EAPI Eina_Hash *
815eina_hash_pointer_new(Eina_Free_Cb data_free_cb)
816{
817#ifdef __LP64__
818 return eina_hash_new(EINA_KEY_LENGTH(_eina_int64_key_length),
819 EINA_KEY_CMP(_eina_int64_key_cmp),
820 EINA_KEY_HASH(eina_hash_int64),
821 data_free_cb,
822 EINA_HASH_BUCKET_SIZE);
823#else
824 return eina_hash_new(EINA_KEY_LENGTH(_eina_int32_key_length),
825 EINA_KEY_CMP(_eina_int32_key_cmp),
826 EINA_KEY_HASH(eina_hash_int32),
827 data_free_cb,
828 EINA_HASH_BUCKET_SIZE);
829#endif
830}
831
832EAPI Eina_Hash *
833eina_hash_stringshared_new(Eina_Free_Cb data_free_cb)
834{
835 return eina_hash_new(NULL,
836 EINA_KEY_CMP(_eina_stringshared_key_cmp),
837 EINA_KEY_HASH(eina_hash_superfast),
838 data_free_cb,
839 EINA_HASH_BUCKET_SIZE);
840}
841
842EAPI int
843eina_hash_population(const Eina_Hash *hash)
844{
845 if (!hash)
846 return 0;
847
848 EINA_MAGIC_CHECK_HASH(hash);
849 return hash->population;
850}
851
852EAPI void
853eina_hash_free(Eina_Hash *hash)
854{
855 int i;
856
857 EINA_MAGIC_CHECK_HASH(hash);
858 EINA_SAFETY_ON_NULL_RETURN(hash);
859
860 if (hash->buckets)
861 {
862 for (i = 0; i < hash->size; i++)
863 eina_rbtree_delete(hash->buckets[i], EINA_RBTREE_FREE_CB(_eina_hash_head_free), hash);
864 free(hash->buckets);
865 }
866 free(hash);
867}
868
869EAPI void
870eina_hash_free_buckets(Eina_Hash *hash)
871{
872 int i;
873
874 EINA_MAGIC_CHECK_HASH(hash);
875 EINA_SAFETY_ON_NULL_RETURN(hash);
876
877 if (hash->buckets)
878 {
879 for (i = 0; i < hash->size; i++)
880 eina_rbtree_delete(hash->buckets[i],
881 EINA_RBTREE_FREE_CB(_eina_hash_head_free), hash);
882 free(hash->buckets);
883 hash->buckets = NULL;
884 hash->population = 0;
885 }
886}
887
888EAPI Eina_Bool
889eina_hash_add_by_hash(Eina_Hash *hash,
890 const void *key,
891 int key_length,
892 int key_hash,
893 const void *data)
894{
895 return eina_hash_add_alloc_by_hash(hash,
896 key,
897 key_length,
898 key_length,
899 key_hash,
900 data);
901}
902
903EAPI Eina_Bool
904eina_hash_direct_add_by_hash(Eina_Hash *hash,
905 const void *key,
906 int key_length,
907 int key_hash,
908 const void *data)
909{
910 return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data);
911}
912
913EAPI Eina_Bool
914eina_hash_add(Eina_Hash *hash, const void *key, const void *data)
915{
916 unsigned int key_length;
917 int key_hash;
918
919 EINA_MAGIC_CHECK_HASH(hash);
920 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
921 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE);
922 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
923 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
924
925 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
926 key_hash = hash->key_hash_cb(key, key_length);
927
928 return eina_hash_add_alloc_by_hash(hash, key, key_length, key_length, key_hash, data);
929}
930
931EAPI Eina_Bool
932eina_hash_direct_add(Eina_Hash *hash, const void *key, const void *data)
933{
934 int key_length;
935 int key_hash;
936
937 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
938 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE);
939 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
940 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
941 EINA_MAGIC_CHECK_HASH(hash);
942
943 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
944 key_hash = hash->key_hash_cb(key, key_length);
945
946 return eina_hash_add_alloc_by_hash(hash, key, key_length, 0, key_hash, data);
947}
948
949EAPI Eina_Bool
950eina_hash_del_by_key_hash(Eina_Hash *hash,
951 const void *key,
952 int key_length,
953 int key_hash)
954{
955 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
956 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
957
958 return _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, NULL);
959}
960
961EAPI Eina_Bool
962eina_hash_del_by_key(Eina_Hash *hash, const void *key)
963{
964 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
965 EINA_SAFETY_ON_NULL_RETURN_VAL(key, EINA_FALSE);
966
967 return _eina_hash_del_by_key(hash, key, NULL);
968}
969
970EAPI Eina_Bool
971eina_hash_del_by_data(Eina_Hash *hash, const void *data)
972{
973 Eina_Hash_Element *hash_element;
974 Eina_Hash_Head *hash_head;
975 int key_hash;
976
977 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
978 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
979 EINA_MAGIC_CHECK_HASH(hash);
980
981 hash_element = _eina_hash_find_by_data(hash, data, &key_hash, &hash_head);
982 if (!hash_element)
983 goto error;
984
985 if (hash_element->tuple.data != data)
986 goto error;
987
988 return _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash);
989
990error:
991 return EINA_FALSE;
992}
993
994EAPI Eina_Bool
995eina_hash_del_by_hash(Eina_Hash *hash,
996 const void *key,
997 int key_length,
998 int key_hash,
999 const void *data)
1000{
1001 Eina_Bool ret;
1002
1003 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
1004 EINA_MAGIC_CHECK_HASH(hash);
1005
1006 if (key)
1007 ret = _eina_hash_del_by_key_hash(hash, key, key_length, key_hash, data);
1008 else
1009 ret = eina_hash_del_by_data(hash, data);
1010
1011 return ret;
1012}
1013
1014EAPI Eina_Bool
1015eina_hash_del(Eina_Hash *hash, const void *key, const void *data)
1016{
1017 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
1018 EINA_MAGIC_CHECK_HASH(hash);
1019
1020 if (!key)
1021 return eina_hash_del_by_data(hash, data);
1022
1023 return _eina_hash_del_by_key(hash, key, data);
1024}
1025
1026EAPI void *
1027eina_hash_find_by_hash(const Eina_Hash *hash,
1028 const void *key,
1029 int key_length,
1030 int key_hash)
1031{
1032 Eina_Hash_Head *hash_head;
1033 Eina_Hash_Element *hash_element;
1034 Eina_Hash_Tuple tuple;
1035
1036 if (!hash)
1037 return NULL;
1038
1039 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1040 EINA_MAGIC_CHECK_HASH(hash);
1041
1042 tuple.key = key;
1043 tuple.key_length = key_length;
1044 tuple.data = NULL;
1045
1046 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
1047 if (hash_element)
1048 return hash_element->tuple.data;
1049
1050 return NULL;
1051}
1052
1053EAPI void *
1054eina_hash_find(const Eina_Hash *hash, const void *key)
1055{
1056 int key_length;
1057 int hash_num;
1058
1059 if (!hash)
1060 return NULL;
1061
1062 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL);
1063 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1064 EINA_MAGIC_CHECK_HASH(hash);
1065
1066 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
1067 hash_num = hash->key_hash_cb(key, key_length);
1068
1069 return eina_hash_find_by_hash(hash, key, key_length, hash_num);
1070}
1071
1072EAPI void *
1073eina_hash_modify_by_hash(Eina_Hash *hash,
1074 const void *key,
1075 int key_length,
1076 int key_hash,
1077 const void *data)
1078{
1079 Eina_Hash_Head *hash_head;
1080 Eina_Hash_Element *hash_element;
1081 void *old_data = NULL;
1082 Eina_Hash_Tuple tuple;
1083
1084 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1085 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1086 EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
1087 EINA_MAGIC_CHECK_HASH(hash);
1088
1089 tuple.key = key;
1090 tuple.key_length = key_length;
1091 tuple.data = NULL;
1092
1093 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
1094 if (hash_element)
1095 {
1096 old_data = hash_element->tuple.data;
1097 hash_element->tuple.data = (void *)data;
1098 }
1099
1100 return old_data;
1101}
1102
1103EAPI void *
1104eina_hash_set(Eina_Hash *hash, const void *key, const void *data)
1105{
1106 Eina_Hash_Tuple tuple;
1107 Eina_Hash_Head *hash_head;
1108 Eina_Hash_Element *hash_element;
1109 int key_length;
1110 int key_hash;
1111
1112 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1113 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL);
1114 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1115 EINA_MAGIC_CHECK_HASH(hash);
1116
1117 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
1118 key_hash = hash->key_hash_cb(key, key_length);
1119
1120 tuple.key = key;
1121 tuple.key_length = key_length;
1122 tuple.data = NULL;
1123
1124 hash_element = _eina_hash_find_by_hash(hash, &tuple, key_hash, &hash_head);
1125 if (hash_element)
1126 {
1127 void *old_data = NULL;
1128
1129 old_data = hash_element->tuple.data;
1130
1131 if (data)
1132 {
1133 hash_element->tuple.data = (void *)data;
1134 }
1135 else
1136 {
1137 _eina_hash_del_by_hash_el(hash, hash_element, hash_head, key_hash);
1138 }
1139
1140 return old_data;
1141 }
1142
1143 if (!data) return NULL;
1144
1145 eina_hash_add_alloc_by_hash(hash,
1146 key,
1147 key_length,
1148 key_length,
1149 key_hash,
1150 data);
1151 return NULL;
1152}
1153EAPI void *
1154eina_hash_modify(Eina_Hash *hash, const void *key, const void *data)
1155{
1156 int key_length;
1157 int hash_num;
1158
1159 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1160 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, NULL);
1161 EINA_SAFETY_ON_NULL_RETURN_VAL(key, NULL);
1162 EINA_SAFETY_ON_NULL_RETURN_VAL(data, NULL);
1163 EINA_MAGIC_CHECK_HASH(hash);
1164
1165 key_length = hash->key_length_cb ? hash->key_length_cb(key) : 0;
1166 hash_num = hash->key_hash_cb(key, key_length);
1167
1168 return eina_hash_modify_by_hash(hash, key, key_length, hash_num, data);
1169}
1170
1171EAPI Eina_Bool
1172eina_hash_move(Eina_Hash *hash, const void *old_key, const void *new_key)
1173{
1174 Eina_Free_Cb hash_free_cb;
1175 const void *data;
1176 Eina_Bool result = EINA_FALSE;
1177
1178 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, EINA_FALSE);
1179 EINA_SAFETY_ON_NULL_RETURN_VAL(hash->key_hash_cb, EINA_FALSE);
1180 EINA_SAFETY_ON_NULL_RETURN_VAL(old_key, EINA_FALSE);
1181 EINA_SAFETY_ON_NULL_RETURN_VAL(new_key, EINA_FALSE);
1182 EINA_MAGIC_CHECK_HASH(hash);
1183
1184 data = eina_hash_find(hash, old_key);
1185 if (!data) goto error;
1186
1187 hash_free_cb = hash->data_free_cb;
1188 hash->data_free_cb = NULL;
1189
1190 eina_hash_del(hash, old_key, data);
1191 result = eina_hash_add(hash, new_key, data);
1192
1193 hash->data_free_cb = hash_free_cb;
1194
1195error:
1196 return result;
1197}
1198
1199/*============================================================================*
1200* Iterator *
1201*============================================================================*/
1202
1203EAPI void
1204eina_hash_foreach(const Eina_Hash *hash,
1205 Eina_Hash_Foreach func,
1206 const void *fdata)
1207{
1208 Eina_Iterator *it;
1209 Eina_Hash_Foreach_Data foreach;
1210
1211 EINA_MAGIC_CHECK_HASH(hash);
1212 EINA_SAFETY_ON_NULL_RETURN(hash);
1213 EINA_SAFETY_ON_NULL_RETURN(func);
1214
1215 foreach.cb = func;
1216 foreach.fdata = fdata;
1217
1218 it = eina_hash_iterator_tuple_new(hash);
1219 if (!it)
1220 return;
1221 eina_iterator_foreach(it, EINA_EACH_CB(_eina_foreach_cb), &foreach);
1222
1223 eina_iterator_free(it);
1224}
1225
1226EAPI Eina_Iterator *
1227eina_hash_iterator_data_new(const Eina_Hash *hash)
1228{
1229 Eina_Iterator_Hash *it;
1230
1231 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1232 EINA_MAGIC_CHECK_HASH(hash);
1233
1234 eina_error_set(0);
1235 it = calloc(1, sizeof (Eina_Iterator_Hash));
1236 if (!it)
1237 {
1238 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1239 return NULL;
1240 }
1241
1242 it->hash = hash;
1243 it->get_content = FUNC_ITERATOR_GET_CONTENT(_eina_hash_iterator_data_get_content);
1244
1245 it->iterator.version = EINA_ITERATOR_VERSION;
1246 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
1247 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1248 _eina_hash_iterator_get_container);
1249 it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
1250
1251 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1252 EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR);
1253
1254 return &it->iterator;
1255}
1256
1257EAPI Eina_Iterator *
1258eina_hash_iterator_key_new(const Eina_Hash *hash)
1259{
1260 Eina_Iterator_Hash *it;
1261
1262 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1263 EINA_MAGIC_CHECK_HASH(hash);
1264
1265 eina_error_set(0);
1266 it = calloc(1, sizeof (Eina_Iterator_Hash));
1267 if (!it)
1268 {
1269 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1270 return NULL;
1271 }
1272
1273 it->hash = hash;
1274 it->get_content = FUNC_ITERATOR_GET_CONTENT(
1275 _eina_hash_iterator_key_get_content);
1276
1277 it->iterator.version = EINA_ITERATOR_VERSION;
1278 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
1279 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1280 _eina_hash_iterator_get_container);
1281 it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
1282
1283 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1284 EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR);
1285
1286 return &it->iterator;
1287}
1288
1289EAPI Eina_Iterator *
1290eina_hash_iterator_tuple_new(const Eina_Hash *hash)
1291{
1292 Eina_Iterator_Hash *it;
1293
1294 EINA_SAFETY_ON_NULL_RETURN_VAL(hash, NULL);
1295 EINA_MAGIC_CHECK_HASH(hash);
1296
1297 eina_error_set(0);
1298 it = calloc(1, sizeof (Eina_Iterator_Hash));
1299 if (!it)
1300 {
1301 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1302 return NULL;
1303 }
1304
1305 it->hash = hash;
1306 it->get_content = FUNC_ITERATOR_GET_CONTENT(
1307 _eina_hash_iterator_tuple_get_content);
1308
1309 it->iterator.version = EINA_ITERATOR_VERSION;
1310 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_hash_iterator_next);
1311 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1312 _eina_hash_iterator_get_container);
1313 it->iterator.free = FUNC_ITERATOR_FREE(_eina_hash_iterator_free);
1314
1315 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1316 EINA_MAGIC_SET(it, EINA_MAGIC_HASH_ITERATOR);
1317
1318 return &it->iterator;
1319}
1320
1321/* Common hash functions */
1322
1323/* Paul Hsieh (http://www.azillionmonkeys.com/qed/hash.html)
1324 used by WebCore (http://webkit.org/blog/8/hashtables-part-2/) */
1325EAPI int
1326eina_hash_superfast(const char *key, int len)
1327{
1328 int hash = len, tmp;
1329 int rem;
1330
1331 rem = len & 3;
1332 len >>= 2;
1333
1334 /* Main loop */
1335 for (; len > 0; len--)
1336 {
1337 hash += get16bits(key);
1338 tmp = (get16bits(key + 2) << 11) ^ hash;
1339 hash = (hash << 16) ^ tmp;
1340 key += 2 * sizeof (uint16_t);
1341 hash += hash >> 11;
1342 }
1343
1344 /* Handle end cases */
1345 switch (rem)
1346 {
1347 case 3:
1348 hash += get16bits(key);
1349 hash ^= hash << 16;
1350 hash ^= key[sizeof (uint16_t)] << 18;
1351 hash += hash >> 11;
1352 break;
1353
1354 case 2:
1355 hash += get16bits(key);
1356 hash ^= hash << 11;
1357 hash += hash >> 17;
1358 break;
1359
1360 case 1:
1361 hash += *key;
1362 hash ^= hash << 10;
1363 hash += hash >> 1;
1364 }
1365
1366 /* Force "avalanching" of final 127 bits */
1367 hash ^= hash << 3;
1368 hash += hash >> 5;
1369 hash ^= hash << 4;
1370 hash += hash >> 17;
1371 hash ^= hash << 25;
1372 hash += hash >> 6;
1373
1374 return hash;
1375}
diff --git a/libraries/eina/src/lib/eina_inlist.c b/libraries/eina/src/lib/eina_inlist.c
new file mode 100644
index 0000000..75a2cc1
--- /dev/null
+++ b/libraries/eina/src/lib/eina_inlist.c
@@ -0,0 +1,909 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <assert.h>
25
26#include <stdio.h>
27
28#include "eina_config.h"
29#include "eina_private.h"
30#include "eina_error.h"
31#include "eina_log.h"
32
33/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
34#include "eina_safety_checks.h"
35#include "eina_inlist.h"
36
37/* FIXME: TODO please, refactor this :) */
38
39/*============================================================================*
40* Local *
41*============================================================================*/
42
43/**
44 * @cond LOCAL
45 */
46
47#define EINA_INLIST_SORT_STACK_SIZE 32
48
49typedef struct _Eina_Iterator_Inlist Eina_Iterator_Inlist;
50typedef struct _Eina_Accessor_Inlist Eina_Accessor_Inlist;
51
52struct _Eina_Iterator_Inlist
53{
54 Eina_Iterator iterator;
55 const Eina_Inlist *head;
56 const Eina_Inlist *current;
57};
58
59struct _Eina_Accessor_Inlist
60{
61 Eina_Accessor accessor;
62
63 const Eina_Inlist *head;
64 const Eina_Inlist *current;
65
66 unsigned int index;
67};
68
69struct _Eina_Inlist_Sorted_State
70{
71 Eina_Inlist *jump_table[EINA_INLIST_JUMP_SIZE];
72
73 unsigned short jump_limit;
74 int jump_div;
75
76 int inserted;
77};
78
79static Eina_Bool
80eina_inlist_iterator_next(Eina_Iterator_Inlist *it, void **data) {
81 if (!it->current)
82 return EINA_FALSE;
83
84 if (data)
85 *data = (void *)it->current;
86
87 it->current = it->current->next;
88
89 return EINA_TRUE;
90}
91
92static Eina_Inlist *
93eina_inlist_iterator_get_container(Eina_Iterator_Inlist *it) {
94 return (Eina_Inlist *)it->head;
95}
96
97static void
98eina_inlist_iterator_free(Eina_Iterator_Inlist *it) {
99 free(it);
100}
101
102static Eina_Bool
103eina_inlist_accessor_get_at(Eina_Accessor_Inlist *it,
104 unsigned int idx,
105 void **data) {
106 const Eina_Inlist *over;
107 unsigned int middle;
108 unsigned int i;
109
110 if (it->index == idx)
111 over = it->current;
112 else if (idx > it->index)
113 /* Looking after current. */
114 for (i = it->index, over = it->current;
115 i < idx && over;
116 ++i, over = over->next)
117 ;
118 else
119 {
120 middle = it->index >> 1;
121
122 if (idx > middle)
123 /* Looking backward from current. */
124 for (i = it->index, over = it->current;
125 i > idx && over;
126 --i, over = over->prev)
127 ;
128 else
129 /* Looking from the start. */
130 for (i = 0, over = it->head;
131 i < idx && over;
132 ++i, over = over->next)
133 ;
134 }
135
136 if (!over)
137 return EINA_FALSE;
138
139 it->current = over;
140 it->index = idx;
141
142 if (data)
143 *data = (void *)over;
144
145 return EINA_TRUE;
146}
147
148static Eina_Inlist *
149eina_inlist_accessor_get_container(Eina_Accessor_Inlist *it) {
150 return (Eina_Inlist *)it->head;
151}
152
153static void
154eina_inlist_accessor_free(Eina_Accessor_Inlist *it) {
155 free(it);
156}
157
158static Eina_Inlist *
159eina_inlist_sort_merge(Eina_Inlist *a, Eina_Inlist *b, Eina_Compare_Cb func)
160{
161 Eina_Inlist *first, *last;
162
163 if (func(a, b) < 0)
164 a = (last = first = a)->next;
165 else
166 b = (last = first = b)->next;
167
168 while (a && b)
169 if (func(a, b) < 0)
170 a = (last = last->next = a)->next;
171 else
172 b = (last = last->next = b)->next;
173
174 last->next = a ? a : b;
175
176 return first;
177}
178
179static Eina_Inlist *
180eina_inlist_sort_rebuild_prev(Eina_Inlist *list)
181{
182 Eina_Inlist *prev = NULL;
183
184 for (; list; list = list->next)
185 {
186 list->prev = prev;
187 prev = list;
188 }
189
190 return prev;
191}
192
193static void
194_eina_inlist_sorted_state_compact(Eina_Inlist_Sorted_State *state)
195{
196 unsigned short i, j;
197
198 /* compress the jump table */
199 state->jump_div *= 2;
200 state->jump_limit /= 2;
201
202 for (i = 2, j = 1;
203 i < EINA_INLIST_JUMP_SIZE;
204 i += 2, j++)
205 state->jump_table[j] = state->jump_table[i];
206}
207
208/**
209 * @endcond
210 */
211
212
213/*============================================================================*
214* Global *
215*============================================================================*/
216
217/*============================================================================*
218* API *
219*============================================================================*/
220
221EAPI Eina_Inlist *
222eina_inlist_append(Eina_Inlist *list, Eina_Inlist *new_l)
223{
224 Eina_Inlist *l;
225
226 EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list);
227
228 new_l->next = NULL;
229 if (!list)
230 {
231 new_l->prev = NULL;
232 new_l->last = new_l;
233 return new_l;
234 }
235
236 if (list->last)
237 l = list->last;
238 else
239 for (l = list; (l) && (l->next); l = l->next)
240 ;
241
242 l->next = new_l;
243 new_l->prev = l;
244 list->last = new_l;
245 return list;
246}
247
248EAPI Eina_Inlist *
249eina_inlist_prepend(Eina_Inlist *list, Eina_Inlist *new_l)
250{
251 EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list);
252
253 new_l->prev = NULL;
254 if (!list)
255 {
256 new_l->next = NULL;
257 new_l->last = new_l;
258 return new_l;
259 }
260
261 new_l->next = list;
262 list->prev = new_l;
263 new_l->last = list->last;
264 list->last = NULL;
265 return new_l;
266}
267
268EAPI Eina_Inlist *
269eina_inlist_append_relative(Eina_Inlist *list,
270 Eina_Inlist *new_l,
271 Eina_Inlist *relative)
272{
273 EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list);
274
275 if (relative)
276 {
277 if (relative->next)
278 {
279 new_l->next = relative->next;
280 relative->next->prev = new_l;
281 }
282 else
283 new_l->next = NULL;
284
285 relative->next = new_l;
286 new_l->prev = relative;
287 if (!new_l->next)
288 list->last = new_l;
289
290 return list;
291 }
292
293 return eina_inlist_append(list, new_l);
294}
295
296EAPI Eina_Inlist *
297eina_inlist_prepend_relative(Eina_Inlist *list,
298 Eina_Inlist *new_l,
299 Eina_Inlist *relative)
300{
301 EINA_SAFETY_ON_NULL_RETURN_VAL(new_l, list);
302
303 if (relative)
304 {
305 new_l->prev = relative->prev;
306 new_l->next = relative;
307 relative->prev = new_l;
308 if (new_l->prev)
309 {
310 new_l->prev->next = new_l;
311 /* new_l->next could not be NULL, as it was set to 'relative' */
312 assert(new_l->next);
313 return list;
314 }
315 else
316 {
317 /* new_l->next could not be NULL, as it was set to 'relative' */
318 assert(new_l->next);
319
320 new_l->last = list->last;
321 list->last = NULL;
322 return new_l;
323 }
324 }
325
326 return eina_inlist_prepend(list, new_l);
327}
328
329EAPI Eina_Inlist *
330eina_inlist_remove(Eina_Inlist *list, Eina_Inlist *item)
331{
332 Eina_Inlist *return_l;
333
334 /* checkme */
335 EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL);
336 EINA_SAFETY_ON_NULL_RETURN_VAL(item, list);
337 if (EINA_UNLIKELY((item != list) && (!item->prev) && (!item->next)))
338 {
339 eina_error_set(EINA_ERROR_SAFETY_FAILED);
340 EINA_LOG_ERR("safety check failed: item %p does not appear to be part of an inlist!", item);
341 return list;
342 }
343
344 if (item->next)
345 item->next->prev = item->prev;
346
347 if (item->prev)
348 {
349 item->prev->next = item->next;
350 return_l = list;
351 }
352 else
353 {
354 return_l = item->next;
355 if (return_l)
356 return_l->last = list->last;
357 }
358
359 if (item == list->last)
360 list->last = item->prev;
361
362 item->next = NULL;
363 item->prev = NULL;
364 return return_l;
365}
366
367EAPI Eina_Inlist *
368eina_inlist_promote(Eina_Inlist *list, Eina_Inlist *item)
369{
370 EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL);
371 EINA_SAFETY_ON_NULL_RETURN_VAL(item, list);
372
373 if (item == list)
374 return list;
375
376 if (item->next)
377 item->next->prev = item->prev;
378
379 item->prev->next = item->next;
380
381 if (list->last == item)
382 list->last = item->prev;
383
384 item->next = list;
385 item->prev = NULL;
386 item->last = list->last;
387
388 list->prev = item;
389 list->last = NULL;
390
391 return item;
392}
393
394EAPI Eina_Inlist *
395eina_inlist_demote(Eina_Inlist *list, Eina_Inlist *item)
396{
397 Eina_Inlist *l;
398
399 EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL);
400 EINA_SAFETY_ON_NULL_RETURN_VAL(item, list);
401
402 if (list->last == item)
403 return list;
404
405 if (!list->last)
406 {
407 for (l = list; l->next; l = l->next)
408 ;
409 list->last = l;
410 }
411
412 l = list;
413 if (item->prev)
414 item->prev->next = item->next;
415 else
416 l = item->next;
417
418 item->next->prev = item->prev;
419
420 list->last->next = item;
421 item->prev = list->last;
422 item->next = NULL;
423
424 l->last = item;
425 return l;
426}
427
428EAPI Eina_Inlist *
429eina_inlist_find(Eina_Inlist *list, Eina_Inlist *item)
430{
431 Eina_Inlist *l;
432
433 for (l = list; l; l = l->next) {
434 if (l == item)
435 return item;
436 }
437 return NULL;
438}
439
440EAPI unsigned int
441eina_inlist_count(const Eina_Inlist *list)
442{
443 const Eina_Inlist *l;
444 unsigned int i = 0;
445
446 for (l = list; l; l = l->next)
447 i++;
448
449 return i;
450}
451
452EAPI int
453eina_inlist_sorted_state_init(Eina_Inlist_Sorted_State *state, Eina_Inlist *list)
454{
455 Eina_Inlist *ct = NULL;
456 int count = 0;
457 int jump_count = 1;
458
459 /*
460 * prepare a jump table to avoid doing unnecessary rewalk
461 * of the inlist as much as possible.
462 */
463 for (ct = list; ct; ct = ct->next, jump_count++, count++)
464 {
465 if (jump_count == state->jump_div)
466 {
467 if (state->jump_limit == EINA_INLIST_JUMP_SIZE)
468 {
469 _eina_inlist_sorted_state_compact(state);
470 }
471
472 state->jump_table[state->jump_limit] = ct;
473 state->jump_limit++;
474 jump_count = 0;
475 }
476 }
477
478 state->inserted = count;
479 return count;
480}
481
482EAPI Eina_Inlist_Sorted_State *
483eina_inlist_sorted_state_new(void)
484{
485 Eina_Inlist_Sorted_State *r;
486
487 r = calloc(1, sizeof (Eina_Inlist_Sorted_State));
488 if (!r) return NULL;
489
490 r->jump_div = 1;
491
492 return r;
493}
494
495EAPI void
496eina_inlist_sorted_state_free(Eina_Inlist_Sorted_State *state)
497{
498 free(state);
499}
500
501static void
502_eina_inlist_sorted_state_insert(Eina_Inlist_Sorted_State *state,
503 unsigned short idx,
504 int offset)
505{
506 Eina_Inlist *last;
507 int jump_count;
508 int start;
509
510 state->inserted++;
511
512 if (offset != 0) idx++;
513 for (; idx < state->jump_limit; idx++)
514 {
515 state->jump_table[idx] = state->jump_table[idx]->prev;
516 }
517
518 start = state->jump_limit - 3;
519 if (start < 0)
520 start = 0;
521
522 last = state->jump_table[start];
523 start++;
524
525 /* Correctly rebuild end of list */
526 for (jump_count = 0; last->next != NULL; last = last->next, jump_count++)
527 {
528 if (jump_count == state->jump_div)
529 {
530 if (state->jump_limit == start)
531 {
532 if (state->jump_limit == EINA_INLIST_JUMP_SIZE)
533 {
534 _eina_inlist_sorted_state_compact(state);
535 start = state->jump_limit - 1;
536 continue ;
537 }
538 else
539 {
540 state->jump_limit++;
541 }
542 }
543
544 state->jump_table[start++] = last;
545 jump_count = 0;
546 }
547 }
548}
549
550EAPI Eina_Inlist *
551eina_inlist_sorted_insert(Eina_Inlist *list,
552 Eina_Inlist *item,
553 Eina_Compare_Cb func)
554{
555 Eina_Inlist *ct = NULL;
556 Eina_Inlist_Sorted_State state;
557 int cmp = 0;
558 int inf, sup;
559 int cur = 0;
560 int count;
561
562 if (!list) return eina_inlist_append(NULL, item);
563
564 if (!list->next)
565 {
566 cmp = func(list, item);
567
568 if (cmp < 0)
569 return eina_inlist_append(list, item);
570 return eina_inlist_prepend(list, item);
571 }
572
573 state.jump_div = 1;
574 state.jump_limit = 0;
575 count = eina_inlist_sorted_state_init(&state, list);
576
577 /*
578 * now do a dychotomic search directly inside the jump_table.
579 */
580 inf = 0;
581 sup = state.jump_limit - 1;
582 cur = 0;
583 ct = state.jump_table[cur];
584 cmp = func(ct, item);
585
586 while (inf <= sup)
587 {
588 cur = inf + ((sup - inf) >> 1);
589 ct = state.jump_table[cur];
590
591 cmp = func(ct, item);
592 if (cmp == 0)
593 break ;
594 else if (cmp < 0)
595 inf = cur + 1;
596 else if (cmp > 0)
597 {
598 if (cur > 0)
599 sup = cur - 1;
600 else
601 break;
602 }
603 else
604 break;
605 }
606
607 /* If at the beginning of the table and cmp < 0,
608 * insert just after the head */
609 if (cur == 0 && cmp > 0)
610 return eina_inlist_prepend_relative(list, item, ct);
611
612 /* If at the end of the table and cmp >= 0,
613 * just append the item to the list */
614 if (cmp < 0 && ct == list->last)
615 return eina_inlist_append(list, item);
616
617 /*
618 * Now do a dychotomic search between two entries inside the jump_table
619 */
620 cur *= state.jump_div;
621 inf = cur - state.jump_div - 1;
622 sup = cur + state.jump_div + 1;
623
624 if (sup > count - 1) sup = count - 1;
625 if (inf < 0) inf = 0;
626
627 while (inf <= sup)
628 {
629 int tmp = cur;
630
631 cur = inf + ((sup - inf) >> 1);
632 if (tmp < cur)
633 for (; tmp != cur; tmp++, ct = ct->next);
634 else if (tmp > cur)
635 for (; tmp != cur; tmp--, ct = ct->prev);
636
637 cmp = func(ct, item);
638 if (cmp == 0)
639 break ;
640 else if (cmp < 0)
641 inf = cur + 1;
642 else if (cmp > 0)
643 {
644 if (cur > 0)
645 sup = cur - 1;
646 else
647 break;
648 }
649 else
650 break;
651 }
652
653 if (cmp <= 0)
654 return eina_inlist_append_relative(list, item, ct);
655 return eina_inlist_prepend_relative(list, item, ct);
656}
657
658EAPI Eina_Inlist *
659eina_inlist_sorted_state_insert(Eina_Inlist *list,
660 Eina_Inlist *item,
661 Eina_Compare_Cb func,
662 Eina_Inlist_Sorted_State *state)
663{
664 Eina_Inlist *ct = NULL;
665 int cmp = 0;
666 int inf, sup;
667 int cur = 0;
668 int count;
669 unsigned short head;
670 unsigned int offset;
671
672 if (!list)
673 {
674 state->inserted = 1;
675 state->jump_limit = 1;
676 state->jump_table[0] = item;
677 return eina_inlist_append(NULL, item);
678 }
679
680 if (!list->next)
681 {
682 cmp = func(list, item);
683
684 state->jump_limit = 2;
685 state->inserted = 2;
686
687 if (cmp < 0)
688 {
689 state->jump_table[1] = item;
690 return eina_inlist_append(list, item);
691 }
692 state->jump_table[1] = state->jump_table[0];
693 state->jump_table[0] = item;
694 return eina_inlist_prepend(list, item);
695 }
696
697 count = state->inserted;
698
699 /*
700 * now do a dychotomic search directly inside the jump_table.
701 */
702 inf = 0;
703 sup = state->jump_limit - 1;
704 cur = 0;
705 ct = state->jump_table[cur];
706 cmp = func(ct, item);
707
708 while (inf <= sup)
709 {
710 cur = inf + ((sup - inf) >> 1);
711 ct = state->jump_table[cur];
712
713 cmp = func(ct, item);
714 if (cmp == 0)
715 break ;
716 else if (cmp < 0)
717 inf = cur + 1;
718 else if (cmp > 0)
719 {
720 if (cur > 0)
721 sup = cur - 1;
722 else
723 break;
724 }
725 else
726 break;
727 }
728
729 /* If at the beginning of the table and cmp < 0,
730 * insert just after the head */
731 if (cur == 0 && cmp > 0)
732 {
733 ct = eina_inlist_prepend_relative(list, item, ct);
734 _eina_inlist_sorted_state_insert(state, 0, 0);
735 return ct;
736 }
737
738 /* If at the end of the table and cmp >= 0,
739 * just append the item to the list */
740 if (cmp < 0 && ct == list->last)
741 {
742 ct = eina_inlist_append(list, item);
743 _eina_inlist_sorted_state_insert(state, state->jump_limit - 1, 1);
744 return ct;
745 }
746
747 /*
748 * Now do a dychotomic search between two entries inside the jump_table
749 */
750 cur *= state->jump_div;
751 inf = cur - state->jump_div - 1;
752 sup = cur + state->jump_div + 1;
753
754 if (sup > count - 1) sup = count - 1;
755 if (inf < 0) inf = 0;
756
757 while (inf <= sup)
758 {
759 int tmp = cur;
760
761 cur = inf + ((sup - inf) >> 1);
762 if (tmp < cur)
763 for (; tmp != cur; tmp++, ct = ct->next);
764 else if (tmp > cur)
765 for (; tmp != cur; tmp--, ct = ct->prev);
766
767 cmp = func(ct, item);
768 if (cmp == 0)
769 break ;
770 else if (cmp < 0)
771 inf = cur + 1;
772 else if (cmp > 0)
773 {
774 if (cur > 0)
775 sup = cur - 1;
776 else
777 break;
778 }
779 else
780 break;
781 }
782
783 if (cmp <= 0)
784 {
785 cur++;
786
787 ct = eina_inlist_append_relative(list, item, ct);
788 }
789 else
790 {
791 ct = eina_inlist_prepend_relative(list, item, ct);
792 }
793
794 head = cur / state->jump_div;
795 offset = cur % state->jump_div;
796
797 _eina_inlist_sorted_state_insert(state, head, offset);
798 return ct;
799}
800
801EAPI Eina_Inlist *
802eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func)
803{
804 unsigned int i = 0;
805 unsigned int n = 0;
806 Eina_Inlist *tail = head;
807 Eina_Inlist *unsort = NULL;
808 Eina_Inlist *stack[EINA_INLIST_SORT_STACK_SIZE];
809
810 EINA_SAFETY_ON_NULL_RETURN_VAL(head, NULL);
811 EINA_SAFETY_ON_NULL_RETURN_VAL(func, head);
812
813 while (tail)
814 {
815 unsigned int idx, tmp;
816
817 Eina_Inlist *a = tail;
818 Eina_Inlist *b = tail->next;
819
820 if (!b)
821 {
822 stack[i++] = a;
823 break;
824 }
825
826 tail = b->next;
827
828 if (func(a, b) < 0)
829 ((stack[i++] = a)->next = b)->next = 0;
830 else
831 ((stack[i++] = b)->next = a)->next = 0;
832
833 tmp = n++;
834 for (idx = n ^ tmp; idx &= idx - 1; i--)
835 stack[i - 2] = eina_inlist_sort_merge(stack[i - 2], stack[i - 1], func);
836 }
837
838 while (i-- > 1)
839 stack[i - 1] = eina_inlist_sort_merge(stack[i - 1], stack[i], func);
840
841 head = stack[0];
842 tail = eina_inlist_sort_rebuild_prev(head);
843
844 if (unsort)
845 {
846 tail->next = unsort;
847 unsort->prev = tail;
848 }
849
850 head->last = tail;
851
852 return head;
853
854}
855
856EAPI Eina_Iterator *
857eina_inlist_iterator_new(const Eina_Inlist *list)
858{
859 Eina_Iterator_Inlist *it;
860
861 eina_error_set(0);
862 it = calloc(1, sizeof (Eina_Iterator_Inlist));
863 if (!it)
864 {
865 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
866 return NULL;
867 }
868
869 it->head = list;
870 it->current = list;
871
872 it->iterator.version = EINA_ITERATOR_VERSION;
873 it->iterator.next = FUNC_ITERATOR_NEXT(eina_inlist_iterator_next);
874 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
875 eina_inlist_iterator_get_container);
876 it->iterator.free = FUNC_ITERATOR_FREE(eina_inlist_iterator_free);
877
878 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
879
880 return &it->iterator;
881}
882
883EAPI Eina_Accessor *
884eina_inlist_accessor_new(const Eina_Inlist *list)
885{
886 Eina_Accessor_Inlist *ac;
887
888 eina_error_set(0);
889 ac = calloc(1, sizeof (Eina_Accessor_Inlist));
890 if (!ac)
891 {
892 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
893 return NULL;
894 }
895
896 ac->head = list;
897 ac->current = list;
898 ac->index = 0;
899
900 ac->accessor.version = EINA_ACCESSOR_VERSION;
901 ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_inlist_accessor_get_at);
902 ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(
903 eina_inlist_accessor_get_container);
904 ac->accessor.free = FUNC_ACCESSOR_FREE(eina_inlist_accessor_free);
905
906 EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);
907
908 return &ac->accessor;
909}
diff --git a/libraries/eina/src/lib/eina_iterator.c b/libraries/eina/src/lib/eina_iterator.c
new file mode 100644
index 0000000..0721066
--- /dev/null
+++ b/libraries/eina/src/lib/eina_iterator.c
@@ -0,0 +1,172 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24
25#include "eina_config.h"
26#include "eina_private.h"
27
28/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
29#include "eina_safety_checks.h"
30#include "eina_iterator.h"
31
32/*============================================================================*
33* Local *
34*============================================================================*/
35
36/**
37 * @cond LOCAL
38 */
39
40static const char EINA_MAGIC_ITERATOR_STR[] = "Eina Iterator";
41
42#define EINA_MAGIC_CHECK_ITERATOR(d) \
43 do { \
44 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_ITERATOR)) { \
45 EINA_MAGIC_FAIL(d, EINA_MAGIC_ITERATOR); } \
46 } while(0)
47
48/**
49 * @endcond
50 */
51
52
53/*============================================================================*
54* Global *
55*============================================================================*/
56
57/**
58 * @internal
59 * @brief Initialize the iterator module.
60 *
61 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
62 *
63 * This function sets up the iterator module of Eina. It is called by
64 * eina_init().
65 *
66 * @see eina_init()
67 */
68Eina_Bool
69eina_iterator_init(void)
70{
71 return eina_magic_string_set(EINA_MAGIC_ITERATOR, EINA_MAGIC_ITERATOR_STR);
72}
73
74/**
75 * @internal
76 * @brief Shut down the iterator module.
77 *
78 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
79 *
80 * This function shuts down the iterator module set up by
81 * eina_iterator_init(). It is called by eina_shutdown().
82 *
83 * @see eina_shutdown()
84 */
85Eina_Bool
86eina_iterator_shutdown(void)
87{
88 return EINA_TRUE;
89}
90
91/*============================================================================*
92* API *
93*============================================================================*/
94
95EAPI void
96eina_iterator_free(Eina_Iterator *iterator)
97{
98 EINA_MAGIC_CHECK_ITERATOR(iterator);
99 EINA_SAFETY_ON_NULL_RETURN(iterator);
100 EINA_SAFETY_ON_NULL_RETURN(iterator->free);
101 iterator->free(iterator);
102}
103
104EAPI void *
105eina_iterator_container_get(Eina_Iterator *iterator)
106{
107 EINA_MAGIC_CHECK_ITERATOR(iterator);
108 EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, NULL);
109 EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->get_container, NULL);
110 return iterator->get_container(iterator);
111}
112
113EAPI Eina_Bool
114eina_iterator_next(Eina_Iterator *iterator, void **data)
115{
116 if (!iterator)
117 return EINA_FALSE;
118
119 EINA_MAGIC_CHECK_ITERATOR(iterator);
120 EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE);
121 EINA_SAFETY_ON_NULL_RETURN_VAL(iterator->next, EINA_FALSE);
122 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
123 return iterator->next(iterator, data);
124}
125
126EAPI void
127eina_iterator_foreach(Eina_Iterator *iterator,
128 Eina_Each_Cb cb,
129 const void *fdata)
130{
131 const void *container;
132 void *data;
133
134 EINA_MAGIC_CHECK_ITERATOR(iterator);
135 EINA_SAFETY_ON_NULL_RETURN(iterator);
136 EINA_SAFETY_ON_NULL_RETURN(iterator->get_container);
137 EINA_SAFETY_ON_NULL_RETURN(iterator->next);
138 EINA_SAFETY_ON_NULL_RETURN(cb);
139
140 if (!eina_iterator_lock(iterator)) return ;
141
142 container = iterator->get_container(iterator);
143 while (iterator->next(iterator, &data) == EINA_TRUE) {
144 if (cb(container, data, (void *)fdata) != EINA_TRUE)
145 goto on_exit;
146 }
147
148 on_exit:
149 (void) eina_iterator_unlock(iterator);
150}
151
152EAPI Eina_Bool
153eina_iterator_lock(Eina_Iterator *iterator)
154{
155 EINA_MAGIC_CHECK_ITERATOR(iterator);
156 EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE);
157
158 if (iterator->lock)
159 return iterator->lock(iterator);
160 return EINA_TRUE;
161}
162
163EAPI Eina_Bool
164eina_iterator_unlock(Eina_Iterator *iterator)
165{
166 EINA_MAGIC_CHECK_ITERATOR(iterator);
167 EINA_SAFETY_ON_NULL_RETURN_VAL(iterator, EINA_FALSE);
168
169 if (iterator->unlock)
170 return iterator->unlock(iterator);
171 return EINA_TRUE;
172}
diff --git a/libraries/eina/src/lib/eina_lalloc.c b/libraries/eina/src/lib/eina_lalloc.c
new file mode 100644
index 0000000..b1e62b7
--- /dev/null
+++ b/libraries/eina/src/lib/eina_lalloc.c
@@ -0,0 +1,158 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24
25#include "eina_config.h"
26#include "eina_private.h"
27
28/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
29#include "eina_safety_checks.h"
30#include "eina_lalloc.h"
31
32/*============================================================================*
33* Local *
34*============================================================================*/
35
36/**
37 * @cond LOCAL
38 */
39
40struct _Eina_Lalloc
41{
42 void *data;
43 int num_allocated;
44 int num_elements;
45 int acc;
46 Eina_Lalloc_Alloc alloc_cb;
47 Eina_Lalloc_Free free_cb;
48};
49
50/**
51 * @endcond
52 */
53
54/*============================================================================*
55* Global *
56*============================================================================*/
57
58/*============================================================================*
59* API *
60*============================================================================*/
61
62/**
63 * @addtogroup Eina_Lalloc_Group Lazy allocator
64 *
65 * @{
66 */
67
68EAPI Eina_Lalloc *eina_lalloc_new(void *data,
69 Eina_Lalloc_Alloc alloc_cb,
70 Eina_Lalloc_Free free_cb,
71 int num_init)
72{
73 Eina_Lalloc *a;
74
75 EINA_SAFETY_ON_NULL_RETURN_VAL(alloc_cb, NULL);
76 EINA_SAFETY_ON_NULL_RETURN_VAL(free_cb, NULL);
77
78 a = calloc(1, sizeof(Eina_Lalloc));
79 a->data = data;
80 a->alloc_cb = alloc_cb;
81 a->free_cb = free_cb;
82 if (num_init > 0)
83 {
84 a->num_allocated = num_init;
85 a->alloc_cb(a->data, a->num_allocated);
86 }
87
88 return a;
89}
90
91EAPI void eina_lalloc_free(Eina_Lalloc *a)
92{
93 EINA_SAFETY_ON_NULL_RETURN(a);
94 EINA_SAFETY_ON_NULL_RETURN(a->free_cb);
95 a->free_cb(a->data);
96 free(a);
97}
98
99EAPI Eina_Bool eina_lalloc_element_add(Eina_Lalloc *a)
100{
101 EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE);
102 EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE);
103
104 if (a->num_elements == a->num_allocated)
105 {
106 if (a->alloc_cb(a->data, (1 << a->acc)) == EINA_TRUE)
107 {
108 a->num_allocated = (1 << a->acc);
109 a->acc++;
110 }
111 else
112 return EINA_FALSE;
113 }
114
115 a->num_elements++;
116
117 return EINA_TRUE;
118}
119
120EAPI Eina_Bool eina_lalloc_elements_add(Eina_Lalloc *a, int num)
121{
122 int tmp;
123
124 EINA_SAFETY_ON_NULL_RETURN_VAL(a, EINA_FALSE);
125 EINA_SAFETY_ON_NULL_RETURN_VAL(a->alloc_cb, EINA_FALSE);
126
127 tmp = a->num_elements + num;
128 if (tmp > a->num_allocated)
129 {
130 int allocated;
131 int acc;
132
133 allocated = a->num_allocated;
134 acc = a->acc;
135
136 while (tmp > allocated)
137 {
138 allocated = (1 << acc);
139 acc++;
140 }
141
142 if (a->alloc_cb(a->data, allocated) == EINA_TRUE)
143 {
144 a->num_allocated = allocated;
145 a->acc = acc;
146 }
147 else
148 return EINA_FALSE;
149 }
150
151 a->num_elements += num;
152
153 return EINA_TRUE;
154}
155
156/**
157 * @}
158 */
diff --git a/libraries/eina/src/lib/eina_list.c b/libraries/eina/src/lib/eina_list.c
new file mode 100644
index 0000000..d45cffd
--- /dev/null
+++ b/libraries/eina/src/lib/eina_list.c
@@ -0,0 +1,1490 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Gustavo Sverzut Barbieri, Tilman Sauerbeck,
3 * Vincent Torri, Cedric Bail, Jorge Luis Zapata Muga,
4 * Corey Donohoe, Arnaud de Turckheim, Alexandre Becoulet
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library;
18 * if not, see <http://www.gnu.org/licenses/>.
19 *
20 * This file incorporates work covered by the following copyright and
21 * permission notice:
22 *
23 * Copyright (C) 2004 ncn
24 * Copyright (C) 2006 Sebastian Dransfeld
25 * Copyright (C) 2007 Christopher Michael
26 *
27 * Permission is hereby granted, free of charge, to any person obtaining a copy
28 * of this software and associated documentation files (the "Software"), to
29 * deal in the Software without restriction, including without limitation the
30 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
31 * sell copies of the Software, and to permit persons to whom the Software is
32 * furnished to do so, subject to the following conditions:
33
34 * The above copyright notice and this permission notice shall be included in
35 * all copies of the Software and its Copyright notices. In addition publicly
36 * documented acknowledgment must be given that this software has been used if no
37 * source code of this software is made available publicly. This includes
38 * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
39 * documents or any documentation provided with any product containing this
40 * software. This License does not apply to any software that links to the
41 * libraries provided by this software (statically or dynamically), but only to
42 * the software provided.
43
44 * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice
45 * and it's intent.
46
47 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
48 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
49 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
50 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
51 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
52 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
53 */
54
55
56#ifdef HAVE_CONFIG_H
57# include "config.h"
58#endif
59
60#include <stdlib.h>
61#include <stdio.h>
62#include <string.h>
63
64#ifdef HAVE_EVIL
65# include <Evil.h>
66#endif
67
68#include "eina_config.h"
69#include "eina_private.h"
70#include "eina_error.h"
71#include "eina_log.h"
72#include "eina_mempool.h"
73
74/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
75#include "eina_safety_checks.h"
76#include "eina_list.h"
77
78
79/*============================================================================*
80 * Local *
81 *============================================================================*/
82
83/**
84 * @cond LOCAL
85 */
86
87static const char EINA_MAGIC_LIST_STR[] = "Eina List";
88static const char EINA_MAGIC_LIST_ITERATOR_STR[] = "Eina List Iterator";
89static const char EINA_MAGIC_LIST_ACCESSOR_STR[] = "Eina List Accessor";
90static const char EINA_MAGIC_LIST_ACCOUNTING_STR[] = "Eina List Accounting";
91
92
93#define EINA_MAGIC_CHECK_LIST(d, ...) \
94 do { \
95 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST)) \
96 { \
97 EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST); \
98 return __VA_ARGS__; \
99 } \
100 } while(0)
101
102#define EINA_MAGIC_CHECK_LIST_ITERATOR(d, ...) \
103 do { \
104 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ITERATOR)) \
105 { \
106 EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ITERATOR); \
107 return __VA_ARGS__; \
108 } \
109 } while(0)
110
111#define EINA_MAGIC_CHECK_LIST_ACCESSOR(d, ...) \
112 do { \
113 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCESSOR)) \
114 { \
115 EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCESSOR); \
116 return __VA_ARGS__; \
117 } \
118 } while(0)
119
120#define EINA_MAGIC_CHECK_LIST_ACCOUNTING(d) \
121 do { \
122 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCOUNTING)) \
123 { \
124 EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING); \
125 return; \
126 } \
127 } while(0)
128
129#define EINA_LIST_SORT_STACK_SIZE 32
130
131typedef struct _Eina_Iterator_List Eina_Iterator_List;
132typedef struct _Eina_Accessor_List Eina_Accessor_List;
133
134struct _Eina_Iterator_List
135{
136 Eina_Iterator iterator;
137
138 const Eina_List *head;
139 const Eina_List *current;
140
141 EINA_MAGIC
142};
143
144struct _Eina_Accessor_List
145{
146 Eina_Accessor accessor;
147
148 const Eina_List *head;
149 const Eina_List *current;
150
151 unsigned int index;
152
153 EINA_MAGIC
154};
155
156static Eina_Mempool *_eina_list_mp = NULL;
157static Eina_Mempool *_eina_list_accounting_mp = NULL;
158static int _eina_list_log_dom = -1;
159
160#ifdef ERR
161#undef ERR
162#endif
163#define ERR(...) EINA_LOG_DOM_ERR(_eina_list_log_dom, __VA_ARGS__)
164
165#ifdef DBG
166#undef DBG
167#endif
168#define DBG(...) EINA_LOG_DOM_DBG(_eina_list_log_dom, __VA_ARGS__)
169
170static inline Eina_List_Accounting *
171_eina_list_mempool_accounting_new(__UNUSED__ Eina_List *list)
172{
173 Eina_List_Accounting *tmp;
174
175 tmp =
176 eina_mempool_malloc(_eina_list_accounting_mp,
177 sizeof (Eina_List_Accounting));
178 if (!tmp)
179 return NULL;
180
181 EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST_ACCOUNTING);
182
183 return tmp;
184}
185static inline void
186_eina_list_mempool_accounting_free(Eina_List_Accounting *accounting)
187{
188 EINA_MAGIC_CHECK_LIST_ACCOUNTING(accounting);
189
190 EINA_MAGIC_SET(accounting, EINA_MAGIC_NONE);
191 eina_mempool_free(_eina_list_accounting_mp, accounting);
192}
193
194static inline Eina_List *
195_eina_list_mempool_list_new(__UNUSED__ Eina_List *list)
196{
197 Eina_List *tmp;
198
199 tmp = eina_mempool_malloc(_eina_list_mp, sizeof (Eina_List));
200 if (!tmp)
201 return NULL;
202
203 EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST);
204
205 return tmp;
206}
207static inline void
208_eina_list_mempool_list_free(Eina_List *list)
209{
210 EINA_MAGIC_CHECK_LIST(list);
211
212 list->accounting->count--;
213 if (list->accounting->count == 0)
214 _eina_list_mempool_accounting_free(list->accounting);
215
216 EINA_MAGIC_SET(list, EINA_MAGIC_NONE);
217 eina_mempool_free(_eina_list_mp, list);
218}
219
220static Eina_List *
221_eina_list_setup_accounting(Eina_List *list)
222{
223 EINA_MAGIC_CHECK_LIST(list, NULL);
224
225 list->accounting = _eina_list_mempool_accounting_new(list);
226 if (!list->accounting)
227 goto on_error;
228
229 list->accounting->last = list;
230 list->accounting->count = 1;
231
232 return list;
233
234on_error:
235 _eina_list_mempool_list_free(list);
236 return NULL;
237}
238
239static inline void
240_eina_list_update_accounting(Eina_List *list, Eina_List *new_list)
241{
242 EINA_MAGIC_CHECK_LIST(list);
243 EINA_MAGIC_CHECK_LIST(new_list);
244
245 list->accounting->count++;
246 new_list->accounting = list->accounting;
247}
248
249#if 0
250static Eina_Mempool2 _eina_list_mempool =
251{
252 sizeof(Eina_List),
253 320,
254 0, NULL, NULL
255};
256static Eina_Mempool2 _eina_list_accounting_mempool =
257{
258 sizeof(Eina_List_Accounting),
259 80,
260 0, NULL, NULL
261};
262#endif
263
264static Eina_Bool
265eina_list_iterator_next(Eina_Iterator_List *it, void **data)
266{
267 EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE);
268
269 if (!it->current)
270 return EINA_FALSE;
271
272 *data = eina_list_data_get(it->current);
273
274 it->current = eina_list_next(it->current);
275
276 return EINA_TRUE;
277}
278
279static Eina_Bool
280eina_list_iterator_prev(Eina_Iterator_List *it, void **data)
281{
282 EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE);
283
284 if (!it->current)
285 return EINA_FALSE;
286
287 *data = eina_list_data_get(it->current);
288
289 it->current = eina_list_prev(it->current);
290
291 return EINA_TRUE;
292}
293
294static Eina_List *
295eina_list_iterator_get_container(Eina_Iterator_List *it)
296{
297 EINA_MAGIC_CHECK_LIST_ITERATOR(it, NULL);
298
299 return (Eina_List *)it->head;
300}
301
302static void
303eina_list_iterator_free(Eina_Iterator_List *it)
304{
305 EINA_MAGIC_CHECK_LIST_ITERATOR(it);
306
307 MAGIC_FREE(it);
308}
309
310static Eina_Bool
311eina_list_accessor_get_at(Eina_Accessor_List *it, unsigned int idx, void **data)
312{
313 const Eina_List *over;
314 unsigned int middle;
315 unsigned int i;
316
317 EINA_MAGIC_CHECK_LIST_ACCESSOR(it, EINA_FALSE);
318
319 if (idx >= eina_list_count(it->head))
320 return EINA_FALSE;
321
322 if (it->index == idx)
323 over = it->current;
324 else if (idx > it->index)
325 {
326 /* After current position. */
327 middle = ((eina_list_count(it->head) - it->index) >> 1) + it->index;
328
329 if (idx > middle)
330 /* Go backward from the end. */
331 for (i = eina_list_count(it->head) - 1,
332 over = eina_list_last(it->head);
333 i > idx && over;
334 --i, over = eina_list_prev(over))
335 ;
336 else
337 /* Go forward from current. */
338 for (i = it->index, over = it->current;
339 i < idx && over;
340 ++i, over = eina_list_next(over))
341 ;
342 }
343 else
344 {
345 /* Before current position. */
346 middle = it->index >> 1;
347
348 if (idx > middle)
349 /* Go backward from current. */
350 for (i = it->index, over = it->current;
351 i > idx && over;
352 --i, over = eina_list_prev(over))
353 ;
354 else
355 /* Go forward from start. */
356 for (i = 0, over = it->head;
357 i < idx && over;
358 ++i, over = eina_list_next(over))
359 ;
360 }
361
362 if (!over)
363 return EINA_FALSE;
364
365 it->current = over;
366 it->index = idx;
367
368 *data = eina_list_data_get(it->current);
369 return EINA_TRUE;
370}
371
372static Eina_List *
373eina_list_accessor_get_container(Eina_Accessor_List *it)
374{
375 EINA_MAGIC_CHECK_LIST_ACCESSOR(it, NULL);
376
377 return (Eina_List *)it->head;
378}
379
380static void
381eina_list_accessor_free(Eina_Accessor_List *it)
382{
383 EINA_MAGIC_CHECK_LIST_ACCESSOR(it);
384
385 MAGIC_FREE(it);
386}
387
388static Eina_List *
389eina_list_sort_rebuild_prev(Eina_List *list)
390{
391 Eina_List *prev = NULL;
392
393 EINA_MAGIC_CHECK_LIST(list, NULL);
394
395 for (; list; list = list->next)
396 {
397 list->prev = prev;
398 prev = list;
399 }
400
401 return prev;
402}
403
404static Eina_List *
405eina_list_sort_merge(Eina_List *a, Eina_List *b, Eina_Compare_Cb func)
406{
407 Eina_List *first, *last;
408
409 if (func(a->data, b->data) < 0)
410 a = (last = first = a)->next;
411 else
412 b = (last = first = b)->next;
413
414 while (a && b)
415 if (func(a->data, b->data) < 0)
416 a = (last = last->next = a)->next;
417 else
418 b = (last = last->next = b)->next;
419
420 last->next = a ? a : b;
421
422 return first;
423}
424
425/**
426 * @endcond
427 */
428
429/*============================================================================*
430 * Global *
431 *============================================================================*/
432
433/**
434 * @internal
435 * @brief Initialize the list module.
436 *
437 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
438 *
439 * This function sets up the list module of Eina. It is called by
440 * eina_init().
441 *
442 * This function creates mempool to speed up list node and accounting
443 * management, using EINA_MEMPOOL environment variable if it is set to
444 * choose the memory pool type to use.
445 *
446 * @see eina_init()
447 */
448Eina_Bool
449eina_list_init(void)
450{
451 const char *choice, *tmp;
452
453 _eina_list_log_dom = eina_log_domain_register("eina_list",
454 EINA_LOG_COLOR_DEFAULT);
455 if (_eina_list_log_dom < 0)
456 {
457 EINA_LOG_ERR("Could not register log domain: eina_list");
458 return EINA_FALSE;
459 }
460
461#ifdef EINA_DEFAULT_MEMPOOL
462 choice = "pass_through";
463#else
464 choice = "chained_mempool";
465#endif
466 tmp = getenv("EINA_MEMPOOL");
467 if (tmp && tmp[0])
468 choice = tmp;
469
470 _eina_list_mp = eina_mempool_add
471 (choice, "list", NULL, sizeof(Eina_List), 320);
472 if (!_eina_list_mp)
473 {
474 ERR("ERROR: Mempool for list cannot be allocated in list init.");
475 goto on_init_fail;
476 }
477
478 _eina_list_accounting_mp = eina_mempool_add
479 (choice, "list_accounting", NULL, sizeof(Eina_List_Accounting), 80);
480 if (!_eina_list_accounting_mp)
481 {
482 ERR(
483 "ERROR: Mempool for list accounting cannot be allocated in list init.");
484 eina_mempool_del(_eina_list_mp);
485 goto on_init_fail;
486 }
487
488#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
489 EMS(EINA_MAGIC_LIST);
490 EMS(EINA_MAGIC_LIST_ITERATOR);
491 EMS(EINA_MAGIC_LIST_ACCESSOR);
492 EMS(EINA_MAGIC_LIST_ACCOUNTING);
493#undef EMS
494
495 return EINA_TRUE;
496
497on_init_fail:
498 eina_log_domain_unregister(_eina_list_log_dom);
499 _eina_list_log_dom = -1;
500 return EINA_FALSE;
501}
502
503/**
504 * @internal
505 * @brief Shut down the list module.
506 *
507 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
508 *
509 * This function shuts down the list module set up by
510 * eina_list_init(). It is called by eina_shutdown().
511 *
512 * @see eina_shutdown()
513 */
514Eina_Bool
515eina_list_shutdown(void)
516{
517 eina_mempool_del(_eina_list_accounting_mp);
518 eina_mempool_del(_eina_list_mp);
519
520 eina_log_domain_unregister(_eina_list_log_dom);
521 _eina_list_log_dom = -1;
522 return EINA_TRUE;
523}
524
525/*============================================================================*
526 * API *
527 *============================================================================*/
528
529EAPI Eina_List *
530eina_list_append(Eina_List *list, const void *data)
531{
532 Eina_List *l, *new_l;
533
534 eina_error_set(0);
535 new_l = _eina_list_mempool_list_new(list);
536 if (!new_l)
537 return list;
538
539 new_l->next = NULL;
540 new_l->data = (void *)data;
541 if (!list)
542 {
543 new_l->prev = NULL;
544 return _eina_list_setup_accounting(new_l);
545 }
546
547 EINA_MAGIC_CHECK_LIST(list, NULL);
548
549 l = list->accounting->last;
550 list->accounting->last = new_l;
551
552 l->next = new_l;
553 new_l->prev = l;
554
555 _eina_list_update_accounting(list, new_l);
556 return list;
557}
558
559EAPI Eina_List *
560eina_list_prepend(Eina_List *list, const void *data)
561{
562 Eina_List *new_l;
563
564 eina_error_set(0);
565 new_l = _eina_list_mempool_list_new(list);
566 if (!new_l)
567 return list;
568
569 new_l->prev = NULL;
570 new_l->next = list;
571 new_l->data = (void *)data;
572
573 if (!list)
574 return _eina_list_setup_accounting(new_l);
575
576 EINA_MAGIC_CHECK_LIST(list, NULL);
577
578 list->prev = new_l;
579
580 _eina_list_update_accounting(list, new_l);
581
582 return new_l;
583}
584
585EAPI Eina_List *
586eina_list_append_relative(Eina_List *list,
587 const void *data,
588 const void *relative)
589{
590 Eina_List *l;
591 void *list_data;
592
593 if (list)
594 EINA_MAGIC_CHECK_LIST(list, NULL);
595
596 EINA_LIST_FOREACH(list, l, list_data)
597 {
598 if (list_data == relative)
599 return eina_list_append_relative_list(list, data, l);
600 }
601
602 return eina_list_append(list, data);
603}
604
605EAPI Eina_List *
606eina_list_append_relative_list(Eina_List *list,
607 const void *data,
608 Eina_List *relative)
609{
610 Eina_List *new_l;
611
612 if ((!list) || (!relative))
613 return eina_list_append(list, data);
614
615 eina_error_set(0);
616 new_l = _eina_list_mempool_list_new(list);
617 if (!new_l)
618 return list;
619
620 EINA_MAGIC_CHECK_LIST(relative, NULL);
621 new_l->next = relative->next;
622 new_l->data = (void *)data;
623
624 if (relative->next)
625 relative->next->prev = new_l;
626
627 relative->next = new_l;
628 new_l->prev = relative;
629
630 _eina_list_update_accounting(list, new_l);
631
632 if (!new_l->next)
633 new_l->accounting->last = new_l;
634
635 return list;
636}
637
638EAPI Eina_List *
639eina_list_prepend_relative(Eina_List *list,
640 const void *data,
641 const void *relative)
642{
643 Eina_List *l;
644 void *list_data;
645
646 if (list)
647 EINA_MAGIC_CHECK_LIST(list, NULL);
648
649 EINA_LIST_FOREACH(list, l, list_data)
650 {
651 if (list_data == relative)
652 return eina_list_prepend_relative_list(list, data, l);
653 }
654 return eina_list_prepend(list, data);
655}
656
657EAPI Eina_List *
658eina_list_prepend_relative_list(Eina_List *list,
659 const void *data,
660 Eina_List *relative)
661{
662 Eina_List *new_l;
663
664 if ((!list) || (!relative))
665 return eina_list_prepend(list, data);
666
667 eina_error_set(0);
668 new_l = _eina_list_mempool_list_new(list);
669 if (!new_l)
670 return list;
671
672 EINA_MAGIC_CHECK_LIST(relative, NULL);
673
674 new_l->prev = relative->prev;
675 new_l->next = relative;
676 new_l->data = (void *)data;
677
678 if (relative->prev)
679 relative->prev->next = new_l;
680
681 relative->prev = new_l;
682
683 _eina_list_update_accounting(list, new_l);
684
685 if (new_l->prev)
686 return list;
687
688 return new_l;
689}
690
691EAPI Eina_List *
692eina_list_sorted_insert(Eina_List *list, Eina_Compare_Cb func, const void *data)
693{
694 Eina_List *lnear;
695 int cmp;
696
697 if (!list)
698 return eina_list_append(NULL, data);
699
700 lnear = eina_list_search_sorted_near_list(list, func, data, &cmp);
701 if (cmp < 0)
702 return eina_list_append_relative_list(list, data, lnear);
703 else
704 return eina_list_prepend_relative_list(list, data, lnear);
705}
706
707EAPI Eina_List *
708eina_list_remove(Eina_List *list, const void *data)
709{
710 Eina_List *l;
711
712 if (list)
713 EINA_MAGIC_CHECK_LIST(list, NULL);
714
715 l = eina_list_data_find_list(list, data);
716 return eina_list_remove_list(list, l);
717}
718
719EAPI Eina_List *
720eina_list_remove_list(Eina_List *list, Eina_List *remove_list)
721{
722 Eina_List *return_l;
723
724 if (!list)
725 return NULL;
726
727 if (!remove_list)
728 return list;
729
730 EINA_MAGIC_CHECK_LIST(remove_list, NULL);
731
732 if (remove_list->next)
733 remove_list->next->prev = remove_list->prev;
734
735 if (remove_list->prev)
736 {
737 remove_list->prev->next = remove_list->next;
738 return_l = list;
739 }
740 else
741 return_l = remove_list->next;
742
743 if (remove_list == remove_list->accounting->last)
744 {
745 EINA_MAGIC_CHECK_LIST(list, NULL);
746 list->accounting->last = remove_list->prev;
747 }
748
749 _eina_list_mempool_list_free(remove_list);
750 return return_l;
751}
752
753EAPI Eina_List *
754eina_list_free(Eina_List *list)
755{
756 Eina_List *l, *free_l;
757
758 if (!list)
759 return NULL;
760
761 EINA_MAGIC_CHECK_LIST(list, NULL);
762
763 for (l = list; l; )
764 {
765 free_l = l;
766 l = l->next;
767
768 _eina_list_mempool_list_free(free_l);
769 }
770
771 return NULL;
772}
773
774EAPI Eina_List *
775eina_list_promote_list(Eina_List *list, Eina_List *move_list)
776{
777 if (!list)
778 return NULL;
779
780 if (!move_list)
781 {
782 return list; /* Promoting head to be head. */
783
784 }
785
786 if (move_list == list)
787 return list;
788
789 if (move_list->next == list)
790 return move_list;
791
792 EINA_MAGIC_CHECK_LIST(list, NULL);
793 EINA_MAGIC_CHECK_LIST(move_list, NULL);
794
795 /* Remove the promoted item from the list. */
796 if (!move_list->prev)
797 move_list->next->prev = NULL;
798 else
799 {
800 move_list->prev->next = move_list->next;
801 if (move_list == list->accounting->last)
802 list->accounting->last = move_list->prev;
803 else
804 move_list->next->prev = move_list->prev;
805 }
806
807 /* Add the promoted item in the list. */
808 move_list->next = list;
809 move_list->prev = list->prev;
810 list->prev = move_list;
811 if (move_list->prev)
812 move_list->prev->next = move_list;
813
814 return move_list;
815}
816
817EAPI Eina_List *
818eina_list_demote_list(Eina_List *list, Eina_List *move_list)
819{
820 if (!list)
821 return NULL;
822
823 if (!move_list)
824 {
825 return list; /* Demoting tail to be tail. */
826
827 }
828
829 if (move_list == list->accounting->last)
830 return list;
831
832 EINA_MAGIC_CHECK_LIST(list, NULL);
833 EINA_MAGIC_CHECK_LIST(move_list, NULL);
834
835 /* Update pointer list if necessary. */
836 if (list == move_list)
837 {
838 list = move_list->next; /* Remove the demoted item from the list. */
839
840 }
841
842 if (move_list->prev)
843 move_list->prev->next = move_list->next;
844
845 move_list->next->prev = move_list->prev;
846 /* Add the demoted item in the list. */
847 move_list->prev = list->accounting->last;
848 move_list->prev->next = move_list;
849 move_list->next = NULL;
850 list->accounting->last = move_list;
851
852 return list;
853}
854
855EAPI void *
856eina_list_data_find(const Eina_List *list, const void *data)
857{
858 if (eina_list_data_find_list(list, data))
859 return (void *)data;
860
861 return NULL;
862}
863
864EAPI Eina_Bool
865eina_list_move(Eina_List **to, Eina_List **from, void *data)
866{
867 Eina_List *l;
868
869 EINA_SAFETY_ON_NULL_RETURN_VAL(to, EINA_FALSE);
870 EINA_SAFETY_ON_NULL_RETURN_VAL(from, EINA_FALSE);
871 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
872
873 if (*to) EINA_MAGIC_CHECK_LIST(*to, EINA_FALSE);
874 EINA_MAGIC_CHECK_LIST(*from, EINA_FALSE);
875
876 l = eina_list_data_find_list(*from, data);
877 EINA_SAFETY_ON_NULL_RETURN_VAL(l, EINA_FALSE);
878
879 *to = eina_list_append(*to, data);
880 *from = eina_list_remove_list(*from, l);
881 return EINA_TRUE;
882}
883
884EAPI Eina_Bool
885eina_list_move_list(Eina_List **to, Eina_List **from, Eina_List *data)
886{
887 EINA_SAFETY_ON_NULL_RETURN_VAL(to, EINA_FALSE);
888 EINA_SAFETY_ON_NULL_RETURN_VAL(from, EINA_FALSE);
889
890 if (*to) EINA_MAGIC_CHECK_LIST(*to, EINA_FALSE);
891 EINA_MAGIC_CHECK_LIST(*from, EINA_FALSE);
892 EINA_MAGIC_CHECK_LIST(data, EINA_FALSE);
893
894 *to = eina_list_append(*to, data->data);
895 *from = eina_list_remove_list(*from, data);
896 return EINA_TRUE;
897}
898
899EAPI Eina_List *
900eina_list_data_find_list(const Eina_List *list, const void *data)
901{
902 const Eina_List *l;
903 void *list_data;
904
905 if (list)
906 EINA_MAGIC_CHECK_LIST(list, NULL);
907
908 EINA_LIST_FOREACH(list, l, list_data)
909 {
910 if (list_data == data)
911 return (Eina_List *)l;
912 }
913
914 return NULL;
915}
916
917EAPI void *
918eina_list_nth(const Eina_List *list, unsigned int n)
919{
920 Eina_List *l;
921
922 l = eina_list_nth_list(list, n);
923 return l ? l->data : NULL;
924}
925
926EAPI Eina_List *
927eina_list_nth_list(const Eina_List *list, unsigned int n)
928{
929 const Eina_List *l;
930 unsigned int i;
931
932 if (list)
933 EINA_MAGIC_CHECK_LIST(list, NULL);
934
935 /* check for non-existing nodes */
936 if ((!list) || (n > (list->accounting->count - 1)))
937 return NULL;
938
939 /* if the node is in the 2nd half of the list, search from the end
940 * else, search from the beginning.
941 */
942 if (n > (list->accounting->count / 2))
943 for (i = list->accounting->count - 1,
944 l = list->accounting->last;
945 l;
946 l = l->prev, i--)
947 {
948 if (i == n)
949 return (Eina_List *)l;
950 }
951 else
952 for (i = 0, l = list; l; l = l->next, i++)
953 {
954 if (i == n)
955 return (Eina_List *)l;
956 }
957
958 abort();
959}
960
961EAPI Eina_List *
962eina_list_reverse(Eina_List *list)
963{
964 Eina_List *l1, *l2;
965
966 if (!list)
967 return NULL;
968
969 EINA_MAGIC_CHECK_LIST(list, NULL);
970
971 l1 = list;
972 l2 = list->accounting->last;
973 while (l1 != l2)
974 {
975 void *data;
976
977 data = l1->data;
978 l1->data = l2->data;
979 l2->data = data;
980 l1 = l1->next;
981 if (l1 == l2)
982 break;
983
984 l2 = l2->prev;
985 }
986
987 return list;
988}
989
990EAPI Eina_List *
991eina_list_reverse_clone(const Eina_List *list)
992{
993 const Eina_List *l;
994 Eina_List *lclone;
995 void *data;
996
997 if (!list)
998 return NULL;
999
1000 EINA_MAGIC_CHECK_LIST(list, NULL);
1001
1002 lclone = NULL;
1003 EINA_LIST_FOREACH(list, l, data)
1004 lclone = eina_list_prepend(lclone, data);
1005
1006 return lclone;
1007}
1008
1009EAPI Eina_List *
1010eina_list_clone(const Eina_List *list)
1011{
1012 const Eina_List *l;
1013 Eina_List *lclone;
1014 void *data;
1015
1016 if (!list)
1017 return NULL;
1018
1019 EINA_MAGIC_CHECK_LIST(list, NULL);
1020
1021 lclone = NULL;
1022 EINA_LIST_FOREACH(list, l, data)
1023 lclone = eina_list_append(lclone, data);
1024
1025 return lclone;
1026}
1027
1028EAPI Eina_List *
1029eina_list_sort(Eina_List *list, unsigned int size, Eina_Compare_Cb func)
1030{
1031 unsigned int i = 0;
1032 unsigned int n = 0;
1033 Eina_List *tail = list;
1034 Eina_List *unsort = NULL;
1035 Eina_List *stack[EINA_LIST_SORT_STACK_SIZE];
1036
1037 EINA_SAFETY_ON_NULL_RETURN_VAL(func, list);
1038 if (!list)
1039 return NULL;
1040
1041 EINA_MAGIC_CHECK_LIST(list, NULL);
1042
1043 /* if the caller specified an invalid size, sort the whole list */
1044 if ((size == 0) ||
1045 (size > list->accounting->count))
1046 size = list->accounting->count;
1047
1048 if (size != list->accounting->count)
1049 {
1050 unsort = eina_list_nth_list(list, size);
1051 if (unsort)
1052 unsort->prev->next = NULL;
1053 }
1054
1055 while (tail)
1056 {
1057 unsigned int idx, tmp;
1058
1059 Eina_List *a = tail;
1060 Eina_List *b = tail->next;
1061
1062 if (!b)
1063 {
1064 stack[i++] = a;
1065 break;
1066 }
1067
1068 tail = b->next;
1069
1070 if (func(a->data, b->data) < 0)
1071 ((stack[i++] = a)->next = b)->next = 0;
1072 else
1073 ((stack[i++] = b)->next = a)->next = 0;
1074
1075 tmp = n++;
1076 for (idx = n ^ tmp; idx &= idx - 1; i--)
1077 stack[i - 2] = eina_list_sort_merge(stack[i - 2], stack[i - 1], func);
1078 }
1079
1080 while (i-- > 1)
1081 stack[i - 1] = eina_list_sort_merge(stack[i - 1], stack[i], func);
1082
1083 list = stack[0];
1084 tail = eina_list_sort_rebuild_prev(list);
1085
1086 if (unsort)
1087 {
1088 tail->next = unsort;
1089 unsort->prev = tail;
1090 }
1091 else
1092 list->accounting->last = tail;
1093
1094 return list;
1095}
1096
1097EAPI Eina_List *
1098eina_list_merge(Eina_List *left, Eina_List *right)
1099{
1100 unsigned int n_left, n_right;
1101
1102 if (!left)
1103 return right;
1104
1105 if (!right)
1106 return left;
1107
1108 left->accounting->last->next = right;
1109 right->prev = left->accounting->last;
1110
1111 n_left = left->accounting->count;
1112 n_right = right->accounting->count;
1113
1114 if (n_left >= n_right)
1115 {
1116 Eina_List *itr = right;
1117 left->accounting->last = right->accounting->last;
1118 left->accounting->count += n_right;
1119
1120 _eina_list_mempool_accounting_free(right->accounting);
1121
1122 do
1123 {
1124 itr->accounting = left->accounting;
1125 itr = itr->next;
1126 }
1127 while (itr);
1128 }
1129 else
1130 {
1131 Eina_List *itr = left->accounting->last;
1132 right->accounting->count += n_left;
1133
1134 _eina_list_mempool_accounting_free(left->accounting);
1135
1136 do
1137 {
1138 itr->accounting = right->accounting;
1139 itr = itr->prev;
1140 }
1141 while (itr);
1142 }
1143
1144 return left;
1145}
1146
1147
1148EAPI Eina_List *
1149eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right)
1150{
1151 Eina_List *next;
1152 Eina_List *itr;
1153
1154 if(!right)
1155 return list;
1156
1157 *right = NULL;
1158
1159 if (!list)
1160 return NULL;
1161
1162 if (!relative)
1163 {
1164 *right = list;
1165 return NULL;
1166 }
1167
1168 if (relative == eina_list_last(list))
1169 return list;
1170
1171 next = eina_list_next(relative);
1172 next->prev = NULL;
1173 next->accounting = _eina_list_mempool_accounting_new(next);
1174 next->accounting->last = list->accounting->last;
1175 *right = next;
1176
1177 itr = next;
1178 do
1179 {
1180 itr->accounting = next->accounting;
1181 next->accounting->count++;
1182 itr = itr->next;
1183 }
1184 while (itr);
1185
1186 relative->next = NULL;
1187 list->accounting->last = relative;
1188 list->accounting->count = list->accounting->count - next->accounting->count;
1189
1190 return list;
1191}
1192
1193EAPI Eina_List *
1194eina_list_sorted_merge(Eina_List *left, Eina_List *right, Eina_Compare_Cb func)
1195{
1196 Eina_List *ret;
1197 Eina_List *current;
1198
1199 EINA_SAFETY_ON_NULL_RETURN_VAL(func, NULL);
1200
1201 if (!left)
1202 return right;
1203
1204 if (!right)
1205 return left;
1206
1207 if (func(left->data, right->data) < 0)
1208 {
1209 ret = left;
1210 current = left;
1211 left = left->next;
1212 ret->accounting->count += right->accounting->count;
1213
1214 _eina_list_mempool_accounting_free(right->accounting);
1215 }
1216 else
1217 {
1218 ret = right;
1219 current = right;
1220 right = right->next;
1221 ret->accounting->count += left->accounting->count;
1222
1223 _eina_list_mempool_accounting_free(left->accounting);
1224 }
1225
1226 while (left && right)
1227 {
1228 if (func(left->data, right->data) < 0)
1229 {
1230 current->next = left;
1231 left->prev = current;
1232 left = left->next;
1233 }
1234 else
1235 {
1236 current->next = right;
1237 right->prev = current;
1238 right = right->next;
1239 }
1240
1241 current = current->next;
1242 current->accounting = ret->accounting;
1243 }
1244
1245 if (left)
1246 {
1247 current->next = left;
1248 left->prev = current;
1249 current->accounting = ret->accounting;
1250 }
1251
1252 if (right)
1253 {
1254 current->next = right;
1255 right->prev = current;
1256 current->accounting = ret->accounting;
1257 }
1258
1259 while (current->next)
1260 {
1261 current = current->next;
1262 current->accounting = ret->accounting;
1263 }
1264
1265 ret->accounting->last = current;
1266
1267 return ret;
1268}
1269
1270EAPI Eina_List *
1271eina_list_search_sorted_near_list(const Eina_List *list,
1272 Eina_Compare_Cb func,
1273 const void *data,
1274 int *result_cmp)
1275{
1276 const Eina_List *ct;
1277 unsigned int inf, sup, cur;
1278 int cmp;
1279
1280 if (!list)
1281 {
1282 if (result_cmp)
1283 *result_cmp = 0;
1284
1285 return NULL;
1286 }
1287
1288 if (list->accounting->count == 1)
1289 {
1290 if (result_cmp)
1291 *result_cmp = func(list->data, data);
1292
1293 return (Eina_List *)list;
1294 }
1295
1296 /* list walk is expensive, do quick check: tail */
1297 ct = list->accounting->last;
1298 cmp = func(ct->data, data);
1299 if (cmp <= 0)
1300 goto end;
1301
1302 /* list walk is expensive, do quick check: head */
1303 ct = list;
1304 cmp = func(ct->data, data);
1305 if (cmp >= 0)
1306 goto end;
1307
1308 /* inclusive bounds */
1309 inf = 1;
1310 sup = list->accounting->count - 2;
1311 cur = 1;
1312 ct = list->next;
1313
1314 /* no loop, just compare if comparison value is important to caller */
1315 if (inf > sup)
1316 {
1317 if (result_cmp)
1318 cmp = func(ct->data, data);
1319
1320 goto end;
1321 }
1322
1323 while (inf <= sup)
1324 {
1325 unsigned int tmp = cur;
1326 cur = inf + ((sup - inf) >> 1);
1327 if (tmp < cur)
1328 for (; tmp != cur; tmp++, ct = ct->next) ;
1329 else if (tmp > cur)
1330 for (; tmp != cur; tmp--, ct = ct->prev) ;
1331
1332 cmp = func(ct->data, data);
1333 if (cmp == 0)
1334 break;
1335 else if (cmp < 0)
1336 inf = cur + 1;
1337 else if (cmp > 0)
1338 {
1339 if (cur > 0)
1340 sup = cur - 1;
1341 else
1342 break;
1343 }
1344 else
1345 break;
1346 }
1347
1348end:
1349 if (result_cmp)
1350 *result_cmp = cmp;
1351
1352 return (Eina_List *)ct;
1353}
1354
1355EAPI Eina_List *
1356eina_list_search_sorted_list(const Eina_List *list,
1357 Eina_Compare_Cb func,
1358 const void *data)
1359{
1360 Eina_List *lnear;
1361 int cmp;
1362
1363 lnear = eina_list_search_sorted_near_list(list, func, data, &cmp);
1364 if (!lnear)
1365 return NULL;
1366
1367 if (cmp == 0)
1368 return lnear;
1369
1370 return NULL;
1371}
1372
1373
1374EAPI void *
1375eina_list_search_sorted(const Eina_List *list,
1376 Eina_Compare_Cb func,
1377 const void *data)
1378{
1379 return eina_list_data_get(eina_list_search_sorted_list(list, func, data));
1380}
1381
1382EAPI Eina_List *
1383eina_list_search_unsorted_list(const Eina_List *list,
1384 Eina_Compare_Cb func,
1385 const void *data)
1386{
1387 const Eina_List *l;
1388 void *d;
1389
1390 EINA_LIST_FOREACH(list, l, d)
1391 {
1392 if (!func(d, data))
1393 return (Eina_List *)l;
1394 }
1395 return NULL;
1396}
1397
1398EAPI void *
1399eina_list_search_unsorted(const Eina_List *list,
1400 Eina_Compare_Cb func,
1401 const void *data)
1402{
1403 return eina_list_data_get(eina_list_search_unsorted_list(list, func, data));
1404}
1405
1406
1407EAPI Eina_Iterator *
1408eina_list_iterator_new(const Eina_List *list)
1409{
1410 Eina_Iterator_List *it;
1411
1412 eina_error_set(0);
1413 it = calloc(1, sizeof (Eina_Iterator_List));
1414 if (!it)
1415 {
1416 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1417 return NULL;
1418 }
1419
1420 EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR);
1421 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1422
1423 it->head = list;
1424 it->current = list;
1425
1426 it->iterator.version = EINA_ITERATOR_VERSION;
1427 it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_next);
1428 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1429 eina_list_iterator_get_container);
1430 it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free);
1431
1432 return &it->iterator;
1433}
1434
1435EAPI Eina_Iterator *
1436eina_list_iterator_reversed_new(const Eina_List *list)
1437{
1438 Eina_Iterator_List *it;
1439
1440 eina_error_set(0);
1441 it = calloc(1, sizeof (Eina_Iterator_List));
1442 if (!it)
1443 {
1444 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1445 return NULL;
1446 }
1447
1448 EINA_MAGIC_SET(it, EINA_MAGIC_LIST_ITERATOR);
1449 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1450
1451 it->head = eina_list_last(list);
1452 it->current = it->head;
1453
1454 it->iterator.version = EINA_ITERATOR_VERSION;
1455 it->iterator.next = FUNC_ITERATOR_NEXT(eina_list_iterator_prev);
1456 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1457 eina_list_iterator_get_container);
1458 it->iterator.free = FUNC_ITERATOR_FREE(eina_list_iterator_free);
1459
1460 return &it->iterator;
1461}
1462
1463EAPI Eina_Accessor *
1464eina_list_accessor_new(const Eina_List *list)
1465{
1466 Eina_Accessor_List *ac;
1467
1468 eina_error_set(0);
1469 ac = calloc(1, sizeof (Eina_Accessor_List));
1470 if (!ac)
1471 {
1472 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1473 return NULL;
1474 }
1475
1476 EINA_MAGIC_SET(ac, EINA_MAGIC_LIST_ACCESSOR);
1477 EINA_MAGIC_SET(&ac->accessor, EINA_MAGIC_ACCESSOR);
1478
1479 ac->head = list;
1480 ac->current = list;
1481 ac->index = 0;
1482
1483 ac->accessor.version = EINA_ACCESSOR_VERSION;
1484 ac->accessor.get_at = FUNC_ACCESSOR_GET_AT(eina_list_accessor_get_at);
1485 ac->accessor.get_container = FUNC_ACCESSOR_GET_CONTAINER(
1486 eina_list_accessor_get_container);
1487 ac->accessor.free = FUNC_ACCESSOR_FREE(eina_list_accessor_free);
1488
1489 return &ac->accessor;
1490}
diff --git a/libraries/eina/src/lib/eina_log.c b/libraries/eina/src/lib/eina_log.c
new file mode 100644
index 0000000..dd772d2
--- /dev/null
+++ b/libraries/eina/src/lib/eina_log.c
@@ -0,0 +1,1852 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2009 Jorge Luis Zapata Muga, Cedric Bail, Andre Dieb
3 * Martins
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#include <stdio.h>
25#include <string.h>
26#include <stdlib.h>
27#include <fnmatch.h>
28#include <assert.h>
29#include <errno.h>
30
31#ifdef HAVE_UNISTD_H
32# include <unistd.h>
33#endif
34
35#ifdef EFL_HAVE_POSIX_THREADS
36# include <pthread.h>
37#endif
38
39#ifdef HAVE_EVIL
40# include <Evil.h>
41#endif
42
43#include "eina_config.h"
44#include "eina_private.h"
45#include "eina_inlist.h"
46
47/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
48#include "eina_safety_checks.h"
49#include "eina_log.h"
50
51/* TODO
52 * + printing logs to stdout or stderr can be implemented
53 * using a queue, useful for multiple threads printing
54 * + add a wrapper for assert?
55 */
56
57/*============================================================================*
58* Local *
59*============================================================================*/
60
61/**
62 * @cond LOCAL
63 */
64
65#define EINA_LOG_ENV_ABORT "EINA_LOG_ABORT"
66#define EINA_LOG_ENV_ABORT_LEVEL "EINA_LOG_ABORT_LEVEL"
67#define EINA_LOG_ENV_LEVEL "EINA_LOG_LEVEL"
68#define EINA_LOG_ENV_LEVELS "EINA_LOG_LEVELS"
69#define EINA_LOG_ENV_LEVELS_GLOB "EINA_LOG_LEVELS_GLOB"
70#define EINA_LOG_ENV_COLOR_DISABLE "EINA_LOG_COLOR_DISABLE"
71#define EINA_LOG_ENV_FILE_DISABLE "EINA_LOG_FILE_DISABLE"
72#define EINA_LOG_ENV_FUNCTION_DISABLE "EINA_LOG_FUNCTION_DISABLE"
73
74
75// Structure for storing domain level settings passed from the command line
76// that will be matched with application-defined domains.
77typedef struct _Eina_Log_Domain_Level_Pending Eina_Log_Domain_Level_Pending;
78struct _Eina_Log_Domain_Level_Pending
79{
80 EINA_INLIST;
81 unsigned int level;
82 size_t namelen;
83 char name[];
84};
85
86/*
87 * List of levels for domains set by the user before the domains are registered,
88 * updates the domain levels on the first log and clears itself.
89 */
90static Eina_Inlist *_pending_list = NULL;
91static Eina_Inlist *_glob_list = NULL;
92
93// Disable color flag (can be changed through the env var
94// EINA_LOG_ENV_COLOR_DISABLE).
95static Eina_Bool _disable_color = EINA_FALSE;
96static Eina_Bool _disable_file = EINA_FALSE;
97static Eina_Bool _disable_function = EINA_FALSE;
98static Eina_Bool _abort_on_critical = EINA_FALSE;
99static int _abort_level_on_critical = EINA_LOG_LEVEL_CRITICAL;
100
101#ifdef EFL_HAVE_THREADS
102
103static Eina_Bool _threads_enabled = EINA_FALSE;
104static Eina_Bool _threads_inited = EINA_FALSE;
105
106# ifdef EFL_HAVE_POSIX_THREADS
107
108typedef pthread_t Thread;
109
110static pthread_t _main_thread;
111
112# define SELF() pthread_self()
113# define IS_MAIN(t) pthread_equal(t, _main_thread)
114# define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t))
115# define CHECK_MAIN(...) \
116 do { \
117 if (!IS_MAIN(pthread_self())) { \
118 fprintf(stderr, \
119 "ERR: not main thread! current=%lu, main=%lu\n", \
120 (unsigned long)pthread_self(), \
121 (unsigned long)_main_thread); \
122 return __VA_ARGS__; \
123 } \
124 } while (0)
125
126# ifdef EFL_HAVE_POSIX_THREADS_SPINLOCK
127
128static pthread_spinlock_t _log_lock;
129
130static Eina_Bool _eina_log_spinlock_init(void)
131{
132 if (pthread_spin_init(&_log_lock, PTHREAD_PROCESS_PRIVATE) == 0)
133 return EINA_TRUE;
134
135 fprintf(stderr,
136 "ERROR: pthread_spin_init(%p, PTHREAD_PROCESS_PRIVATE): %s\n",
137 &_log_lock, strerror(errno));
138 return EINA_FALSE;
139}
140
141# define LOG_LOCK() \
142 if (_threads_enabled) \
143 do { \
144 if (0) { \
145 fprintf(stderr, "+++LOG LOG_LOCKED! [%s, %lu]\n", \
146 __FUNCTION__, (unsigned long)pthread_self()); } \
147 if (EINA_UNLIKELY(_threads_enabled)) { \
148 pthread_spin_lock(&_log_lock); } \
149 } while (0)
150# define LOG_UNLOCK() \
151 if (_threads_enabled) \
152 do { \
153 if (EINA_UNLIKELY(_threads_enabled)) { \
154 pthread_spin_unlock(&_log_lock); } \
155 if (0) { \
156 fprintf(stderr, \
157 "---LOG LOG_UNLOCKED! [%s, %lu]\n", \
158 __FUNCTION__, (unsigned long)pthread_self()); } \
159 } while (0)
160# define INIT() _eina_log_spinlock_init()
161# define SHUTDOWN() pthread_spin_destroy(&_log_lock)
162
163# else /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */
164
165static pthread_mutex_t _log_mutex = PTHREAD_MUTEX_INITIALIZER;
166# define LOG_LOCK() if(_threads_enabled) {pthread_mutex_lock(&_log_mutex); }
167# define LOG_UNLOCK() if(_threads_enabled) {pthread_mutex_unlock(&_log_mutex); }
168# define INIT() (1)
169# define SHUTDOWN() do {} while (0)
170
171# endif /* ! EFL_HAVE_POSIX_THREADS_SPINLOCK */
172
173# else /* EFL_HAVE_WIN32_THREADS */
174
175typedef DWORD Thread;
176
177static DWORD _main_thread;
178
179# define SELF() GetCurrentThreadId()
180# define IS_MAIN(t) (t == _main_thread)
181# define IS_OTHER(t) EINA_UNLIKELY(!IS_MAIN(t))
182# define CHECK_MAIN(...) \
183 do { \
184 if (!IS_MAIN(GetCurrentThreadId())) { \
185 fprintf(stderr, \
186 "ERR: not main thread! current=%lu, main=%lu\n", \
187 GetCurrentThreadId(), _main_thread); \
188 return __VA_ARGS__; \
189 } \
190 } while (0)
191
192static HANDLE _log_mutex = NULL;
193
194# define LOG_LOCK() if(_threads_enabled) WaitForSingleObject(_log_mutex, INFINITE)
195# define LOG_UNLOCK() if(_threads_enabled) ReleaseMutex(_log_mutex)
196# define INIT() ((_log_mutex = CreateMutex(NULL, FALSE, NULL)) ? 1 : 0)
197# define SHUTDOWN() if (_log_mutex) CloseHandle(_log_mutex)
198
199# endif /* EFL_HAVE_WIN32_THREADS */
200
201#else /* ! EFL_HAVE_THREADS */
202
203# define LOG_LOCK() do {} while (0)
204# define LOG_UNLOCK() do {} while (0)
205# define IS_MAIN(t) (1)
206# define IS_OTHER(t) (0)
207# define CHECK_MAIN(...) do {} while (0)
208# define INIT() (1)
209# define SHUTDOWN() do {} while (0)
210
211#endif /* ! EFL_HAVE_THREADS */
212
213
214// List of domains registered
215static Eina_Log_Domain *_log_domains = NULL;
216static unsigned int _log_domains_count = 0;
217static size_t _log_domains_allocated = 0;
218
219// Default function for printing on domains
220static Eina_Log_Print_Cb _print_cb = eina_log_print_cb_stderr;
221static void *_print_cb_data = NULL;
222
223#ifdef DEBUG
224static Eina_Log_Level _log_level = EINA_LOG_LEVEL_DBG;
225#elif DEBUG_CRITICAL
226static Eina_Log_Level _log_level = EINA_LOG_LEVEL_CRITICAL;
227#else
228static Eina_Log_Level _log_level = EINA_LOG_LEVEL_ERR;
229#endif
230
231/* NOTE: if you change this, also change:
232 * eina_log_print_level_name_get()
233 * eina_log_print_level_name_color_get()
234 */
235static const char *_names[] = {
236 "CRI",
237 "ERR",
238 "WRN",
239 "INF",
240 "DBG",
241};
242
243#ifdef _WIN32
244static int
245eina_log_win32_color_get(const char *domain_str)
246{
247 char *str;
248 char *tmp;
249 char *tmp2;
250 int code = -1;
251 int lighted = 0;
252 int ret = 0;
253
254 str = strdup(domain_str);
255 if (!str)
256 return 0;
257
258 /* this should not append */
259 if (str[0] != '\033')
260 {
261 free(str);
262 return 0;
263 }
264
265 /* we skip the first char and the [ */
266 tmp = tmp2 = str + 2;
267 while (*tmp != 'm')
268 {
269 if (*tmp == ';')
270 {
271 *tmp = '\0';
272 code = atol(tmp2);
273 tmp++;
274 tmp2 = tmp;
275 }
276
277 tmp++;
278 }
279 *tmp = '\0';
280 if (code < 0)
281 code = atol(tmp2);
282 else
283 lighted = atol(tmp2);
284
285 free(str);
286
287 if (code < lighted)
288 {
289 int c;
290
291 c = code;
292 code = lighted;
293 lighted = c;
294 }
295
296 if (lighted)
297 ret = FOREGROUND_INTENSITY;
298
299 if (code == 31)
300 ret |= FOREGROUND_RED;
301 else if (code == 32)
302 ret |= FOREGROUND_GREEN;
303 else if (code == 33)
304 ret |= FOREGROUND_RED | FOREGROUND_GREEN;
305 else if (code == 34)
306 ret |= FOREGROUND_BLUE;
307 else if (code == 36)
308 ret |= FOREGROUND_GREEN | FOREGROUND_BLUE;
309 else if (code == 37)
310 ret |= FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
311
312 return ret;
313}
314#endif
315
316static inline unsigned int
317eina_log_pid_get(void)
318{
319 return (unsigned int)getpid();
320}
321
322static inline void
323eina_log_print_level_name_get(int level, const char **p_name)
324{
325 static char buf[4];
326 /* NOTE: if you change this, also change
327 * eina_log_print_level_name_color_get()
328 * eina_log_level_name_get() (at eina_inline_log.x)
329 */
330 if (EINA_UNLIKELY(level < 0))
331 {
332 snprintf(buf, sizeof(buf), "%03d", level);
333 *p_name = buf;
334 }
335 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
336 {
337 snprintf(buf, sizeof(buf), "%03d", level);
338 *p_name = buf;
339 }
340 else
341 *p_name = _names[level];
342}
343
344#ifdef _WIN32
345static inline void
346eina_log_print_level_name_color_get(int level,
347 const char **p_name,
348 int *p_color)
349{
350 static char buf[4];
351 /* NOTE: if you change this, also change:
352 * eina_log_print_level_name_get()
353 */
354 if (EINA_UNLIKELY(level < 0))
355 {
356 snprintf(buf, sizeof(buf), "%03d", level);
357 *p_name = buf;
358 }
359 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
360 {
361 snprintf(buf, sizeof(buf), "%03d", level);
362 *p_name = buf;
363 }
364 else
365 *p_name = _names[level];
366
367 *p_color = eina_log_win32_color_get(eina_log_level_color_get(level));
368}
369#else
370static inline void
371eina_log_print_level_name_color_get(int level,
372 const char **p_name,
373 const char **p_color)
374{
375 static char buf[4];
376 /* NOTE: if you change this, also change:
377 * eina_log_print_level_name_get()
378 */
379 if (EINA_UNLIKELY(level < 0))
380 {
381 snprintf(buf, sizeof(buf), "%03d", level);
382 *p_name = buf;
383 }
384 else if (EINA_UNLIKELY(level >= EINA_LOG_LEVELS))
385 {
386 snprintf(buf, sizeof(buf), "%03d", level);
387 *p_name = buf;
388 }
389 else
390 *p_name = _names[level];
391
392 *p_color = eina_log_level_color_get(level);
393}
394#endif
395
396#define DECLARE_LEVEL_NAME(level) const char *name; \
397 eina_log_print_level_name_get(level, &name)
398#ifdef _WIN32
399# define DECLARE_LEVEL_NAME_COLOR(level) const char *name; int color; \
400 eina_log_print_level_name_color_get(level, &name, &color)
401#else
402# define DECLARE_LEVEL_NAME_COLOR(level) const char *name, *color; \
403 eina_log_print_level_name_color_get(level, &name, &color)
404#endif
405
406/** No threads, No color */
407static void
408eina_log_print_prefix_NOthreads_NOcolor_file_func(FILE *fp,
409 const Eina_Log_Domain *d,
410 Eina_Log_Level level,
411 const char *file,
412 const char *fnc,
413 int line)
414{
415 DECLARE_LEVEL_NAME(level);
416 fprintf(fp, "%s<%u>:%s %s:%d %s() ", name, eina_log_pid_get(),
417 d->domain_str, file, line, fnc);
418}
419
420static void
421eina_log_print_prefix_NOthreads_NOcolor_NOfile_func(FILE *fp,
422 const Eina_Log_Domain *d,
423 Eina_Log_Level level,
424 const char *file __UNUSED__,
425 const char *fnc,
426 int line __UNUSED__)
427{
428 DECLARE_LEVEL_NAME(level);
429 fprintf(fp, "%s<%u>:%s %s() ", name, eina_log_pid_get(), d->domain_str,
430 fnc);
431}
432
433static void
434eina_log_print_prefix_NOthreads_NOcolor_file_NOfunc(FILE *fp,
435 const Eina_Log_Domain *d,
436 Eina_Log_Level level,
437 const char *file,
438 const char *fnc __UNUSED__,
439 int line)
440{
441 DECLARE_LEVEL_NAME(level);
442 fprintf(fp, "%s<%u>:%s %s:%d ", name, eina_log_pid_get(), d->domain_str,
443 file, line);
444}
445
446/* No threads, color */
447static void
448eina_log_print_prefix_NOthreads_color_file_func(FILE *fp,
449 const Eina_Log_Domain *d,
450 Eina_Log_Level level,
451 const char *file,
452 const char *fnc,
453 int line)
454{
455 DECLARE_LEVEL_NAME_COLOR(level);
456#ifdef _WIN32_WCE
457 fprintf(fp, "%s<%u>:%s %s:%d %s() ", name, eina_log_pid_get(),
458 d->domain_str, file, line, fnc);
459#elif _WIN32
460 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
461 color);
462 fprintf(fp, "%s", name);
463 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
464 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
465 fprintf(fp, ":");
466 SetConsoleTextAttribute(GetStdHandle(
467 STD_OUTPUT_HANDLE),
468 eina_log_win32_color_get(d->domain_str));
469 fprintf(fp, "%s", d->name);
470 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
471 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
472 fprintf(fp, " %s:%d ", file, line);
473 SetConsoleTextAttribute(GetStdHandle(
474 STD_OUTPUT_HANDLE),
475 FOREGROUND_INTENSITY | FOREGROUND_RED |
476 FOREGROUND_GREEN | FOREGROUND_BLUE);
477 fprintf(fp, "%s()", fnc);
478 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
479 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
480 fprintf(fp, " ");
481#else
482 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d "
483 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
484 color, name, eina_log_pid_get(), d->domain_str, file, line, fnc);
485#endif
486}
487
488static void
489eina_log_print_prefix_NOthreads_color_NOfile_func(FILE *fp,
490 const Eina_Log_Domain *d,
491 Eina_Log_Level level,
492 const char *file __UNUSED__,
493 const char *fnc,
494 int line __UNUSED__)
495{
496 DECLARE_LEVEL_NAME_COLOR(level);
497#ifdef _WIN32_WCE
498 fprintf(fp, "%s<%u>:%s %s() ", name, eina_log_pid_get(), d->domain_str,
499 fnc);
500#elif _WIN32
501 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
502 color);
503 fprintf(fp, "%s", name);
504 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
505 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
506 fprintf(fp, ":");
507 SetConsoleTextAttribute(GetStdHandle(
508 STD_OUTPUT_HANDLE),
509 eina_log_win32_color_get(d->domain_str));
510 fprintf(fp, "%s", d->name);
511 SetConsoleTextAttribute(GetStdHandle(
512 STD_OUTPUT_HANDLE),
513 FOREGROUND_INTENSITY | FOREGROUND_RED |
514 FOREGROUND_GREEN | FOREGROUND_BLUE);
515 fprintf(fp, "%s()", fnc);
516 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
517 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
518 fprintf(fp, " ");
519#else
520 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s "
521 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
522 color, name, eina_log_pid_get(), d->domain_str, fnc);
523#endif
524}
525
526static void
527eina_log_print_prefix_NOthreads_color_file_NOfunc(FILE *fp,
528 const Eina_Log_Domain *d,
529 Eina_Log_Level level,
530 const char *file,
531 const char *fnc __UNUSED__,
532 int line)
533{
534 DECLARE_LEVEL_NAME_COLOR(level);
535#ifdef _WIN32_WCE
536 fprintf(fp, "%s<%u>:%s %s:%d ", name, eina_log_pid_get(), d->domain_str,
537 file, line);
538#elif _WIN32
539 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
540 color);
541 fprintf(fp, "%s", name);
542 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
543 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
544 fprintf(fp, ":");
545 SetConsoleTextAttribute(GetStdHandle(
546 STD_OUTPUT_HANDLE),
547 eina_log_win32_color_get(d->domain_str));
548 fprintf(fp, "%s", d->name);
549 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
550 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
551 fprintf(fp, " %s:%d ", file, line);
552#else
553 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d ",
554 color, name, eina_log_pid_get(), d->domain_str, file, line);
555#endif
556}
557
558/** threads, No color */
559#ifdef EFL_HAVE_THREADS
560static void
561eina_log_print_prefix_threads_NOcolor_file_func(FILE *fp,
562 const Eina_Log_Domain *d,
563 Eina_Log_Level level,
564 const char *file,
565 const char *fnc,
566 int line)
567{
568 Thread cur;
569
570 DECLARE_LEVEL_NAME(level);
571 cur = SELF();
572 if (IS_OTHER(cur))
573 {
574 fprintf(fp, "%s<%u>:%s[T:%lu] %s:%d %s() ",
575 name, eina_log_pid_get(), d->domain_str,
576 (unsigned long)cur, file, line, fnc);
577 return;
578 }
579 fprintf(fp, "%s<%u>:%s %s:%d %s() ",
580 name, eina_log_pid_get(), d->domain_str, file, line, fnc);
581}
582
583static void
584eina_log_print_prefix_threads_NOcolor_NOfile_func(FILE *fp,
585 const Eina_Log_Domain *d,
586 Eina_Log_Level level,
587 const char *file __UNUSED__,
588 const char *fnc,
589 int line __UNUSED__)
590{
591 Thread cur;
592
593 DECLARE_LEVEL_NAME(level);
594 cur = SELF();
595 if (IS_OTHER(cur))
596 {
597 fprintf(fp, "%s<%u>:%s[T:%lu] %s() ",
598 name, eina_log_pid_get(), d->domain_str,
599 (unsigned long)cur, fnc);
600 return;
601 }
602 fprintf(fp, "%s<%u>:%s %s() ",
603 name, eina_log_pid_get(), d->domain_str, fnc);
604}
605
606static void
607eina_log_print_prefix_threads_NOcolor_file_NOfunc(FILE *fp,
608 const Eina_Log_Domain *d,
609 Eina_Log_Level level,
610 const char *file,
611 const char *fnc __UNUSED__,
612 int line)
613{
614 Thread cur;
615
616 DECLARE_LEVEL_NAME(level);
617 cur = SELF();
618 if (IS_OTHER(cur))
619 {
620 fprintf(fp, "%s<%u>:%s[T:%lu] %s:%d ",
621 name, eina_log_pid_get(), d->domain_str, (unsigned long)cur,
622 file, line);
623 return;
624 }
625
626 fprintf(fp, "%s<%u>:%s %s:%d ",
627 name, eina_log_pid_get(), d->domain_str, file, line);
628}
629
630/* threads, color */
631static void
632eina_log_print_prefix_threads_color_file_func(FILE *fp,
633 const Eina_Log_Domain *d,
634 Eina_Log_Level level,
635 const char *file,
636 const char *fnc,
637 int line)
638{
639 Thread cur;
640
641 DECLARE_LEVEL_NAME_COLOR(level);
642 cur = SELF();
643 if (IS_OTHER(cur))
644 {
645# ifdef _WIN32
646 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
647 color);
648 fprintf(fp, "%s", name);
649 SetConsoleTextAttribute(GetStdHandle(
650 STD_OUTPUT_HANDLE),
651 FOREGROUND_RED | FOREGROUND_GREEN |
652 FOREGROUND_BLUE);
653 fprintf(fp, ":");
654 SetConsoleTextAttribute(GetStdHandle(
655 STD_OUTPUT_HANDLE),
656 eina_log_win32_color_get(d->domain_str));
657 fprintf(fp, "%s[T:", d->name);
658 SetConsoleTextAttribute(GetStdHandle(
659 STD_OUTPUT_HANDLE),
660 FOREGROUND_RED | FOREGROUND_GREEN |
661 FOREGROUND_BLUE);
662 fprintf(fp, "[T:");
663 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
664 FOREGROUND_GREEN | FOREGROUND_BLUE);
665 fprintf(fp, "%lu", (unsigned long)cur);
666 SetConsoleTextAttribute(GetStdHandle(
667 STD_OUTPUT_HANDLE),
668 FOREGROUND_RED | FOREGROUND_GREEN |
669 FOREGROUND_BLUE);
670 fprintf(fp, "] %s:%d ", file, line);
671 SetConsoleTextAttribute(GetStdHandle(
672 STD_OUTPUT_HANDLE),
673 FOREGROUND_INTENSITY | FOREGROUND_RED |
674 FOREGROUND_GREEN | FOREGROUND_BLUE);
675 fprintf(fp, "%s()", fnc);
676 SetConsoleTextAttribute(GetStdHandle(
677 STD_OUTPUT_HANDLE),
678 FOREGROUND_RED | FOREGROUND_GREEN |
679 FOREGROUND_BLUE);
680 fprintf(fp, " ");
681# else
682 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:"
683 EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d "
684 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
685 color, name, eina_log_pid_get() ,d->domain_str,
686 (unsigned long)cur, file, line, fnc);
687# endif
688 return;
689 }
690
691# ifdef _WIN32
692 eina_log_print_prefix_NOthreads_color_file_func(fp,
693 d,
694 level,
695 file,
696 fnc,
697 line);
698# else
699 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s %s:%d "
700 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
701 color, name, eina_log_pid_get(), d->domain_str, file, line, fnc);
702# endif
703}
704
705static void
706eina_log_print_prefix_threads_color_NOfile_func(FILE *fp,
707 const Eina_Log_Domain *d,
708 Eina_Log_Level level,
709 const char *file __UNUSED__,
710 const char *fnc,
711 int line __UNUSED__)
712{
713 Thread cur;
714
715 DECLARE_LEVEL_NAME_COLOR(level);
716 cur = SELF();
717 if (IS_OTHER(cur))
718 {
719# ifdef _WIN32
720 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
721 color);
722 fprintf(fp, "%s", name);
723 SetConsoleTextAttribute(GetStdHandle(
724 STD_OUTPUT_HANDLE),
725 FOREGROUND_RED | FOREGROUND_GREEN |
726 FOREGROUND_BLUE);
727 fprintf(fp, ":");
728 SetConsoleTextAttribute(GetStdHandle(
729 STD_OUTPUT_HANDLE),
730 eina_log_win32_color_get(d->domain_str));
731 fprintf(fp, "%s[T:", d->name);
732 SetConsoleTextAttribute(GetStdHandle(
733 STD_OUTPUT_HANDLE),
734 FOREGROUND_RED | FOREGROUND_GREEN |
735 FOREGROUND_BLUE);
736 fprintf(fp, "[T:");
737 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
738 FOREGROUND_GREEN | FOREGROUND_BLUE);
739 fprintf(fp, "%lu", (unsigned long)cur);
740 SetConsoleTextAttribute(GetStdHandle(
741 STD_OUTPUT_HANDLE),
742 FOREGROUND_INTENSITY | FOREGROUND_RED |
743 FOREGROUND_GREEN | FOREGROUND_BLUE);
744 fprintf(fp, "%s()", fnc);
745 SetConsoleTextAttribute(GetStdHandle(
746 STD_OUTPUT_HANDLE),
747 FOREGROUND_RED | FOREGROUND_GREEN |
748 FOREGROUND_BLUE);
749 fprintf(fp, " ");
750# else
751 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:"
752 EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] "
753 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
754 color, name, eina_log_pid_get(), d->domain_str,
755 (unsigned long)cur, fnc);
756# endif
757 return;
758 }
759
760# ifdef _WIN32
761 eina_log_print_prefix_NOthreads_color_NOfile_func(fp,
762 d,
763 level,
764 file,
765 fnc,
766 line);
767# else
768 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s "
769 EINA_COLOR_HIGH "%s()" EINA_COLOR_RESET " ",
770 color, name, eina_log_pid_get(), d->domain_str, fnc);
771# endif
772}
773
774static void
775eina_log_print_prefix_threads_color_file_NOfunc(FILE *fp,
776 const Eina_Log_Domain *d,
777 Eina_Log_Level level,
778 const char *file,
779 const char *fnc __UNUSED__,
780 int line)
781{
782 Thread cur;
783
784 DECLARE_LEVEL_NAME_COLOR(level);
785 cur = SELF();
786 if (IS_OTHER(cur))
787 {
788# ifdef _WIN32
789 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
790 color);
791 fprintf(fp, "%s", name);
792 SetConsoleTextAttribute(GetStdHandle(
793 STD_OUTPUT_HANDLE),
794 FOREGROUND_RED | FOREGROUND_GREEN |
795 FOREGROUND_BLUE);
796 fprintf(fp, ":");
797 SetConsoleTextAttribute(GetStdHandle(
798 STD_OUTPUT_HANDLE),
799 eina_log_win32_color_get(d->domain_str));
800 fprintf(fp, "%s[T:", d->name);
801 SetConsoleTextAttribute(GetStdHandle(
802 STD_OUTPUT_HANDLE),
803 FOREGROUND_RED | FOREGROUND_GREEN |
804 FOREGROUND_BLUE);
805 fprintf(fp, "[T:");
806 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
807 FOREGROUND_GREEN | FOREGROUND_BLUE);
808 fprintf(fp, "%lu", (unsigned long)cur);
809 SetConsoleTextAttribute(GetStdHandle(
810 STD_OUTPUT_HANDLE),
811 FOREGROUND_RED | FOREGROUND_GREEN |
812 FOREGROUND_BLUE);
813 fprintf(fp, "] %s:%d ", file, line);
814# else
815 fprintf(fp, "%s%s<%u>" EINA_COLOR_RESET ":%s[T:"
816 EINA_COLOR_ORANGE "%lu" EINA_COLOR_RESET "] %s:%d ",
817 color, name, eina_log_pid_get(), d->domain_str,
818 (unsigned long)cur, file, line);
819# endif
820 return;
821 }
822
823# ifdef _WIN32
824 eina_log_print_prefix_NOthreads_color_file_NOfunc(fp,
825 d,
826 level,
827 file,
828 fnc,
829 line);
830# else
831 fprintf(fp, "%s%s" EINA_COLOR_RESET ":%s %s:%d ",
832 color, name, d->domain_str, file, line);
833# endif
834}
835#endif /* EFL_HAVE_THREADS */
836
837static void (*_eina_log_print_prefix)(FILE *fp, const Eina_Log_Domain *d,
838 Eina_Log_Level level, const char *file,
839 const char *fnc,
840 int line) =
841 eina_log_print_prefix_NOthreads_color_file_func;
842
843static inline void
844eina_log_print_prefix_update(void)
845{
846 if (_disable_file && _disable_function)
847 {
848 fprintf(stderr, "ERROR: cannot have " EINA_LOG_ENV_FILE_DISABLE " and "
849 EINA_LOG_ENV_FUNCTION_DISABLE " set at the same time, will "
850 "just disable function.\n");
851 _disable_file = 0;
852 }
853
854#define S(NOthread, NOcolor, NOfile, NOfunc) \
855 _eina_log_print_prefix = \
856 eina_log_print_prefix_ ## NOthread ## threads_ ## NOcolor ## color_ ## \
857 NOfile \
858 ## file_ ## NOfunc ## func
859
860#ifdef EFL_HAVE_THREADS
861 if (_threads_enabled)
862 {
863 if (_disable_color)
864 {
865 if (_disable_file)
866 S(,NO,NO,);
867 else if (_disable_function)
868 S(,NO,,NO);
869 else
870 S(,NO,,);
871 }
872 else
873 {
874 if (_disable_file)
875 S(,,NO,);
876 else if (_disable_function)
877 S(,,,NO);
878 else
879 S(,,,);
880 }
881
882 return;
883 }
884
885#endif
886
887 if (_disable_color)
888 {
889 if (_disable_file)
890 S(NO,NO,NO,);
891 else if (_disable_function)
892 S(NO,NO,,NO);
893 else
894 S(NO,NO,,);
895 }
896 else
897 {
898 if (_disable_file)
899 S(NO,,NO,);
900 else if (_disable_function)
901 S(NO,,,NO);
902 else
903 S(NO,,,);
904 }
905
906#undef S
907}
908
909/*
910 * Creates a colored domain name string.
911 */
912static const char *
913eina_log_domain_str_get(const char *name, const char *color)
914{
915 const char *d;
916
917 if (color)
918 {
919 size_t name_len;
920 size_t color_len;
921
922 name_len = strlen(name);
923 color_len = strlen(color);
924 d =
925 malloc(sizeof(char) *
926 (color_len + name_len + strlen(EINA_COLOR_RESET) + 1));
927 if (!d)
928 return NULL;
929
930 memcpy((char *)d, color, color_len);
931 memcpy((char *)(d + color_len), name, name_len);
932 memcpy((char *)(d + color_len + name_len), EINA_COLOR_RESET,
933 strlen(EINA_COLOR_RESET));
934 ((char *)d)[color_len + name_len + strlen(EINA_COLOR_RESET)] = '\0';
935 }
936 else
937 d = strdup(name);
938
939 return d;
940}
941
942/*
943 * Setups a new logging domain to the name and color specified. Note that this
944 * constructor acts upon an pre-allocated object.
945 */
946static Eina_Log_Domain *
947eina_log_domain_new(Eina_Log_Domain *d, const char *name, const char *color)
948{
949 EINA_SAFETY_ON_NULL_RETURN_VAL(d, NULL);
950 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
951
952 d->level = EINA_LOG_LEVEL_UNKNOWN;
953 d->deleted = EINA_FALSE;
954
955 if ((color) && (!_disable_color))
956 d->domain_str = eina_log_domain_str_get(name, color);
957 else
958 d->domain_str = eina_log_domain_str_get(name, NULL);
959
960 d->name = strdup(name);
961 d->namelen = strlen(name);
962
963 return d;
964}
965
966/*
967 * Frees internal strings of a log domain, keeping the log domain itself as a
968 * slot for next domain registers.
969 */
970static void
971eina_log_domain_free(Eina_Log_Domain *d)
972{
973 EINA_SAFETY_ON_NULL_RETURN(d);
974
975 if (d->domain_str)
976 free((char *)d->domain_str);
977
978 if (d->name)
979 free((char *)d->name);
980}
981
982/*
983 * Parses domain levels passed through the env var.
984 */
985static void
986eina_log_domain_parse_pendings(void)
987{
988 const char *start;
989
990 if (!(start = getenv(EINA_LOG_ENV_LEVELS)))
991 return;
992
993 // name1:level1,name2:level2,name3:level3,...
994 while (1)
995 {
996 Eina_Log_Domain_Level_Pending *p;
997 char *end = NULL;
998 char *tmp = NULL;
999 long int level;
1000
1001 end = strchr(start, ':');
1002 if (!end)
1003 break;
1004
1005 // Parse level, keep going if failed
1006 level = strtol((char *)(end + 1), &tmp, 10);
1007 if (tmp == (end + 1))
1008 goto parse_end;
1009
1010 // Parse name
1011 p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - start + 1);
1012 if (!p)
1013 break;
1014
1015 p->namelen = end - start;
1016 memcpy((char *)p->name, start, end - start);
1017 ((char *)p->name)[end - start] = '\0';
1018 p->level = level;
1019
1020 _pending_list = eina_inlist_append(_pending_list, EINA_INLIST_GET(p));
1021
1022parse_end:
1023 start = strchr(tmp, ',');
1024 if (start)
1025 start++;
1026 else
1027 break;
1028 }
1029}
1030
1031static void
1032eina_log_domain_parse_pending_globs(void)
1033{
1034 const char *start;
1035
1036 if (!(start = getenv(EINA_LOG_ENV_LEVELS_GLOB)))
1037 return;
1038
1039 // name1:level1,name2:level2,name3:level3,...
1040 while (1)
1041 {
1042 Eina_Log_Domain_Level_Pending *p;
1043 char *end = NULL;
1044 char *tmp = NULL;
1045 long int level;
1046
1047 end = strchr(start, ':');
1048 if (!end)
1049 break;
1050
1051 // Parse level, keep going if failed
1052 level = strtol((char *)(end + 1), &tmp, 10);
1053 if (tmp == (end + 1))
1054 goto parse_end;
1055
1056 // Parse name
1057 p = malloc(sizeof(Eina_Log_Domain_Level_Pending) + end - start + 1);
1058 if (!p)
1059 break;
1060
1061 p->namelen = 0; /* not that useful */
1062 memcpy((char *)p->name, start, end - start);
1063 ((char *)p->name)[end - start] = '\0';
1064 p->level = level;
1065
1066 _glob_list = eina_inlist_append(_glob_list, EINA_INLIST_GET(p));
1067
1068parse_end:
1069 start = strchr(tmp, ',');
1070 if (start)
1071 start++;
1072 else
1073 break;
1074 }
1075}
1076
1077static inline int
1078eina_log_domain_register_unlocked(const char *name, const char *color)
1079{
1080 Eina_Log_Domain_Level_Pending *pending = NULL;
1081 size_t namelen;
1082 unsigned int i;
1083
1084 for (i = 0; i < _log_domains_count; i++)
1085 {
1086 if (_log_domains[i].deleted)
1087 {
1088 // Found a flagged slot, free domain_str and replace slot
1089 eina_log_domain_new(&_log_domains[i], name, color);
1090 goto finish_register;
1091 }
1092 }
1093
1094 if (_log_domains_count >= _log_domains_allocated)
1095 {
1096 Eina_Log_Domain *tmp;
1097 size_t size;
1098
1099 if (!_log_domains)
1100 // special case for init, eina itself will allocate a dozen of domains
1101 size = 24;
1102 else
1103 // grow 8 buckets to minimize reallocs
1104 size = _log_domains_allocated + 8;
1105
1106 tmp = realloc(_log_domains, sizeof(Eina_Log_Domain) * size);
1107
1108 if (tmp)
1109 {
1110 // Success!
1111 _log_domains = tmp;
1112 _log_domains_allocated = size;
1113 }
1114 else
1115 return -1;
1116 }
1117
1118 // Use an allocated slot
1119 eina_log_domain_new(&_log_domains[i], name, color);
1120 _log_domains_count++;
1121
1122finish_register:
1123 namelen = _log_domains[i].namelen;
1124
1125 EINA_INLIST_FOREACH(_pending_list, pending)
1126 {
1127 if ((namelen == pending->namelen) && (strcmp(pending->name, name) == 0))
1128 {
1129 _log_domains[i].level = pending->level;
1130 _pending_list =
1131 eina_inlist_remove(_pending_list, EINA_INLIST_GET(pending));
1132 free(pending);
1133 break;
1134 }
1135 }
1136
1137 if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN)
1138 {
1139 EINA_INLIST_FOREACH(_glob_list, pending)
1140 {
1141 if (!fnmatch(pending->name, name, 0))
1142 {
1143 _log_domains[i].level = pending->level;
1144 break;
1145 }
1146 }
1147 }
1148
1149 // Check if level is still UNKNOWN, set it to global
1150 if (_log_domains[i].level == EINA_LOG_LEVEL_UNKNOWN)
1151 _log_domains[i].level = _log_level;
1152
1153 return i;
1154}
1155
1156static inline Eina_Bool
1157eina_log_term_color_supported(const char *term)
1158{
1159 const char *tail;
1160
1161 if (!term)
1162 return EINA_FALSE;
1163
1164 tail = term + 1;
1165 switch (term[0])
1166 {
1167 /* list of known to support color terminals,
1168 * take from gentoo's portage.
1169 */
1170
1171 case 'x': /* xterm and xterm-color */
1172 return ((strncmp(tail, "term", sizeof("term") - 1) == 0) &&
1173 ((tail[sizeof("term") - 1] == '\0') ||
1174 (strcmp(tail + sizeof("term") - 1, "-color") == 0)));
1175
1176 case 'E': /* Eterm */
1177 case 'a': /* aterm */
1178 case 'k': /* kterm */
1179 return (strcmp(tail, "term") == 0);
1180
1181 case 'r': /* xrvt or rxvt-unicode */
1182 return ((strncmp(tail, "xvt", sizeof("xvt") - 1) == 0) &&
1183 ((tail[sizeof("xvt") - 1] == '\0') ||
1184 (strcmp(tail + sizeof("xvt") - 1, "-unicode") == 0)));
1185
1186 case 's': /* screen */
1187 return (strcmp(tail, "creen") == 0);
1188
1189 case 'g': /* gnome */
1190 return (strcmp(tail, "nome") == 0);
1191
1192 case 'i': /* interix */
1193 return (strcmp(tail, "nterix") == 0);
1194
1195 default:
1196 return EINA_FALSE;
1197 }
1198}
1199
1200static inline void
1201eina_log_domain_unregister_unlocked(int domain)
1202{
1203 Eina_Log_Domain *d;
1204
1205 if ((unsigned int)domain >= _log_domains_count)
1206 return;
1207
1208 d = &_log_domains[domain];
1209 eina_log_domain_free(d);
1210 d->deleted = 1;
1211}
1212
1213static inline void
1214eina_log_print_unlocked(int domain,
1215 Eina_Log_Level level,
1216 const char *file,
1217 const char *fnc,
1218 int line,
1219 const char *fmt,
1220 va_list args)
1221{
1222 Eina_Log_Domain *d;
1223
1224#ifdef EINA_SAFETY_CHECKS
1225 if (EINA_UNLIKELY((unsigned int)domain >= _log_domains_count) ||
1226 EINA_UNLIKELY(domain < 0))
1227 {
1228 if (file && fnc && fmt)
1229 fprintf(
1230 stderr,
1231 "CRI: %s:%d %s() eina_log_print() unknown domain %d, original message format '%s'\n",
1232 file,
1233 line,
1234 fnc,
1235 domain,
1236 fmt);
1237 else
1238 fprintf(
1239 stderr,
1240 "CRI: eina_log_print() unknown domain %d, original message format '%s'\n",
1241 domain,
1242 fmt ? fmt : "");
1243
1244 if (_abort_on_critical)
1245 abort();
1246
1247 return;
1248 }
1249
1250#endif
1251 d = _log_domains + domain;
1252#ifdef EINA_SAFETY_CHECKS
1253 if (EINA_UNLIKELY(d->deleted))
1254 {
1255 fprintf(stderr,
1256 "ERR: eina_log_print() domain %d is deleted\n",
1257 domain);
1258 return;
1259 }
1260
1261#endif
1262
1263 if (level > d->level)
1264 return;
1265
1266#ifdef _WIN32
1267 {
1268 char *wfmt;
1269 char *tmp;
1270
1271 wfmt = strdup(fmt);
1272 if (!wfmt)
1273 {
1274 fprintf(stderr, "ERR: %s: can not allocate memory\n", __FUNCTION__);
1275 return;
1276 }
1277
1278 tmp = wfmt;
1279 while (strchr(tmp, '%'))
1280 {
1281 tmp++;
1282 if (*tmp == 'z')
1283 *tmp = 'I';
1284 }
1285 _print_cb(d, level, file, fnc, line, wfmt, _print_cb_data, args);
1286 free(wfmt);
1287 }
1288#else
1289 _print_cb(d, level, file, fnc, line, fmt, _print_cb_data, args);
1290#endif
1291
1292 if (EINA_UNLIKELY(_abort_on_critical) &&
1293 EINA_UNLIKELY(level <= _abort_level_on_critical))
1294 abort();
1295}
1296
1297/**
1298 * @endcond
1299 */
1300
1301
1302/*============================================================================*
1303* Global *
1304*============================================================================*/
1305
1306/**
1307 * @internal
1308 * @brief Initialize the log module.
1309 *
1310 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1311 *
1312 * This function sets up the log module of Eina. It is called by
1313 * eina_init().
1314 *
1315 * @see eina_init()
1316 *
1317 * @warning Not-MT: just call this function from main thread! The
1318 * place where this function was called the first time is
1319 * considered the main thread.
1320 */
1321Eina_Bool
1322eina_log_init(void)
1323{
1324 const char *level, *tmp;
1325 int color_disable;
1326
1327 assert((sizeof(_names) / sizeof(_names[0])) == EINA_LOG_LEVELS);
1328
1329 if ((tmp = getenv(EINA_LOG_ENV_COLOR_DISABLE)))
1330 color_disable = atoi(tmp);
1331 else
1332 color_disable = -1;
1333
1334 /* Check if color is explicitly disabled */
1335 if (color_disable == 1)
1336 _disable_color = EINA_TRUE;
1337
1338#ifndef _WIN32
1339 /* color was not explicitly disabled or enabled, guess it */
1340 else if (color_disable == -1)
1341 {
1342 if (!eina_log_term_color_supported(getenv("TERM")))
1343 _disable_color = EINA_TRUE;
1344 else
1345 {
1346 /* if not a terminal, but redirected to a file, disable color */
1347 int fd;
1348
1349 if (_print_cb == eina_log_print_cb_stderr)
1350 fd = STDERR_FILENO;
1351 else if (_print_cb == eina_log_print_cb_stdout)
1352 fd = STDOUT_FILENO;
1353 else
1354 fd = -1;
1355
1356 if ((fd >= 0) && (!isatty(fd)))
1357 _disable_color = EINA_TRUE;
1358 }
1359 }
1360#endif
1361
1362 if ((tmp = getenv(EINA_LOG_ENV_FILE_DISABLE)) && (atoi(tmp) == 1))
1363 _disable_file = EINA_TRUE;
1364
1365 if ((tmp = getenv(EINA_LOG_ENV_FUNCTION_DISABLE)) && (atoi(tmp) == 1))
1366 _disable_function = EINA_TRUE;
1367
1368 if ((tmp = getenv(EINA_LOG_ENV_ABORT)) && (atoi(tmp) == 1))
1369 _abort_on_critical = EINA_TRUE;
1370
1371 if ((tmp = getenv(EINA_LOG_ENV_ABORT_LEVEL)))
1372 _abort_level_on_critical = atoi(tmp);
1373
1374 eina_log_print_prefix_update();
1375
1376 // Global log level
1377 if ((level = getenv(EINA_LOG_ENV_LEVEL)))
1378 _log_level = atoi(level);
1379
1380 // Register UNKNOWN domain, the default logger
1381 EINA_LOG_DOMAIN_GLOBAL = eina_log_domain_register("", NULL);
1382
1383 if (EINA_LOG_DOMAIN_GLOBAL < 0)
1384 {
1385 fprintf(stderr, "Failed to create global logging domain.\n");
1386 return EINA_FALSE;
1387 }
1388
1389 // Parse pending domains passed through EINA_LOG_LEVELS_GLOB
1390 eina_log_domain_parse_pending_globs();
1391
1392 // Parse pending domains passed through EINA_LOG_LEVELS
1393 eina_log_domain_parse_pendings();
1394
1395 return EINA_TRUE;
1396}
1397
1398/**
1399 * @internal
1400 * @brief Shut down the log module.
1401 *
1402 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
1403 *
1404 * This function shuts down the log module set up by
1405 * eina_log_init(). It is called by eina_shutdown().
1406 *
1407 * @see eina_shutdown()
1408 *
1409 * @warning Not-MT: just call this function from main thread! The
1410 * place where eina_log_init() (eina_init()) was called the
1411 * first time is considered the main thread.
1412 */
1413Eina_Bool
1414eina_log_shutdown(void)
1415{
1416 Eina_Inlist *tmp;
1417
1418 while (_log_domains_count--)
1419 {
1420 if (_log_domains[_log_domains_count].deleted)
1421 continue;
1422
1423 eina_log_domain_free(&_log_domains[_log_domains_count]);
1424 }
1425
1426 free(_log_domains);
1427
1428 _log_domains = NULL;
1429 _log_domains_count = 0;
1430 _log_domains_allocated = 0;
1431
1432 while (_glob_list)
1433 {
1434 tmp = _glob_list;
1435 _glob_list = _glob_list->next;
1436 free(tmp);
1437 }
1438
1439 while (_pending_list)
1440 {
1441 tmp = _pending_list;
1442 _pending_list = _pending_list->next;
1443 free(tmp);
1444 }
1445
1446 return EINA_TRUE;
1447}
1448
1449#ifdef EFL_HAVE_THREADS
1450
1451/**
1452 * @internal
1453 * @brief Activate the log mutex.
1454 *
1455 * This function activate the mutex in the eina log module. It is called by
1456 * eina_threads_init().
1457 *
1458 * @see eina_threads_init()
1459 */
1460void
1461eina_log_threads_init(void)
1462{
1463 if (_threads_inited) return;
1464 _main_thread = SELF();
1465 if (!INIT()) return;
1466 _threads_inited = EINA_TRUE;
1467}
1468
1469/**
1470 * @internal
1471 * @brief Shut down the log mutex.
1472 *
1473 * This function shuts down the mutex in the log module.
1474 * It is called by eina_threads_shutdown().
1475 *
1476 * @see eina_threads_shutdown()
1477 */
1478void
1479eina_log_threads_shutdown(void)
1480{
1481 if (!_threads_inited) return;
1482 CHECK_MAIN();
1483 SHUTDOWN();
1484 _threads_enabled = EINA_FALSE;
1485 _threads_inited = EINA_FALSE;
1486}
1487
1488#endif
1489
1490/*============================================================================*
1491* API *
1492*============================================================================*/
1493
1494/**
1495 * @cond LOCAL
1496 */
1497
1498EAPI int EINA_LOG_DOMAIN_GLOBAL = 0;
1499
1500/**
1501 * @endcond
1502 */
1503
1504EAPI void
1505eina_log_threads_enable(void)
1506{
1507#ifdef EFL_HAVE_THREADS
1508 if (_threads_enabled) return;
1509 if (!_threads_inited) eina_log_threads_init();
1510 _threads_enabled = EINA_TRUE;
1511 eina_log_print_prefix_update();
1512#endif
1513}
1514
1515EAPI void
1516eina_log_print_cb_set(Eina_Log_Print_Cb cb, void *data)
1517{
1518 LOG_LOCK();
1519 _print_cb = cb;
1520 _print_cb_data = data;
1521 eina_log_print_prefix_update();
1522 LOG_UNLOCK();
1523}
1524
1525EAPI void
1526eina_log_level_set(int level)
1527{
1528 _log_level = level;
1529 if (EINA_LIKELY((EINA_LOG_DOMAIN_GLOBAL >= 0) &&
1530 ((unsigned int)EINA_LOG_DOMAIN_GLOBAL < _log_domains_count)))
1531 _log_domains[EINA_LOG_DOMAIN_GLOBAL].level = level;
1532}
1533
1534EAPI int
1535eina_log_level_get(void)
1536{
1537 return _log_level;
1538}
1539
1540EAPI Eina_Bool
1541eina_log_main_thread_check(void)
1542{
1543#ifdef EFL_HAVE_THREADS
1544 return ((!_threads_enabled) || IS_MAIN(SELF()));
1545#else
1546 return EINA_TRUE;
1547#endif
1548}
1549
1550EAPI void
1551eina_log_color_disable_set(Eina_Bool disabled)
1552{
1553 _disable_color = disabled;
1554}
1555
1556EAPI Eina_Bool
1557eina_log_color_disable_get(void)
1558{
1559 return _disable_color;
1560}
1561
1562EAPI void
1563eina_log_file_disable_set(Eina_Bool disabled)
1564{
1565 _disable_file = disabled;
1566}
1567
1568EAPI Eina_Bool
1569eina_log_file_disable_get(void)
1570{
1571 return _disable_file;
1572}
1573
1574EAPI void
1575eina_log_function_disable_set(Eina_Bool disabled)
1576{
1577 _disable_function = disabled;
1578}
1579
1580EAPI Eina_Bool
1581eina_log_function_disable_get(void)
1582{
1583 return _disable_function;
1584}
1585
1586EAPI void
1587eina_log_abort_on_critical_set(Eina_Bool abort_on_critical)
1588{
1589 _abort_on_critical = abort_on_critical;
1590}
1591
1592EAPI Eina_Bool
1593eina_log_abort_on_critical_get(void)
1594{
1595 return _abort_on_critical;
1596}
1597
1598EAPI void
1599eina_log_abort_on_critical_level_set(int critical_level)
1600{
1601 _abort_level_on_critical = critical_level;
1602}
1603
1604EAPI int
1605eina_log_abort_on_critical_level_get(void)
1606{
1607 return _abort_level_on_critical;
1608}
1609
1610EAPI int
1611eina_log_domain_register(const char *name, const char *color)
1612{
1613 int r;
1614
1615 EINA_SAFETY_ON_NULL_RETURN_VAL(name, -1);
1616
1617 LOG_LOCK();
1618 r = eina_log_domain_register_unlocked(name, color);
1619 LOG_UNLOCK();
1620 return r;
1621}
1622
1623EAPI void
1624eina_log_domain_unregister(int domain)
1625{
1626 EINA_SAFETY_ON_FALSE_RETURN(domain >= 0);
1627 LOG_LOCK();
1628 eina_log_domain_unregister_unlocked(domain);
1629 LOG_UNLOCK();
1630}
1631
1632EAPI void
1633eina_log_domain_level_set(const char *domain_name, int level)
1634{
1635 Eina_Log_Domain_Level_Pending *pending;
1636 size_t namelen;
1637 unsigned int i;
1638
1639 EINA_SAFETY_ON_NULL_RETURN(domain_name);
1640
1641 namelen = strlen(domain_name);
1642
1643 for (i = 0; i < _log_domains_count; i++)
1644 {
1645 if (_log_domains[i].deleted)
1646 continue;
1647
1648 if ((namelen != _log_domains[i].namelen) ||
1649 (strcmp(_log_domains[i].name, domain_name) != 0))
1650 continue;
1651
1652 _log_domains[i].level = level;
1653 return;
1654 }
1655
1656 EINA_INLIST_FOREACH(_pending_list, pending)
1657 {
1658 if ((namelen == pending->namelen) &&
1659 (strcmp(pending->name, domain_name) == 0))
1660 {
1661 pending->level = level;
1662 return;
1663 }
1664 }
1665
1666 pending = malloc(sizeof(Eina_Log_Domain_Level_Pending) + namelen + 1);
1667 if (!pending)
1668 return;
1669
1670 pending->level = level;
1671 pending->namelen = namelen;
1672 memcpy(pending->name, domain_name, namelen + 1);
1673
1674 _pending_list = eina_inlist_append(_pending_list, EINA_INLIST_GET(pending));
1675}
1676
1677EAPI int
1678eina_log_domain_level_get(const char *domain_name)
1679{
1680 Eina_Log_Domain_Level_Pending *pending;
1681 size_t namelen;
1682 unsigned int i;
1683
1684 EINA_SAFETY_ON_NULL_RETURN_VAL(domain_name, EINA_LOG_LEVEL_UNKNOWN);
1685
1686 namelen = strlen(domain_name);
1687
1688 for (i = 0; i < _log_domains_count; i++)
1689 {
1690 if (_log_domains[i].deleted)
1691 continue;
1692
1693 if ((namelen != _log_domains[i].namelen) ||
1694 (strcmp(_log_domains[i].name, domain_name) != 0))
1695 continue;
1696
1697 return _log_domains[i].level;
1698 }
1699
1700 EINA_INLIST_FOREACH(_pending_list, pending)
1701 {
1702 if ((namelen == pending->namelen) &&
1703 (strcmp(pending->name, domain_name) == 0))
1704 return pending->level;
1705 }
1706
1707 EINA_INLIST_FOREACH(_glob_list, pending)
1708 {
1709 if (!fnmatch(pending->name, domain_name, 0))
1710 return pending->level;
1711 }
1712
1713 return _log_level;
1714}
1715
1716EAPI int
1717eina_log_domain_registered_level_get(int domain)
1718{
1719 EINA_SAFETY_ON_FALSE_RETURN_VAL(domain >= 0, EINA_LOG_LEVEL_UNKNOWN);
1720 EINA_SAFETY_ON_FALSE_RETURN_VAL((unsigned int)domain < _log_domains_count,
1721 EINA_LOG_LEVEL_UNKNOWN);
1722 EINA_SAFETY_ON_TRUE_RETURN_VAL(_log_domains[domain].deleted,
1723 EINA_LOG_LEVEL_UNKNOWN);
1724 return _log_domains[domain].level;
1725}
1726
1727EAPI void
1728eina_log_print_cb_stderr(const Eina_Log_Domain *d,
1729 Eina_Log_Level level,
1730 const char *file,
1731 const char *fnc,
1732 int line,
1733 const char *fmt,
1734 __UNUSED__ void *data,
1735 va_list args)
1736{
1737 _eina_log_print_prefix(stderr, d, level, file, fnc, line);
1738 vfprintf(stderr, fmt, args);
1739 putc('\n', stderr);
1740}
1741
1742EAPI void
1743eina_log_print_cb_stdout(const Eina_Log_Domain *d,
1744 Eina_Log_Level level,
1745 const char *file,
1746 const char *fnc,
1747 int line,
1748 const char *fmt,
1749 __UNUSED__ void *data,
1750 va_list args)
1751{
1752 _eina_log_print_prefix(stdout, d, level, file, fnc, line);
1753 vprintf(fmt, args);
1754 putchar('\n');
1755}
1756
1757EAPI void
1758eina_log_print_cb_file(const Eina_Log_Domain *d,
1759 __UNUSED__ Eina_Log_Level level,
1760 const char *file,
1761 const char *fnc,
1762 int line,
1763 const char *fmt,
1764 void *data,
1765 va_list args)
1766{
1767 FILE *f = data;
1768#ifdef EFL_HAVE_THREADS
1769 if (_threads_enabled)
1770 {
1771 Thread cur;
1772
1773 cur = SELF();
1774 if (IS_OTHER(cur))
1775 {
1776 fprintf(f, "%s[T:%lu] %s:%d %s() ", d->name, (unsigned long)cur,
1777 file, line, fnc);
1778 goto end;
1779 }
1780 }
1781
1782#endif
1783 fprintf(f, "%s<%u> %s:%d %s() ", d->name, eina_log_pid_get(),
1784 file, line, fnc);
1785#ifdef EFL_HAVE_THREADS
1786end:
1787#endif
1788 vfprintf(f, fmt, args);
1789 putc('\n', f);
1790}
1791
1792EAPI void
1793eina_log_print(int domain, Eina_Log_Level level, const char *file,
1794 const char *fnc, int line, const char *fmt, ...)
1795{
1796 va_list args;
1797
1798#ifdef EINA_SAFETY_CHECKS
1799 if (EINA_UNLIKELY(!file))
1800 {
1801 fputs("ERR: eina_log_print() file == NULL\n", stderr);
1802 return;
1803 }
1804
1805 if (EINA_UNLIKELY(!fnc))
1806 {
1807 fputs("ERR: eina_log_print() fnc == NULL\n", stderr);
1808 return;
1809 }
1810
1811 if (EINA_UNLIKELY(!fmt))
1812 {
1813 fputs("ERR: eina_log_print() fmt == NULL\n", stderr);
1814 return;
1815 }
1816
1817#endif
1818 va_start(args, fmt);
1819 LOG_LOCK();
1820 eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args);
1821 LOG_UNLOCK();
1822 va_end(args);
1823}
1824
1825EAPI void
1826eina_log_vprint(int domain, Eina_Log_Level level, const char *file,
1827 const char *fnc, int line, const char *fmt, va_list args)
1828{
1829#ifdef EINA_SAFETY_CHECKS
1830 if (EINA_UNLIKELY(!file))
1831 {
1832 fputs("ERR: eina_log_print() file == NULL\n", stderr);
1833 return;
1834 }
1835
1836 if (EINA_UNLIKELY(!fnc))
1837 {
1838 fputs("ERR: eina_log_print() fnc == NULL\n", stderr);
1839 return;
1840 }
1841
1842 if (EINA_UNLIKELY(!fmt))
1843 {
1844 fputs("ERR: eina_log_print() fmt == NULL\n", stderr);
1845 return;
1846 }
1847
1848#endif
1849 LOG_LOCK();
1850 eina_log_print_unlocked(domain, level, file, fnc, line, fmt, args);
1851 LOG_UNLOCK();
1852}
diff --git a/libraries/eina/src/lib/eina_magic.c b/libraries/eina/src/lib/eina_magic.c
new file mode 100644
index 0000000..1adde92
--- /dev/null
+++ b/libraries/eina/src/lib/eina_magic.c
@@ -0,0 +1,320 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <string.h>
25
26#ifdef HAVE_EVIL
27# include <Evil.h>
28#endif
29
30#include "eina_config.h"
31#include "eina_private.h"
32#include "eina_error.h"
33#include "eina_log.h"
34
35/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
36#include "eina_safety_checks.h"
37#include "eina_magic.h"
38
39/*============================================================================*
40* Local *
41*============================================================================*/
42
43/**
44 * @cond LOCAL
45 */
46
47typedef struct _Eina_Magic_String Eina_Magic_String;
48struct _Eina_Magic_String
49{
50 Eina_Magic magic;
51 Eina_Bool string_allocated;
52 const char *string;
53};
54
55static int _eina_magic_string_log_dom = -1;
56
57#ifdef ERR
58#undef ERR
59#endif
60#define ERR(...) EINA_LOG_DOM_ERR(_eina_magic_string_log_dom, __VA_ARGS__)
61
62#ifdef DBG
63#undef DBG
64#endif
65#define DBG(...) EINA_LOG_DOM_DBG(_eina_magic_string_log_dom, __VA_ARGS__)
66
67static Eina_Magic_String *_eina_magic_strings = NULL;
68static size_t _eina_magic_strings_count = 0;
69static size_t _eina_magic_strings_allocated = 0;
70static Eina_Bool _eina_magic_strings_dirty = 0;
71
72static int
73_eina_magic_strings_sort_cmp(const void *p1, const void *p2)
74{
75 const Eina_Magic_String *a = p1, *b = p2;
76 return a->magic - b->magic;
77}
78
79static int
80_eina_magic_strings_find_cmp(const void *p1, const void *p2)
81{
82 Eina_Magic a = (Eina_Magic)p1;
83 const Eina_Magic_String *b = p2;
84 return a - b->magic;
85}
86
87static Eina_Magic_String *
88_eina_magic_strings_alloc(void)
89{
90 size_t idx;
91
92 if (_eina_magic_strings_count == _eina_magic_strings_allocated)
93 {
94 void *tmp;
95 size_t size;
96
97 if (EINA_UNLIKELY(_eina_magic_strings_allocated == 0))
98 size = 48;
99 else
100 size = _eina_magic_strings_allocated + 16;
101
102 tmp = realloc(_eina_magic_strings, sizeof(Eina_Magic_String) * size);
103 if (!tmp)
104 {
105#ifdef _WIN32
106 ERR("could not realloc magic_strings from %Iu to %Iu buckets.",
107 _eina_magic_strings_allocated, size);
108#else
109 ERR("could not realloc magic_strings from %zu to %zu buckets.",
110 _eina_magic_strings_allocated, size);
111#endif
112 return NULL;
113 }
114
115 _eina_magic_strings = tmp;
116 _eina_magic_strings_allocated = size;
117 }
118
119 idx = _eina_magic_strings_count;
120 _eina_magic_strings_count++;
121 return _eina_magic_strings + idx;
122}
123
124/**
125 * @endcond
126 */
127
128/*============================================================================*
129* Global *
130*============================================================================*/
131
132/**
133 * @internal
134 * @brief Initialize the magic string module.
135 *
136 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
137 *
138 * This function sets up the magic string module of Eina. It is called by
139 * eina_init().
140 *
141 * @see eina_init()
142 */
143Eina_Bool
144eina_magic_string_init(void)
145{
146 _eina_magic_string_log_dom = eina_log_domain_register
147 ("eina_magic_string", EINA_LOG_COLOR_DEFAULT);
148 if (_eina_magic_string_log_dom < 0)
149 {
150 EINA_LOG_ERR("Could not register log domain: eina_magic_string");
151 return EINA_FALSE;
152 }
153
154 return EINA_TRUE;
155}
156
157/**
158 * @internal
159 * @brief Shut down the magic string module.
160 *
161 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
162 *
163 * This function shuts down the magic string module set up by
164 * eina_magic string_init(). It is called by eina_shutdown().
165 *
166 * @see eina_shutdown()
167 */
168Eina_Bool
169eina_magic_string_shutdown(void)
170{
171 Eina_Magic_String *ems, *ems_end;
172
173 ems = _eina_magic_strings;
174 ems_end = ems + _eina_magic_strings_count;
175
176 for (; ems < ems_end; ems++)
177 if (ems->string_allocated)
178 free((char *)ems->string);
179
180 free(_eina_magic_strings);
181 _eina_magic_strings = NULL;
182 _eina_magic_strings_count = 0;
183 _eina_magic_strings_allocated = 0;
184
185 eina_log_domain_unregister(_eina_magic_string_log_dom);
186 _eina_magic_string_log_dom = -1;
187
188 return EINA_TRUE;
189}
190
191/*============================================================================*
192* API *
193*============================================================================*/
194EAPI const char *
195eina_magic_string_get(Eina_Magic magic)
196{
197 Eina_Magic_String *ems;
198
199 if (!_eina_magic_strings)
200 return "(none)";
201
202 if (_eina_magic_strings_dirty)
203 {
204 qsort(_eina_magic_strings, _eina_magic_strings_count,
205 sizeof(Eina_Magic_String), _eina_magic_strings_sort_cmp);
206 _eina_magic_strings_dirty = 0;
207 }
208
209 ems = bsearch((void *)magic, _eina_magic_strings,
210 _eina_magic_strings_count, sizeof(Eina_Magic_String),
211 _eina_magic_strings_find_cmp);
212 if (ems)
213 return ems->string ? ems->string : "(undefined)";
214
215 return "(unknown)";
216}
217
218EAPI Eina_Bool
219eina_magic_string_set(Eina_Magic magic, const char *magic_name)
220{
221 Eina_Magic_String *ems;
222
223 EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE);
224
225 ems = _eina_magic_strings_alloc();
226 if (!ems)
227 return EINA_FALSE;
228
229 ems->magic = magic;
230 ems->string_allocated = EINA_TRUE;
231 ems->string = strdup(magic_name);
232 if (!ems->string)
233 {
234 ERR("could not allocate string '%s'", magic_name);
235 _eina_magic_strings_count--;
236 return EINA_FALSE;
237 }
238
239 _eina_magic_strings_dirty = 1;
240 return EINA_TRUE;
241}
242
243EAPI Eina_Bool
244eina_magic_string_static_set(Eina_Magic magic, const char *magic_name)
245{
246 Eina_Magic_String *ems;
247
248 EINA_SAFETY_ON_NULL_RETURN_VAL(magic_name, EINA_FALSE);
249
250 ems = _eina_magic_strings_alloc();
251 if (!ems)
252 return EINA_FALSE;
253
254 ems->magic = magic;
255 ems->string_allocated = EINA_FALSE;
256 ems->string = magic_name;
257
258 _eina_magic_strings_dirty = 1;
259 return EINA_TRUE;
260}
261
262#ifdef eina_magic_fail
263# undef eina_magic_fail
264#endif
265
266EAPI void
267eina_magic_fail(void *d,
268 Eina_Magic m,
269 Eina_Magic req_m,
270 const char *file,
271 const char *fnc,
272 int line)
273{
274 if (!d)
275 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
276 file, fnc, line,
277 "*** Eina Magic Check Failed !!!\n"
278 " Input handle pointer is NULL !\n"
279 "*** NAUGHTY PROGRAMMER!!!\n"
280 "*** SPANK SPANK SPANK!!!\n"
281 "*** Now go fix your code. Tut tut tut!\n"
282 "\n");
283 else
284 if (m == EINA_MAGIC_NONE)
285 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
286 file, fnc, line,
287 "*** Eina Magic Check Failed !!!\n"
288 " Input handle has already been freed!\n"
289 "*** NAUGHTY PROGRAMMER!!!\n"
290 "*** SPANK SPANK SPANK!!!\n"
291 "*** Now go fix your code. Tut tut tut!\n"
292 "\n");
293 else
294 if (m != req_m)
295 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
296 file, fnc, line,
297 "*** Eina Magic Check Failed !!!\n"
298 " Input handle is wrong type\n"
299 " Expected: %08x - %s\n"
300 " Supplied: %08x - %s\n"
301 "*** NAUGHTY PROGRAMMER!!!\n"
302 "*** SPANK SPANK SPANK!!!\n"
303 "*** Now go fix your code. Tut tut tut!\n"
304 "\n",
305 req_m, eina_magic_string_get(req_m),
306 m, eina_magic_string_get(m));
307 else
308 eina_log_print(EINA_LOG_DOMAIN_GLOBAL, EINA_LOG_LEVEL_CRITICAL,
309 file, fnc, line,
310 "*** Eina Magic Check Failed !!!\n"
311 " Why did you call me !\n"
312 "*** NAUGHTY PROGRAMMER!!!\n"
313 "*** SPANK SPANK SPANK!!!\n"
314 "*** Now go fix your code. Tut tut tut!\n"
315 "\n");
316}
317
318/**
319 * @}
320 */
diff --git a/libraries/eina/src/lib/eina_main.c b/libraries/eina/src/lib/eina_main.c
new file mode 100644
index 0000000..8727f83
--- /dev/null
+++ b/libraries/eina/src/lib/eina_main.c
@@ -0,0 +1,431 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#ifdef EFL_HAVE_WIN32_THREADS
26# define WIN32_LEAN_AND_MEAN
27# include <windows.h>
28# undef WIN32_LEAN_AND_MEAN
29#endif
30
31#ifdef EFL_HAVE_THREADS
32# ifdef HAVE_SYS_TYPES_H
33# include <sys/types.h>
34# endif
35# ifdef HAVE_UNISTD_H
36# include <unistd.h>
37# endif
38#endif
39
40#ifdef HAVE_MCHECK
41# ifdef HAVE_MTRACE
42# define MT 1
43# endif
44#endif
45
46#ifdef MT
47#include <mcheck.h>
48#endif
49
50#include "eina_lock.h"
51#include "eina_config.h"
52#include "eina_private.h"
53#include "eina_types.h"
54#include "eina_main.h"
55#include "eina_error.h"
56#include "eina_log.h"
57#include "eina_hash.h"
58#include "eina_binshare.h"
59#include "eina_stringshare.h"
60#include "eina_ustringshare.h"
61#include "eina_list.h"
62#include "eina_matrixsparse.h"
63#include "eina_array.h"
64#include "eina_counter.h"
65#include "eina_benchmark.h"
66#include "eina_magic.h"
67#include "eina_rectangle.h"
68#include "eina_safety_checks.h"
69#include "eina_inlist.h"
70
71/*============================================================================*
72* Local *
73*============================================================================*/
74
75/**
76 * @cond LOCAL
77 */
78
79static Eina_Version _version = { VMAJ, VMIN, VMIC, VREV };
80
81static int _eina_main_count = 0;
82#ifdef EFL_HAVE_THREADS
83static int _eina_main_thread_count = 0;
84#endif
85static int _eina_log_dom = -1;
86
87#ifdef ERR
88#undef ERR
89#endif
90#define ERR(...) EINA_LOG_DOM_ERR(_eina_log_dom, __VA_ARGS__)
91
92#ifdef DBG
93#undef DBG
94#endif
95#define DBG(...) EINA_LOG_DOM_DBG(_eina_log_dom, __VA_ARGS__)
96
97EAPI Eina_Bool _eina_threads_activated = EINA_FALSE;
98EAPI Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0;
99
100static const char EINA_ERROR_NOT_MAIN_LOOP_STR[] = "Main loop thread check failed.";
101
102#ifdef EFL_HAVE_THREADS
103# ifdef _WIN32
104EAPI DWORD _eina_main_loop;
105# else
106EAPI pthread_t _eina_main_loop;
107# endif
108static pid_t _eina_pid;
109#endif
110
111#ifdef MT
112static int _mt_enabled = 0;
113#endif
114
115#ifdef EFL_HAVE_THREADS
116EAPI int _eina_threads_debug = 0;
117# if !defined(_WIN32_WCE) && !defined(_WIN32)
118EAPI pthread_mutex_t _eina_tracking_lock;
119EAPI Eina_Inlist *_eina_tracking = NULL;
120# endif
121#endif
122
123/* place module init/shutdown functions here to avoid other modules
124 * calling them by mistake.
125 */
126#define S(x) extern Eina_Bool eina_ ## x ## _init(void); \
127 extern Eina_Bool eina_ ## x ## _shutdown(void)
128 S(log);
129 S(error);
130 S(safety_checks);
131 S(magic_string);
132 S(iterator);
133 S(accessor);
134 S(array);
135 S(module);
136 S(mempool);
137 S(list);
138 S(binshare);
139 S(stringshare);
140 S(ustringshare);
141 S(matrixsparse);
142 S(convert);
143 S(counter);
144 S(benchmark);
145 S(rectangle);
146 S(strbuf);
147 S(ustrbuf);
148 S(quadtree);
149 S(simple_xml);
150 S(file);
151 S(prefix);
152#undef S
153
154struct eina_desc_setup
155{
156 const char *name;
157 Eina_Bool (*init)(void);
158 Eina_Bool (*shutdown)(void);
159};
160
161static const struct eina_desc_setup _eina_desc_setup[] = {
162#define S(x) {# x, eina_ ## x ## _init, eina_ ## x ## _shutdown}
163 /* log is a special case as it needs printf */
164 S(error),
165 S(safety_checks),
166 S(magic_string),
167 S(iterator),
168 S(accessor),
169 S(array),
170 S(module),
171 S(mempool),
172 S(list),
173 S(binshare),
174 S(stringshare),
175 S(ustringshare),
176 S(matrixsparse),
177 S(convert),
178 S(counter),
179 S(benchmark),
180 S(rectangle),
181 S(strbuf),
182 S(ustrbuf),
183 S(quadtree),
184 S(simple_xml),
185 S(file),
186 S(prefix)
187#undef S
188};
189static const size_t _eina_desc_setup_len = sizeof(_eina_desc_setup) /
190 sizeof(_eina_desc_setup[0]);
191
192static void
193_eina_shutdown_from_desc(const struct eina_desc_setup *itr)
194{
195 for (itr--; itr >= _eina_desc_setup; itr--)
196 {
197 if (!itr->shutdown())
198 ERR("Problems shutting down eina module '%s', ignored.", itr->name);
199 }
200
201 eina_log_domain_unregister(_eina_log_dom);
202 _eina_log_dom = -1;
203 eina_log_shutdown();
204}
205
206/**
207 * @endcond
208 */
209
210/*============================================================================*
211* Global *
212*============================================================================*/
213
214
215/*============================================================================*
216* API *
217*============================================================================*/
218
219/**
220 * @var eina_version
221 * @brief Eina version (defined at configuration time)
222 */
223EAPI Eina_Version *eina_version = &_version;
224
225EAPI int
226eina_init(void)
227{
228 const struct eina_desc_setup *itr, *itr_end;
229
230 if (EINA_LIKELY(_eina_main_count > 0))
231 return ++_eina_main_count;
232
233#ifdef MT
234 if ((getenv("EINA_MTRACE")) && (getenv("MALLOC_TRACE")))
235 {
236 _mt_enabled = 1;
237 mtrace();
238 }
239#endif
240
241 if (!eina_log_init())
242 {
243 fprintf(stderr, "Could not initialize eina logging system.\n");
244 return 0;
245 }
246
247 _eina_log_dom = eina_log_domain_register("eina", EINA_LOG_COLOR_DEFAULT);
248 if (_eina_log_dom < 0)
249 {
250 EINA_LOG_ERR("Could not register log domain: eina");
251 eina_log_shutdown();
252 return 0;
253 }
254
255 EINA_ERROR_NOT_MAIN_LOOP = eina_error_msg_static_register(
256 EINA_ERROR_NOT_MAIN_LOOP_STR);
257
258#ifdef EFL_HAVE_THREADS
259# ifdef _WIN32
260 _eina_main_loop = GetCurrentThreadId();
261# else
262 _eina_main_loop = pthread_self();
263# endif
264 _eina_pid = getpid();
265#endif
266
267#ifdef EINA_HAVE_DEBUG_THREADS
268 pthread_mutex_init(&_eina_tracking_lock, NULL);
269
270 if (getenv("EINA_DEBUG_THREADS"))
271 _eina_threads_debug = atoi(getenv("EINA_DEBUG_THREADS"));
272#endif
273
274 itr = _eina_desc_setup;
275 itr_end = itr + _eina_desc_setup_len;
276 for (; itr < itr_end; itr++)
277 {
278 if (!itr->init())
279 {
280 ERR("Could not initialize eina module '%s'.", itr->name);
281 _eina_shutdown_from_desc(itr);
282 return 0;
283 }
284 }
285
286 _eina_main_count = 1;
287 return 1;
288}
289
290EAPI int
291eina_shutdown(void)
292{
293 _eina_main_count--;
294 if (EINA_UNLIKELY(_eina_main_count == 0))
295 {
296 _eina_shutdown_from_desc(_eina_desc_setup + _eina_desc_setup_len);
297
298#ifdef EINA_HAVE_DEBUG_THREADS
299 pthread_mutex_destroy(&_eina_tracking_lock);
300#endif
301#ifdef MT
302 if (_mt_enabled)
303 {
304 muntrace();
305 _mt_enabled = 0;
306 }
307#endif
308 }
309
310 return _eina_main_count;
311}
312
313
314EAPI int
315eina_threads_init(void)
316{
317#ifdef EFL_HAVE_THREADS
318 int ret;
319
320#ifdef EINA_HAVE_DEBUG_THREADS
321 assert(pthread_equal(_eina_main_loop, pthread_self()));
322#endif
323
324 ++_eina_main_thread_count;
325 ret = _eina_main_thread_count;
326
327 if(_eina_main_thread_count > 1)
328 return ret;
329
330 eina_share_common_threads_init();
331 eina_log_threads_init();
332 _eina_threads_activated = EINA_TRUE;
333
334 return ret;
335#else
336 return 0;
337#endif
338}
339
340EAPI int
341eina_threads_shutdown(void)
342{
343#ifdef EFL_HAVE_THREADS
344 int ret;
345
346#ifdef EINA_HAVE_DEBUG_THREADS
347 const Eina_Lock *lk;
348
349 assert(pthread_equal(_eina_main_loop, pthread_self()));
350 assert(_eina_main_thread_count > 0);
351#endif
352
353 ret = --_eina_main_thread_count;
354 if(_eina_main_thread_count > 0)
355 return ret;
356
357#ifdef EINA_HAVE_DEBUG_THREADS
358 pthread_mutex_lock(&_eina_tracking_lock);
359 if (_eina_tracking)
360 {
361 fprintf(stderr, "*************************\n");
362 fprintf(stderr, "* The IMPOSSIBLE HAPPEN *\n");
363 fprintf(stderr, "* LOCK STILL TAKEN : *\n");
364 fprintf(stderr, "*************************\n");
365 EINA_INLIST_FOREACH(_eina_tracking, lk)
366 eina_lock_debug(lk);
367 fprintf(stderr, "*************************\n");
368 abort();
369 }
370 pthread_mutex_unlock(&_eina_tracking_lock);
371#endif
372
373 eina_share_common_threads_shutdown();
374 eina_log_threads_shutdown();
375
376 _eina_threads_activated = EINA_FALSE;
377
378 return ret;
379#else
380 return 0;
381#endif
382}
383
384EAPI Eina_Bool
385eina_main_loop_is(void)
386{
387#ifdef EFL_HAVE_THREADS
388 pid_t pid = getpid();
389
390# ifdef _WIN32
391 if (pid != _eina_pid)
392 {
393 _eina_pid = pid;
394 _eina_main_loop = GetCurrentThreadId();
395 return EINA_TRUE;
396 }
397 if (_eina_main_loop == GetCurrentThreadId())
398 return EINA_TRUE;
399# else
400 if (pid != _eina_pid)
401 {
402 /* This is in case of a fork, but don't like the solution */
403 _eina_pid = pid;
404 _eina_main_loop = pthread_self();
405 return EINA_TRUE;
406 }
407
408 if (pthread_equal(_eina_main_loop, pthread_self()))
409 return EINA_TRUE;
410# endif
411#endif
412 return EINA_FALSE;
413}
414
415/** The purpose of this API should not be documented, it is used only by the one who know what they are doing. */
416EAPI void
417eina_main_loop_define(void)
418{
419#ifdef EFL_HAVE_THREADS
420 _eina_pid = getpid();
421# ifdef _WIN32
422 _eina_main_loop = GetCurrentThreadId();
423# else
424 _eina_main_loop = pthread_self();
425# endif
426#endif
427}
428
429/**
430 * @}
431 */
diff --git a/libraries/eina/src/lib/eina_matrixsparse.c b/libraries/eina/src/lib/eina_matrixsparse.c
new file mode 100644
index 0000000..3ac0439
--- /dev/null
+++ b/libraries/eina/src/lib/eina_matrixsparse.c
@@ -0,0 +1,1421 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2009 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19
20/**
21 * @page tutorial_matrixsparse_page Sparse Matrix Tutorial
22 *
23 * to be written...
24 *
25 */
26
27#ifdef HAVE_CONFIG_H
28# include "config.h"
29#endif
30
31#include <stdlib.h>
32#include <stdio.h>
33#include <string.h>
34#include <assert.h>
35
36#ifdef HAVE_EVIL
37# include <Evil.h>
38#endif
39
40#include "eina_config.h"
41#include "eina_private.h"
42#include "eina_error.h"
43#include "eina_log.h"
44#include "eina_magic.h"
45#include "eina_mempool.h"
46
47/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
48#include "eina_safety_checks.h"
49#include "eina_matrixsparse.h"
50
51
52/*============================================================================*
53* Local *
54*============================================================================*/
55
56/**
57 * @cond LOCAL
58 */
59
60static const char EINA_MAGIC_MATRIXSPARSE_STR[] = "Eina Matrixsparse";
61static const char EINA_MAGIC_MATRIXSPARSE_ROW_STR[] = "Eina Matrixsparse Row";
62static const char EINA_MAGIC_MATRIXSPARSE_CELL_STR[] = "Eina Matrixsparse Cell";
63static const char EINA_MAGIC_MATRIXSPARSE_ITERATOR_STR[] =
64 "Eina Matrixsparse Iterator";
65static const char EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR_STR[] =
66 "Eina Matrixsparse Row Accessor";
67static const char EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR_STR[] =
68 "Eina Matrixsparse Row Iterator";
69static const char EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR_STR[] =
70 "Eina Matrixsparse Cell Accessor";
71static const char EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR_STR[] =
72 "Eina Matrixsparse Cell Iterator";
73
74
75#define EINA_MAGIC_CHECK_MATRIXSPARSE(d, ...) \
76 do { \
77 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE)) \
78 { \
79 EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE); \
80 return __VA_ARGS__; \
81 } \
82 } while(0)
83
84#define EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(d, ...) \
85 do { \
86 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_ROW)) \
87 { \
88 EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_ROW); \
89 return __VA_ARGS__; \
90 } \
91 } while(0)
92
93#define EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(d, ...) \
94 do { \
95 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_CELL)) \
96 { \
97 EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_CELL); \
98 return __VA_ARGS__; \
99 } \
100 } while(0)
101
102#define EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(d, ...) \
103 do { \
104 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_MATRIXSPARSE_ITERATOR)) \
105 { \
106 EINA_MAGIC_FAIL(d, EINA_MAGIC_MATRIXSPARSE_ITERATOR); \
107 return __VA_ARGS__; \
108 } \
109 } while(0)
110
111struct _Eina_Matrixsparse_Cell
112{
113 Eina_Matrixsparse_Cell *next;
114 Eina_Matrixsparse_Cell *prev;
115
116 void *data;
117 unsigned long col;
118
119 Eina_Matrixsparse_Row *parent;
120
121 EINA_MAGIC
122};
123
124struct _Eina_Matrixsparse_Row
125{
126 Eina_Matrixsparse_Row *next;
127 Eina_Matrixsparse_Row *prev;
128
129 Eina_Matrixsparse_Cell *cols;
130 Eina_Matrixsparse_Cell *last_col;
131 Eina_Matrixsparse_Cell *last_used; /* fast sequential access */
132 unsigned long row;
133
134 Eina_Matrixsparse *parent;
135
136 EINA_MAGIC
137};
138
139struct _Eina_Matrixsparse
140{
141 Eina_Matrixsparse_Row *rows;
142 Eina_Matrixsparse_Row *last_row;
143 Eina_Matrixsparse_Row *last_used; /* fast sequential access */
144
145 struct
146 {
147 unsigned long rows;
148 unsigned long cols;
149 } size;
150
151 struct
152 {
153 void (*func)(void *user_data, void *cell_data);
154 void *user_data;
155 } free;
156
157 EINA_MAGIC
158};
159
160typedef struct _Eina_Matrixsparse_Iterator Eina_Matrixsparse_Iterator;
161typedef struct _Eina_Matrixsparse_Iterator_Complete
162Eina_Matrixsparse_Iterator_Complete;
163
164struct _Eina_Matrixsparse_Iterator
165{
166 Eina_Iterator iterator;
167
168 const Eina_Matrixsparse *m;
169 struct
170 {
171 const Eina_Matrixsparse_Row *row;
172 const Eina_Matrixsparse_Cell *col;
173 } ref;
174
175 EINA_MAGIC
176};
177
178struct _Eina_Matrixsparse_Iterator_Complete
179{
180 Eina_Iterator iterator;
181
182 const Eina_Matrixsparse *m;
183 struct
184 {
185 const Eina_Matrixsparse_Row *row;
186 const Eina_Matrixsparse_Cell *col;
187 } ref;
188
189 struct
190 {
191 unsigned long row, col;
192 } idx;
193
194 struct
195 {
196 Eina_Matrixsparse_Row row;
197 Eina_Matrixsparse_Cell col;
198 } dummy;
199
200 EINA_MAGIC
201};
202
203/**
204 * @todo Eina_Matrixsparse_Row_Iterator: iterator over rows in matrix
205 * @todo Eina_Matrixsparse_Row_Accessor: accessor over rows in matrix
206 * @todo Eina_Matrixsparse_Cell_Iterator: iterator over cells in row
207 * @todo Eina_Matrixsparse_Cell_Accessor: accessor over cells in row
208 */
209
210static int _eina_matrixsparse_log_dom = -1;
211
212#ifdef ERR
213#undef ERR
214#endif
215#define ERR(...) EINA_LOG_DOM_ERR(_eina_matrixsparse_log_dom, __VA_ARGS__)
216
217#ifdef DBG
218#undef DBG
219#endif
220#define DBG(...) EINA_LOG_DOM_DBG(_eina_matrixsparse_log_dom, __VA_ARGS__)
221
222static Eina_Mempool *_eina_matrixsparse_cell_mp = NULL;
223static Eina_Mempool *_eina_matrixsparse_row_mp = NULL;
224
225static inline void
226_eina_matrixsparse_cell_free(Eina_Matrixsparse_Cell *c, void (*free_func)(
227 void *,
228 void *), void *user_data)
229{
230 if (free_func)
231 free_func(user_data, c->data);
232
233 EINA_MAGIC_SET(c, EINA_MAGIC_NONE);
234 eina_mempool_free(_eina_matrixsparse_cell_mp, c);
235}
236
237static inline void
238_eina_matrixsparse_cell_unlink(Eina_Matrixsparse_Cell *c)
239{
240 Eina_Matrixsparse_Row *r = c->parent;
241
242 if (r->last_used == c)
243 {
244 if (c->next)
245 r->last_used = c->next;
246 else
247 r->last_used = c->prev;
248 }
249
250 if (r->last_col == c)
251 r->last_col = c->prev;
252
253 if (r->cols == c)
254 r->cols = c->next;
255
256 if (c->next && c->prev)
257 {
258 c->next->prev = c->prev;
259 c->prev->next = c->next;
260 }
261 else if (c->next)
262 c->next->prev = NULL;
263 else if (c->prev)
264 c->prev->next = NULL;
265}
266
267static inline void
268_eina_matrixsparse_row_cells_free(Eina_Matrixsparse_Row *r, void (*free_func)(
269 void *,
270 void *), void *user_data)
271{
272 Eina_Matrixsparse_Cell *c = r->cols;
273 while (c)
274 {
275 Eina_Matrixsparse_Cell *c_aux = c;
276 c = c->next;
277 _eina_matrixsparse_cell_free(c_aux, free_func, user_data);
278 }
279}
280
281static inline void
282_eina_matrixsparse_row_free(Eina_Matrixsparse_Row *r, void (*free_func)(void *,
283 void *),
284 void *user_data)
285{
286 _eina_matrixsparse_row_cells_free(r, free_func, user_data);
287 EINA_MAGIC_SET(r, EINA_MAGIC_NONE);
288 eina_mempool_free(_eina_matrixsparse_row_mp, r);
289}
290
291static inline void
292_eina_matrixsparse_row_unlink(Eina_Matrixsparse_Row *r)
293{
294 Eina_Matrixsparse *m = r->parent;
295
296 if (m->last_used == r)
297 {
298 if (r->next)
299 m->last_used = r->next;
300 else
301 m->last_used = r->prev;
302 }
303
304 if (m->last_row == r)
305 m->last_row = r->prev;
306
307 if (m->rows == r)
308 m->rows = r->next;
309
310 if (r->next && r->prev)
311 {
312 r->next->prev = r->prev;
313 r->prev->next = r->next;
314 }
315 else if (r->next)
316 r->next->prev = NULL;
317 else if (r->prev)
318 r->prev->next = NULL;
319}
320
321static inline void
322_eina_matrixsparse_row_find_parms_get(const Eina_Matrixsparse *m,
323 unsigned long row,
324 Eina_Matrixsparse_Row **p_r,
325 int *p_dir)
326{
327 Eina_Matrixsparse_Row *r;
328 unsigned long dist;
329 int dir;
330
331 dist = row - m->rows->row;
332 r = m->rows;
333 dir = 1;
334 if (dist > m->last_row->row - row)
335 {
336 dist = m->last_row->row - row;
337 r = m->last_row;
338 dir = -1;
339 }
340
341 if (m->last_used)
342 {
343 if (m->last_used->row < row)
344 {
345 if (dist > row - m->last_used->row)
346 {
347/* dist = row = m->last_used->row; */
348 r = m->last_used;
349 dir = 1;
350 }
351 }
352 else if (dist > m->last_used->row - row)
353 {
354/* dist = m->last_used->row - row; */
355 r = m->last_used;
356 dir = -1;
357 }
358 }
359
360 *p_r = r;
361 *p_dir = dir;
362}
363
364static inline void
365_eina_matrixsparse_row_cell_find_parms_get(const Eina_Matrixsparse_Row *r,
366 unsigned long col,
367 Eina_Matrixsparse_Cell **p_c,
368 int *p_dir)
369{
370 Eina_Matrixsparse_Cell *c;
371 unsigned long dist;
372 int dir;
373
374 dist = col - r->cols->col;
375 c = r->cols;
376 dir = 1;
377 if (dist > r->last_col->col - col)
378 {
379 dist = r->last_col->col - col;
380 c = r->last_col;
381 dir = -1;
382 }
383
384 if (r->last_used)
385 {
386 if (r->last_used->col < col)
387 {
388 if (dist > col - r->last_used->col)
389 {
390/* dist = col = r->last_used->col; */
391 c = r->last_used;
392 dir = 1;
393 }
394 }
395 else if (dist > r->last_used->col - col)
396 {
397/* dist = r->last_used->col - col; */
398 c = r->last_used;
399 dir = -1;
400 }
401 }
402
403 *p_c = c;
404 *p_dir = dir;
405}
406
407static inline Eina_Matrixsparse_Row *
408_eina_matrixsparse_row_idx_get(const Eina_Matrixsparse *m, unsigned long row)
409{
410 Eina_Matrixsparse_Row *r;
411 int dir;
412
413 if (!m->rows)
414 return NULL;
415
416 if (m->rows->row == row)
417 return m->rows;
418 else if (m->rows->row > row)
419 return NULL;
420
421 if (m->last_row->row == row)
422 return m->last_row;
423 else if (m->last_row->row < row)
424 return NULL;
425
426 if ((m->last_used) && (m->last_used->row == row))
427 return m->last_used;
428
429 _eina_matrixsparse_row_find_parms_get(m, row, &r, &dir);
430 assert(dir != 0);
431 if (dir > 0)
432 {
433 for (; r; r = r->next)
434 if (r->row == row)
435 {
436 ((Eina_Matrixsparse *)m)->last_used = r;
437 return r;
438 }
439 else if (r->row > row)
440 return NULL;
441
442 }
443 else if (dir < 0)
444 {
445 for (; r; r = r->prev)
446 if (r->row == row)
447 {
448 ((Eina_Matrixsparse *)m)->last_used = r;
449 return r;
450 }
451 else if (r->row < row)
452 return NULL;
453 }
454
455 return NULL;
456}
457
458static inline Eina_Matrixsparse_Cell *
459_eina_matrixsparse_row_cell_idx_get(const Eina_Matrixsparse_Row *r,
460 unsigned long col)
461{
462 Eina_Matrixsparse_Cell *c;
463 int dir;
464
465 if (!r->cols)
466 return NULL;
467
468 if (r->cols->col == col)
469 return r->cols;
470 else if (r->cols->col > col)
471 return NULL;
472
473 if (r->last_col->col == col)
474 return r->last_col;
475 else if (r->last_col->col < col)
476 return NULL;
477
478 if ((r->last_used) && (r->last_used->col == col))
479 return r->last_used;
480
481 _eina_matrixsparse_row_cell_find_parms_get(r, col, &c, &dir);
482 assert(dir != 0);
483 if (dir > 0)
484 {
485 for (; r; c = c->next)
486 if (c->col == col)
487 {
488 ((Eina_Matrixsparse_Row *)r)->last_used = c;
489 return c;
490 }
491 else if (c->col > col)
492 return NULL;
493
494 }
495 else if (dir < 0)
496 {
497 for (; r; c = c->prev)
498 if (c->col == col)
499 {
500 ((Eina_Matrixsparse_Row *)r)->last_used = c;
501 return c;
502 }
503 else if (c->col < col)
504 return NULL;
505 }
506
507 return NULL;
508}
509
510static inline Eina_Matrixsparse_Cell *
511_eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m,
512 unsigned long row,
513 unsigned long col)
514{
515 Eina_Matrixsparse_Row *r = _eina_matrixsparse_row_idx_get(m, row);
516 if (!r)
517 return NULL;
518
519 return _eina_matrixsparse_row_cell_idx_get(r, col);
520}
521
522static inline void
523_eina_matrixsparse_row_idx_siblings_find(const Eina_Matrixsparse *m,
524 unsigned long row,
525 Eina_Matrixsparse_Row **p_prev,
526 Eina_Matrixsparse_Row **p_next)
527{
528 Eina_Matrixsparse_Row *r;
529 int dir;
530
531 _eina_matrixsparse_row_find_parms_get(m, row, &r, &dir);
532 assert(dir != 0);
533 if (dir > 0)
534 {
535 for (; r; r = r->next)
536 if (r->row > row)
537 break;
538
539 assert(r != NULL);
540 *p_prev = r->prev;
541 *p_next = r;
542 }
543 else if (dir < 0)
544 {
545 for (; r; r = r->prev)
546 if (r->row < row)
547 break;
548
549 assert(r != NULL);
550 *p_prev = r;
551 *p_next = r->next;
552 }
553}
554
555static inline void
556_eina_matrixsparse_row_cell_idx_siblings_find(const Eina_Matrixsparse_Row *r,
557 unsigned long col,
558 Eina_Matrixsparse_Cell **p_prev,
559 Eina_Matrixsparse_Cell **p_next)
560{
561 Eina_Matrixsparse_Cell *c;
562 int dir;
563
564 _eina_matrixsparse_row_cell_find_parms_get(r, col, &c, &dir);
565 assert(dir != 0);
566 if (dir > 0)
567 {
568 for (; c; c = c->next)
569 if (c->col > col)
570 break;
571
572 assert(c != NULL);
573 *p_prev = c->prev;
574 *p_next = c;
575 }
576 else if (dir < 0)
577 {
578 for (; c; c = c->prev)
579 if (c->col < col)
580 break;
581
582 assert(c != NULL);
583 *p_prev = c;
584 *p_next = c->next;
585 }
586}
587
588static inline Eina_Matrixsparse_Row *
589_eina_matrixsparse_row_idx_add(Eina_Matrixsparse *m, unsigned long row)
590{
591 Eina_Matrixsparse_Row *r = eina_mempool_malloc
592 (_eina_matrixsparse_row_mp, sizeof(Eina_Matrixsparse_Row));
593 if (!r)
594 return NULL;
595
596 if (!m->rows)
597 {
598 r->prev = NULL;
599 r->next = NULL;
600 m->rows = r;
601 m->last_row = r;
602 }
603 else if (row < m->rows->row)
604 {
605 r->prev = NULL;
606 r->next = m->rows;
607 m->rows->prev = r;
608 m->rows = r;
609 }
610 else if (row > m->last_row->row)
611 {
612 r->prev = m->last_row;
613 m->last_row->next = r;
614 r->next = NULL;
615 m->last_row = r;
616 }
617 else
618 {
619 Eina_Matrixsparse_Row *prev = NULL, *next = NULL;
620 _eina_matrixsparse_row_idx_siblings_find(m, row, &prev, &next);
621 assert(prev != NULL);
622 assert(next != NULL);
623 r->prev = prev;
624 r->next = next;
625 prev->next = r;
626 next->prev = r;
627 }
628
629 r->cols = NULL;
630 r->last_col = NULL;
631 r->last_used = NULL;
632 r->row = row;
633 r->parent = m;
634 EINA_MAGIC_SET(r, EINA_MAGIC_MATRIXSPARSE_ROW);
635 m->last_used = r;
636 return r;
637}
638
639static inline Eina_Matrixsparse_Cell *
640_eina_matrixsparse_row_cell_idx_add(Eina_Matrixsparse_Row *r,
641 unsigned long col,
642 const void *data)
643{
644 Eina_Matrixsparse_Cell *c = eina_mempool_malloc
645 (_eina_matrixsparse_cell_mp, sizeof(Eina_Matrixsparse_Cell));
646 if (!c)
647 return NULL;
648
649 if (!r->cols)
650 {
651 c->prev = NULL;
652 c->next = NULL;
653 r->cols = c;
654 r->last_col = c;
655 }
656 else if (col < r->cols->col)
657 {
658 c->prev = NULL;
659 c->next = r->cols;
660 r->cols->prev = c;
661 r->cols = c;
662 }
663 else if (col > r->last_col->col)
664 {
665 c->prev = r->last_col;
666 r->last_col->next = c;
667 c->next = NULL;
668 r->last_col = c;
669 }
670 else
671 {
672 Eina_Matrixsparse_Cell *prev = NULL, *next = NULL;
673 _eina_matrixsparse_row_cell_idx_siblings_find(r, col, &prev, &next);
674 assert(prev != NULL);
675 assert(next != NULL);
676 c->prev = prev;
677 c->next = next;
678 prev->next = c;
679 next->prev = c;
680 }
681
682 c->data = (void *)data;
683 c->col = col;
684 c->parent = r;
685 EINA_MAGIC_SET(c, EINA_MAGIC_MATRIXSPARSE_CELL);
686 r->last_used = c;
687 return c;
688}
689
690static inline Eina_Bool
691_eina_matrixsparse_cell_idx_add(Eina_Matrixsparse *m,
692 unsigned long row,
693 unsigned long col,
694 const void *data)
695{
696 Eina_Matrixsparse_Row *r = _eina_matrixsparse_row_idx_get(m, row);
697 if (!r)
698 r = _eina_matrixsparse_row_idx_add(m, row);
699
700 if (!r)
701 return 0;
702
703 if (_eina_matrixsparse_row_cell_idx_add(r, col, data))
704 return 1;
705
706 if (r->cols)
707 return 0;
708
709 _eina_matrixsparse_row_unlink(r);
710 _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data);
711 return 0;
712}
713
714/*============================================================================*
715* Iterators *
716*============================================================================*/
717static Eina_Bool
718_eina_matrixsparse_iterator_next(Eina_Matrixsparse_Iterator *it, void **data)
719{
720 EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, EINA_FALSE);
721
722 /* do not touch it->idx */
723
724 if (!it->ref.col)
725 return 0;
726
727 *data = (Eina_Matrixsparse_Cell *)it->ref.col;
728
729 it->ref.col = it->ref.col->next;
730 if (!it->ref.col)
731 {
732 it->ref.row = it->ref.row->next;
733 if (it->ref.row)
734 it->ref.col = it->ref.row->cols;
735 }
736
737 return 1;
738}
739
740static Eina_Matrixsparse *
741_eina_matrixsparse_iterator_get_container(Eina_Matrixsparse_Iterator *it)
742{
743 EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, NULL);
744 return (Eina_Matrixsparse *)it->m;
745}
746
747static void
748_eina_matrixsparse_iterator_free(Eina_Matrixsparse_Iterator *it)
749{
750 EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it);
751 EINA_MAGIC_SET(it, EINA_MAGIC_NONE);
752 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE);
753 free(it);
754}
755
756static Eina_Bool
757_eina_matrixsparse_iterator_complete_next(
758 Eina_Matrixsparse_Iterator_Complete *it,
759 void **data)
760{
761 EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, EINA_FALSE);
762
763 if (it->idx.row >= it->m->size.rows)
764 return 0;
765
766 if (it->dummy.col.data)
767 ERR("Last iterator call changed dummy cell!");
768
769 if ((it->ref.col) &&
770 (it->ref.col->col == it->idx.col) &&
771 (it->ref.row->row == it->idx.row))
772 {
773 *data = (Eina_Matrixsparse_Cell *)it->ref.col;
774 it->ref.col = it->ref.col->next;
775 if (!it->ref.col)
776 {
777 it->ref.row = it->ref.row->next;
778 if (it->ref.row)
779 it->ref.col = it->ref.row->cols;
780 }
781 }
782 else
783 {
784 it->dummy.col.data = NULL;
785 it->dummy.col.col = it->idx.col;
786 it->dummy.row.row = it->idx.row;
787 *data = &it->dummy.col;
788 }
789
790 it->idx.col++;
791 if (it->idx.col == it->m->size.cols)
792 {
793 it->idx.col = 0;
794 it->idx.row++;
795 }
796
797 return 1;
798}
799
800static Eina_Matrixsparse *
801_eina_matrixsparse_iterator_complete_get_container(
802 Eina_Matrixsparse_Iterator_Complete *it)
803{
804 EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it, NULL);
805 return (Eina_Matrixsparse *)it->m;
806}
807
808static void
809_eina_matrixsparse_iterator_complete_free(
810 Eina_Matrixsparse_Iterator_Complete *it)
811{
812 EINA_MAGIC_CHECK_MATRIXSPARSE_ITERATOR(it);
813
814 if (it->dummy.col.data)
815 ERR("Last iterator call changed dummy cell!");
816
817 EINA_MAGIC_SET(it, EINA_MAGIC_NONE);
818 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE);
819 free(it);
820}
821
822
823/**
824 * @endcond
825 */
826
827/*============================================================================*
828* Global *
829*============================================================================*/
830
831/**
832 * @internal
833 * @brief Initialize the matrixsparse module.
834 *
835 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
836 *
837 * This function sets up the matrixsparse module of Eina. It is called by
838 * eina_init().
839 *
840 * This function creates mempool to speed up matrix rows and cells
841 * management, using EINA_MEMPOOL environment variable if it is set to
842 * choose the memory pool type to use.
843 *
844 * @see eina_init()
845 */
846Eina_Bool
847eina_matrixsparse_init(void)
848{
849 const char *choice, *tmp;
850
851 _eina_matrixsparse_log_dom = eina_log_domain_register("eina_matrixsparse",
852 EINA_LOG_COLOR_DEFAULT);
853 if (_eina_matrixsparse_log_dom < 0)
854 {
855 EINA_LOG_ERR("Could not register log domain: eina_matrixsparse");
856 return EINA_FALSE;
857 }
858
859#ifdef EINA_DEFAULT_MEMPOOL
860 choice = "pass_through";
861#else
862 choice = "chained_mempool";
863#endif
864 tmp = getenv("EINA_MEMPOOL");
865 if (tmp && tmp[0])
866 choice = tmp;
867
868 _eina_matrixsparse_cell_mp = eina_mempool_add
869 (choice,
870 "matrixsparse_cell",
871 NULL,
872 sizeof (Eina_Matrixsparse_Cell),
873 120);
874 if (!_eina_matrixsparse_cell_mp)
875 {
876 ERR(
877 "Mempool for matrixsparse_cell cannot be allocated in matrixsparse init.");
878 goto on_init_fail;
879 }
880
881 _eina_matrixsparse_row_mp = eina_mempool_add
882 (choice, "matrixsparse_row", NULL, sizeof (Eina_Matrixsparse_Row), 120);
883 if (!_eina_matrixsparse_row_mp)
884 {
885 ERR(
886 "Mempool for matrixsparse_row cannot be allocated in matrixsparse init.");
887 goto on_init_fail;
888 }
889
890#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
891 EMS(EINA_MAGIC_MATRIXSPARSE);
892 EMS(EINA_MAGIC_MATRIXSPARSE_ROW);
893 EMS(EINA_MAGIC_MATRIXSPARSE_CELL);
894 EMS(EINA_MAGIC_MATRIXSPARSE_ITERATOR);
895 EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR);
896 EMS(EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR);
897 EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR);
898 EMS(EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR);
899#undef EMS
900
901 return EINA_TRUE;
902
903on_init_fail:
904 eina_log_domain_unregister(_eina_matrixsparse_log_dom);
905 _eina_matrixsparse_log_dom = -1;
906 return EINA_FALSE;
907}
908
909/**
910 * @internal
911 * @brief Shut down the matrixsparse module.
912 *
913 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
914 *
915 * This function shuts down the matrixsparse module set up by
916 * eina_matrixsparse_init(). It is called by eina_shutdown().
917 *
918 * @see eina_shutdown()
919 */
920Eina_Bool
921eina_matrixsparse_shutdown(void)
922{
923 eina_mempool_del(_eina_matrixsparse_row_mp);
924 eina_mempool_del(_eina_matrixsparse_cell_mp);
925
926 eina_log_domain_unregister(_eina_matrixsparse_log_dom);
927 _eina_matrixsparse_log_dom = -1;
928 return EINA_TRUE;
929}
930
931/*============================================================================*
932* API *
933*============================================================================*/
934
935EAPI Eina_Matrixsparse *
936eina_matrixsparse_new(unsigned long rows, unsigned long cols, void (*free_func)(
937 void *user_data,
938 void *cell_data), const void *user_data)
939{
940 Eina_Matrixsparse *m;
941
942 EINA_SAFETY_ON_FALSE_RETURN_VAL(rows > 0, NULL);
943 EINA_SAFETY_ON_FALSE_RETURN_VAL(cols > 0, NULL);
944
945 m = malloc(sizeof(Eina_Matrixsparse));
946 if (!m)
947 {
948 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
949 return NULL;
950 }
951
952 EINA_MAGIC_SET(m, EINA_MAGIC_MATRIXSPARSE);
953
954 m->rows = NULL;
955 m->last_row = NULL;
956 m->last_used = NULL;
957
958 m->size.rows = rows;
959 m->size.cols = cols;
960 m->free.func = free_func;
961 m->free.user_data = (void *)user_data;
962
963 eina_error_set(0);
964 return m;
965}
966
967EAPI void
968eina_matrixsparse_free(Eina_Matrixsparse *m)
969{
970 void (*free_func)(void *, void *);
971 void *user_data;
972
973 Eina_Matrixsparse_Row *r;
974 EINA_MAGIC_CHECK_MATRIXSPARSE(m);
975
976 free_func = m->free.func;
977 user_data = m->free.user_data;
978
979 r = m->rows;
980 while (r)
981 {
982 Eina_Matrixsparse_Row *r_aux = r;
983 r = r->next;
984 _eina_matrixsparse_row_free(r_aux, free_func, user_data);
985 }
986
987 EINA_MAGIC_SET(m, EINA_MAGIC_NONE);
988 free(m);
989}
990
991EAPI void
992eina_matrixsparse_size_get(const Eina_Matrixsparse *m,
993 unsigned long *rows,
994 unsigned long *cols)
995{
996 if (rows)
997 *rows = 0;
998
999 if (cols)
1000 *cols = 0;
1001
1002 EINA_MAGIC_CHECK_MATRIXSPARSE(m);
1003 if (rows)
1004 *rows = m->size.rows;
1005
1006 if (cols)
1007 *cols = m->size.cols;
1008}
1009
1010EAPI Eina_Bool
1011eina_matrixsparse_size_set(Eina_Matrixsparse *m,
1012 unsigned long rows,
1013 unsigned long cols)
1014{
1015 Eina_Bool update_last_used_row;
1016 Eina_Matrixsparse_Row *r;
1017 void (*free_func)(void *, void *);
1018 void *user_data;
1019
1020 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1021 EINA_SAFETY_ON_FALSE_RETURN_VAL(rows > 0, 0);
1022 EINA_SAFETY_ON_FALSE_RETURN_VAL(cols > 0, 0);
1023
1024 if ((rows == m->size.rows) && (cols == m->size.cols))
1025 return 1;
1026
1027 update_last_used_row = ((m->last_used) && (m->last_used->row >= rows));
1028 free_func = m->free.func;
1029 user_data = m->free.user_data;
1030
1031 r = m->last_row;
1032 while (r && r->row >= rows)
1033 {
1034 Eina_Matrixsparse_Row *r_aux = r;
1035 r = r->prev;
1036 _eina_matrixsparse_row_free(r_aux, free_func, user_data);
1037 }
1038 if (!r)
1039 {
1040 m->last_row = NULL;
1041 m->rows = NULL;
1042 }
1043 else if (r != m->last_row)
1044 {
1045 r->next = NULL;
1046 m->last_row = r;
1047 }
1048
1049 if (update_last_used_row)
1050 m->last_used = m->last_row;
1051
1052 r = m->rows;
1053 while (r)
1054 {
1055 Eina_Matrixsparse_Cell *c = r->last_col;
1056 Eina_Bool update_last_used_col;
1057 update_last_used_col = ((r->last_used) && (r->last_used->col >= cols));
1058 while (c && c->col >= cols)
1059 {
1060 Eina_Matrixsparse_Cell *c_aux = c;
1061 c = c->prev;
1062 _eina_matrixsparse_cell_free(c_aux, free_func, user_data);
1063 }
1064 if (!c)
1065 {
1066 Eina_Matrixsparse_Row *r_aux = r;
1067 r->cols = NULL;
1068 r->last_col = NULL;
1069 if (r->next)
1070 r->next->prev = r->prev;
1071 else
1072 m->last_row = r->prev;
1073
1074 if (r->prev)
1075 r->prev->next = r->next;
1076 else
1077 m->rows = r->next;
1078
1079 r = r->next;
1080 _eina_matrixsparse_row_free(r_aux, free_func, user_data);
1081 }
1082 else
1083 {
1084 if (c != r->last_col)
1085 {
1086 c->next = NULL;
1087 r->last_col = c;
1088 }
1089
1090 if (update_last_used_col)
1091 r->last_used = r->last_col;
1092
1093 r = r->next;
1094 }
1095 }
1096
1097 update_last_used_row = 0;
1098 if (m->last_used)
1099 {
1100 if (m->last_row)
1101 update_last_used_row = m->last_used->row > m->last_row->row;
1102 else
1103 update_last_used_row = 1;
1104 }
1105
1106 if (update_last_used_row)
1107 m->last_used = m->last_row;
1108
1109 m->size.rows = rows;
1110 m->size.cols = cols;
1111 return 1;
1112}
1113
1114EAPI Eina_Bool
1115eina_matrixsparse_cell_idx_get(const Eina_Matrixsparse *m,
1116 unsigned long row,
1117 unsigned long col,
1118 Eina_Matrixsparse_Cell **cell)
1119{
1120 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1121 EINA_SAFETY_ON_NULL_RETURN_VAL(cell, 0);
1122 *cell = NULL;
1123 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1124 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1125 *cell = _eina_matrixsparse_cell_idx_get(m, row, col);
1126 return 1;
1127}
1128
1129EAPI void *
1130eina_matrixsparse_cell_data_get(const Eina_Matrixsparse_Cell *cell)
1131{
1132 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, NULL);
1133 return cell->data;
1134}
1135
1136EAPI void *
1137eina_matrixsparse_data_idx_get(const Eina_Matrixsparse *m,
1138 unsigned long row,
1139 unsigned long col)
1140{
1141 Eina_Matrixsparse_Cell *c;
1142 EINA_MAGIC_CHECK_MATRIXSPARSE(m, NULL);
1143 c = _eina_matrixsparse_cell_idx_get(m, row, col);
1144 if (c)
1145 return c->data;
1146 else
1147 return NULL;
1148}
1149
1150EAPI Eina_Bool
1151eina_matrixsparse_cell_position_get(const Eina_Matrixsparse_Cell *cell,
1152 unsigned long *row,
1153 unsigned long *col)
1154{
1155 if (row)
1156 *row = 0;
1157
1158 if (col)
1159 *col = 0;
1160
1161 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1162 EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0);
1163 if (row)
1164 *row = cell->parent->row;
1165
1166 if (col)
1167 *col = cell->col;
1168
1169 return 1;
1170}
1171
1172EAPI Eina_Bool
1173eina_matrixsparse_cell_data_replace(Eina_Matrixsparse_Cell *cell,
1174 const void *data,
1175 void **p_old)
1176{
1177 if (p_old)
1178 *p_old = NULL;
1179
1180 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1181
1182 if (p_old)
1183 *p_old = cell->data;
1184
1185 cell->data = (void *)data;
1186 return 1;
1187}
1188
1189EAPI Eina_Bool
1190eina_matrixsparse_cell_data_set(Eina_Matrixsparse_Cell *cell, const void *data)
1191{
1192 Eina_Matrixsparse *m;
1193
1194 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1195 EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0);
1196 EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0);
1197
1198 m = cell->parent->parent;
1199
1200 if (m->free.func)
1201 m->free.func(m->free.user_data, cell->data);
1202
1203 cell->data = (void *)data;
1204 return 1;
1205}
1206
1207EAPI Eina_Bool
1208eina_matrixsparse_data_idx_replace(Eina_Matrixsparse *m,
1209 unsigned long row,
1210 unsigned long col,
1211 const void *data,
1212 void **p_old)
1213{
1214 Eina_Matrixsparse_Cell *cell;
1215
1216 if (p_old)
1217 *p_old = NULL;
1218
1219 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1220 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1221 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1222
1223 cell = _eina_matrixsparse_cell_idx_get(m, row, col);
1224 if (cell)
1225 {
1226 if (p_old)
1227 *p_old = cell->data;
1228
1229 cell->data = (void *)data;
1230 return 1;
1231 }
1232
1233 return _eina_matrixsparse_cell_idx_add(m, row, col, data);
1234}
1235
1236EAPI Eina_Bool
1237eina_matrixsparse_data_idx_set(Eina_Matrixsparse *m,
1238 unsigned long row,
1239 unsigned long col,
1240 const void *data)
1241{
1242 Eina_Matrixsparse_Cell *cell;
1243
1244 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1245 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1246 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1247
1248 cell = _eina_matrixsparse_cell_idx_get(m, row, col);
1249 if (cell)
1250 {
1251 if (m->free.func)
1252 m->free.func(m->free.user_data, cell->data);
1253
1254 cell->data = (void *)data;
1255 return 1;
1256 }
1257
1258 return _eina_matrixsparse_cell_idx_add(m, row, col, data);
1259}
1260
1261EAPI Eina_Bool
1262eina_matrixsparse_row_idx_clear(Eina_Matrixsparse *m, unsigned long row)
1263{
1264 Eina_Matrixsparse_Row *r;
1265
1266 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1267 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1268
1269 r = _eina_matrixsparse_row_idx_get(m, row);
1270 if (!r)
1271 return 1;
1272
1273 _eina_matrixsparse_row_unlink(r);
1274 _eina_matrixsparse_row_free(r, m->free.func, m->free.user_data);
1275
1276 return 1;
1277}
1278
1279EAPI Eina_Bool
1280eina_matrixsparse_column_idx_clear(Eina_Matrixsparse *m, unsigned long col)
1281{
1282 Eina_Matrixsparse_Row *r;
1283 void (*free_func)(void *, void *);
1284 void *user_data;
1285
1286 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1287 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1288
1289 free_func = m->free.func;
1290 user_data = m->free.user_data;
1291
1292 for (r = m->rows; r; )
1293 {
1294 Eina_Matrixsparse_Row *r_aux = r;
1295 Eina_Matrixsparse_Cell *c;
1296
1297 c = _eina_matrixsparse_row_cell_idx_get(r, col);
1298 r = r->next;
1299
1300 if (!c)
1301 continue;
1302
1303 if ((r_aux->cols != c) || (r_aux->last_col != c))
1304 {
1305 _eina_matrixsparse_cell_unlink(c);
1306 _eina_matrixsparse_cell_free(c, free_func, user_data);
1307 }
1308 else
1309 {
1310 _eina_matrixsparse_row_unlink(r_aux);
1311 _eina_matrixsparse_row_free(r_aux, free_func, user_data);
1312 }
1313 }
1314
1315 return 1;
1316}
1317
1318EAPI Eina_Bool
1319eina_matrixsparse_cell_idx_clear(Eina_Matrixsparse *m,
1320 unsigned long row,
1321 unsigned long col)
1322{
1323 Eina_Matrixsparse_Cell *c;
1324
1325 EINA_MAGIC_CHECK_MATRIXSPARSE(m, 0);
1326 EINA_SAFETY_ON_FALSE_RETURN_VAL(row < m->size.rows, 0);
1327 EINA_SAFETY_ON_FALSE_RETURN_VAL(col < m->size.cols, 0);
1328
1329 c = _eina_matrixsparse_cell_idx_get(m, row, col);
1330 if (!c)
1331 return 1;
1332
1333 _eina_matrixsparse_cell_unlink(c);
1334 _eina_matrixsparse_cell_free(c, m->free.func, m->free.user_data);
1335
1336 return 1;
1337}
1338
1339EAPI Eina_Bool
1340eina_matrixsparse_cell_clear(Eina_Matrixsparse_Cell *cell)
1341{
1342 Eina_Matrixsparse *m;
1343
1344 EINA_MAGIC_CHECK_MATRIXSPARSE_CELL(cell, 0);
1345 EINA_MAGIC_CHECK_MATRIXSPARSE_ROW(cell->parent, 0);
1346 EINA_MAGIC_CHECK_MATRIXSPARSE(cell->parent->parent, 0);
1347
1348 m = cell->parent->parent;
1349
1350 _eina_matrixsparse_cell_unlink(cell);
1351 _eina_matrixsparse_cell_free(cell, m->free.func, m->free.user_data);
1352 return 1;
1353}
1354
1355EAPI Eina_Iterator *
1356eina_matrixsparse_iterator_new(const Eina_Matrixsparse *m)
1357{
1358 Eina_Matrixsparse_Iterator *it;
1359
1360 it = calloc(1, sizeof(*it));
1361 if (!it)
1362 {
1363 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1364 return NULL;
1365 }
1366
1367 EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR);
1368 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1369
1370 it->m = m;
1371 it->ref.row = m->rows;
1372 it->ref.col = m->rows ? m->rows->cols : NULL;
1373
1374 it->iterator.version = EINA_ITERATOR_VERSION;
1375 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_matrixsparse_iterator_next);
1376 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1377 _eina_matrixsparse_iterator_get_container);
1378 it->iterator.free = FUNC_ITERATOR_FREE(_eina_matrixsparse_iterator_free);
1379 return &it->iterator;
1380}
1381
1382EAPI Eina_Iterator *
1383eina_matrixsparse_iterator_complete_new(const Eina_Matrixsparse *m)
1384{
1385 Eina_Matrixsparse_Iterator_Complete *it;
1386
1387 it = calloc(1, sizeof(*it));
1388 if (!it)
1389 {
1390 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1391 return NULL;
1392 }
1393
1394 EINA_MAGIC_SET(it, EINA_MAGIC_MATRIXSPARSE_ITERATOR);
1395 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1396
1397 it->m = m;
1398 it->idx.row = 0;
1399 it->idx.col = 0;
1400 it->ref.row = m->rows;
1401 it->ref.col = m->rows ? m->rows->cols : NULL;
1402
1403 it->dummy.row.next = it->dummy.row.prev = NULL;
1404 it->dummy.row.cols = it->dummy.row.last_col = it->dummy.row.last_used = NULL;
1405 it->dummy.row.parent = (Eina_Matrixsparse *)m;
1406 EINA_MAGIC_SET(&it->dummy.row, EINA_MAGIC_MATRIXSPARSE_ROW);
1407
1408 it->dummy.col.next = it->dummy.col.prev = NULL;
1409 it->dummy.col.data = NULL;
1410 it->dummy.col.parent = &it->dummy.row;
1411 EINA_MAGIC_SET(&it->dummy.col, EINA_MAGIC_MATRIXSPARSE_CELL);
1412
1413 it->iterator.version = EINA_ITERATOR_VERSION;
1414 it->iterator.next = FUNC_ITERATOR_NEXT(
1415 _eina_matrixsparse_iterator_complete_next);
1416 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1417 _eina_matrixsparse_iterator_complete_get_container);
1418 it->iterator.free = FUNC_ITERATOR_FREE(
1419 _eina_matrixsparse_iterator_complete_free);
1420 return &it->iterator;
1421}
diff --git a/libraries/eina/src/lib/eina_mempool.c b/libraries/eina/src/lib/eina_mempool.c
new file mode 100644
index 0000000..065532e
--- /dev/null
+++ b/libraries/eina/src/lib/eina_mempool.c
@@ -0,0 +1,387 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <assert.h>
24#include <stdlib.h>
25#include <stdio.h>
26#include <string.h>
27
28#include "eina_config.h"
29#include "eina_private.h"
30#include "eina_hash.h"
31#include "eina_module.h"
32#include "eina_log.h"
33#include "eina_main.h"
34
35/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
36#include "eina_safety_checks.h"
37#include "eina_mempool.h"
38
39/*============================================================================*
40* Local *
41*============================================================================*/
42
43/**
44 * @cond LOCAL
45 */
46
47static Eina_Hash *_backends;
48static Eina_Array *_modules;
49static int _eina_mempool_log_dom = -1;
50
51#ifdef ERR
52#undef ERR
53#endif
54#define ERR(...) EINA_LOG_DOM_ERR(_eina_mempool_log_dom, __VA_ARGS__)
55
56#ifdef DBG
57#undef DBG
58#endif
59#define DBG(...) EINA_LOG_DOM_DBG(_eina_mempool_log_dom, __VA_ARGS__)
60
61
62static Eina_Mempool *
63_new_va(const char *name,
64 const char *context,
65 const char *options,
66 va_list args)
67{
68 Eina_Mempool_Backend *be;
69 Eina_Mempool *mp;
70
71 Eina_Error err = EINA_ERROR_NOT_MEMPOOL_MODULE;
72
73 eina_error_set(0);
74 be = eina_hash_find(_backends, name);
75 if ((!be) || (!be->init))
76 goto on_error;
77
78 err = EINA_ERROR_OUT_OF_MEMORY;
79 mp = calloc(1, sizeof(Eina_Mempool));
80 if (!mp)
81 goto on_error;
82
83 /* Work around ABI incompability introduced in Eina 1.1 */
84#define SBP(Property) mp->backend.Property = be->Property;
85 SBP(name);
86 SBP(init);
87 SBP(free);
88 SBP(alloc);
89 SBP(realloc);
90 SBP(garbage_collect);
91 SBP(statistics);
92 SBP(shutdown);
93#undef SBP
94
95 if (be->repack)
96 {
97 mp->backend2 = calloc(1, sizeof (Eina_Mempool_Backend_ABI2));
98 if (mp->backend2)
99 mp->backend2->repack = be->repack;
100 }
101
102 mp->backend_data = mp->backend.init(context, options, args);
103
104 return mp;
105
106on_error:
107 eina_error_set(err);
108 return NULL;
109}
110
111/* Built-in backend's prototypes */
112
113#ifdef EINA_STATIC_BUILD_BUDDY
114Eina_Bool buddy_init(void);
115void buddy_shutdown(void);
116#endif
117
118#ifdef EINA_STATIC_BUILD_CHAINED_POOL
119Eina_Bool chained_init(void);
120void chained_shutdown(void);
121#endif
122
123#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED
124Eina_Bool ememoa_fixed_init(void);
125void ememoa_fixed_shutdown(void);
126#endif
127
128#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN
129Eina_Bool ememoa_unknown_init(void);
130void ememoa_unknown_shutdown(void);
131#endif
132
133#ifdef EINA_STATIC_BUILD_FIXED_BITMAP
134Eina_Bool fixed_bitmap_init(void);
135void fixed_bitmap_shutdown(void);
136#endif
137
138#ifdef EINA_STATIC_BUILD_ONE_BIG
139Eina_Bool one_big_init(void);
140void one_big_shutdown(void);
141#endif
142
143#ifdef EINA_STATIC_BUILD_PASS_THROUGH
144Eina_Bool pass_through_init(void);
145void pass_through_shutdown(void);
146#endif
147
148/**
149 * @endcond
150 */
151
152/*============================================================================*
153* Global *
154*============================================================================*/
155
156/**
157 * @cond LOCAL
158 */
159
160EAPI Eina_Error EINA_ERROR_NOT_MEMPOOL_MODULE = 0;
161
162static const char EINA_ERROR_NOT_MEMPOOL_MODULE_STR[] =
163 "Not a memory pool module.";
164
165/**
166 * @endcond
167 */
168
169EAPI Eina_Bool
170eina_mempool_register(Eina_Mempool_Backend *be)
171{
172 EINA_SAFETY_ON_NULL_RETURN_VAL(be, 0);
173 DBG("be=%p, name=%p", be, be->name);
174 return eina_hash_add(_backends, be->name, be);
175}
176
177EAPI void
178eina_mempool_unregister(Eina_Mempool_Backend *be)
179{
180 EINA_SAFETY_ON_NULL_RETURN(be);
181 DBG("be=%p, name=%p", be, be->name);
182 eina_hash_del(_backends, be->name, be);
183}
184
185Eina_Bool
186eina_mempool_init(void)
187{
188 char *path;
189
190 _eina_mempool_log_dom = eina_log_domain_register("eina_mempool",
191 EINA_LOG_COLOR_DEFAULT);
192 if (_eina_mempool_log_dom < 0)
193 {
194 EINA_LOG_ERR("Could not register log domain: eina_mempool");
195 return 0;
196 }
197
198 EINA_ERROR_NOT_MEMPOOL_MODULE = eina_error_msg_static_register(
199 EINA_ERROR_NOT_MEMPOOL_MODULE_STR);
200 _backends = eina_hash_string_superfast_new(NULL);
201
202 /* dynamic backends */
203 _modules = eina_module_arch_list_get(NULL,
204 PACKAGE_LIB_DIR "/eina/modules/mp",
205 MODULE_ARCH);
206
207 path = eina_module_environment_path_get("HOME", "/.eina/mp/modules/mp");
208 _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH);
209 if (path)
210 free(path);
211
212 path = eina_module_environment_path_get("EINA_MODULES_MEMPOOL_DIR",
213 "/eina/modules/mp");
214 _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH);
215 if (path)
216 free(path);
217
218 path = eina_module_symbol_path_get((const void *)eina_init,
219 "/eina/modules/mp");
220 _modules = eina_module_arch_list_get(_modules, path, MODULE_ARCH);
221 if (path)
222 free(path);
223
224 if (!_modules)
225 {
226 ERR("no mempool modules able to be loaded.");
227 eina_hash_free(_backends);
228 goto mempool_init_error;
229 }
230
231 eina_module_list_load(_modules);
232
233 /* builtin backends */
234#ifdef EINA_STATIC_BUILD_BUDDY
235 buddy_init();
236#endif
237#ifdef EINA_STATIC_BUILD_CHAINED_POOL
238 chained_init();
239#endif
240#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED
241 ememoa_fixed_init();
242#endif
243#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN
244 ememoa_unknown_init();
245#endif
246#ifdef EINA_STATIC_BUILD_FIXED_BITMAP
247 fixed_bitmap_init();
248#endif
249#ifdef EINA_STATIC_BUILD_ONE_BIG
250 one_big_init();
251#endif
252#ifdef EINA_STATIC_BUILD_PASS_THROUGH
253 pass_through_init();
254#endif
255
256 return EINA_TRUE;
257
258mempool_init_error:
259 eina_log_domain_unregister(_eina_mempool_log_dom);
260 _eina_mempool_log_dom = -1;
261
262 return EINA_FALSE;
263}
264
265Eina_Bool
266eina_mempool_shutdown(void)
267{
268 /* builtin backends */
269#ifdef EINA_STATIC_BUILD_BUDDY
270 buddy_shutdown();
271#endif
272#ifdef EINA_STATIC_BUILD_CHAINED_POOL
273 chained_shutdown();
274#endif
275#ifdef EINA_STATIC_BUILD_EMEMOA_FIXED
276 ememoa_fixed_shutdown();
277#endif
278#ifdef EINA_STATIC_BUILD_EMEMOA_UNKNOWN
279 ememoa_unknown_shutdown();
280#endif
281#ifdef EINA_STATIC_BUILD_FIXED_BITMAP
282 fixed_bitmap_shutdown();
283#endif
284#ifdef EINA_STATIC_BUILD_ONE_BIG
285 one_big_shutdown();
286#endif
287#ifdef EINA_STATIC_BUILD_PASS_THROUGH
288 pass_through_shutdown();
289#endif
290 /* dynamic backends */
291 eina_module_list_free(_modules);
292 if (_modules)
293 eina_array_free(_modules);
294
295 if (_backends)
296 eina_hash_free(_backends);
297
298 eina_log_domain_unregister(_eina_mempool_log_dom);
299 _eina_mempool_log_dom = -1;
300
301 return EINA_TRUE;
302}
303
304/*============================================================================*
305* API *
306*============================================================================*/
307
308EAPI Eina_Mempool *
309eina_mempool_add(const char *name,
310 const char *context,
311 const char *options,
312 ...)
313{
314 Eina_Mempool *mp;
315 va_list args;
316
317 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
318 DBG("name=%s, context=%s, options=%s",
319 name, context ? context : "", options ? options : "");
320
321 va_start(args, options);
322 mp = _new_va(name, context, options, args);
323 va_end(args);
324
325 DBG("name=%s, context=%s, options=%s, mp=%p",
326 name, context ? context : "", options ? options : "", mp);
327
328 return mp;
329}
330
331EAPI void eina_mempool_del(Eina_Mempool *mp)
332{
333 EINA_SAFETY_ON_NULL_RETURN(mp);
334 EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
335 DBG("mp=%p", mp);
336 mp->backend.shutdown(mp->backend_data);
337 free(mp->backend2);
338 free(mp);
339}
340
341EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data)
342{
343 EINA_SAFETY_ON_NULL_RETURN(mp);
344 EINA_SAFETY_ON_NULL_RETURN(mp->backend2);
345 EINA_SAFETY_ON_NULL_RETURN(mp->backend2->repack);
346 DBG("mp=%p", mp);
347 mp->backend2->repack(mp->backend_data, cb, data);
348}
349
350EAPI void eina_mempool_gc(Eina_Mempool *mp)
351{
352 EINA_SAFETY_ON_NULL_RETURN(mp);
353 EINA_SAFETY_ON_NULL_RETURN(mp->backend.garbage_collect);
354 DBG("mp=%p", mp);
355 mp->backend.garbage_collect(mp->backend_data);
356}
357
358EAPI void eina_mempool_statistics(Eina_Mempool *mp)
359{
360 EINA_SAFETY_ON_NULL_RETURN(mp);
361 EINA_SAFETY_ON_NULL_RETURN(mp->backend.statistics);
362 DBG("mp=%p", mp);
363 mp->backend.statistics(mp->backend_data);
364}
365
366EAPI unsigned int
367eina_mempool_alignof(unsigned int size)
368{
369 int align;
370
371 if (size <= 2)
372 align = 2;
373 else if (size < 8)
374 align = 4;
375 else
376#if __WORDSIZE == 32
377 align = 8;
378
379#else
380 if (size < 16)
381 align = 8;
382 else
383 align = 16;
384#endif
385
386 return ((size / align) + 1) * align;
387}
diff --git a/libraries/eina/src/lib/eina_mmap.c b/libraries/eina/src/lib/eina_mmap.c
new file mode 100644
index 0000000..fb27bd7
--- /dev/null
+++ b/libraries/eina/src/lib/eina_mmap.c
@@ -0,0 +1,185 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Carsten Haitzler
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef HAVE_SIGINFO_T
24
25#ifdef STDC_HEADERS
26# include <stdlib.h>
27# include <stddef.h>
28#else
29# ifdef HAVE_STDLIB_H
30# include <stdlib.h>
31# endif
32#endif
33
34#include <stdio.h>
35#include <stdlib.h>
36#include <string.h>
37#include <sys/types.h>
38#include <sys/stat.h>
39#include <sys/mman.h>
40#include <limits.h>
41#include <signal.h>
42#include <errno.h>
43#include <fcntl.h>
44#include <unistd.h>
45
46#if HAVE_SIGINFO_H
47# include <siginfo.h>
48#endif
49
50#endif
51
52#include "eina_config.h"
53#include "eina_private.h"
54#include "eina_log.h"
55#include "eina_mmap.h"
56
57/*============================================================================*
58 * Local *
59 *============================================================================*/
60
61static Eina_Bool mmap_safe = EINA_FALSE;
62#ifdef HAVE_SIGINFO_T
63
64static int _eina_mmap_log_dom = -1;
65static int _eina_mmap_zero_fd = -1;
66static long _eina_mmap_pagesize = -1;
67
68#ifdef ERR
69#undef ERR
70#endif
71#define ERR(...) EINA_LOG_DOM_ERR(_eina_mmap_log_dom, __VA_ARGS__)
72
73#ifdef DBG
74#undef DBG
75#endif
76#define DBG(...) EINA_LOG_DOM_DBG(_eina_mmap_log_dom, __VA_ARGS__)
77
78static void
79_eina_mmap_safe_sigbus(int sig __UNUSED__,
80 siginfo_t *siginfo,
81 void *ptr __UNUSED__)
82{
83 unsigned char *addr = (unsigned char *)(siginfo->si_addr);
84 int perrno;
85
86 /* save previous errno */
87 perrno = errno;
88 /* if problems was an unaligned access - complain accordingly and abort */
89 if (siginfo->si_code == BUS_ADRALN)
90 {
91 ERR("Unaligned memory access. SIGBUS!!!");
92 errno = perrno;
93 abort();
94 }
95 /* send this to stderr - not eina_log. Specifically want this on stderr */
96 fprintf(stderr,
97 "EINA: Data at address 0x%lx is invalid. Replacing with zero page.\n",
98 (unsigned long)addr);
99 /* align address to the lower page boundary */
100 addr = (unsigned char *)((long)addr & (~(_eina_mmap_pagesize - 1)));
101 /* mmap a pzge of zero's from /dev/zero in there */
102 if (mmap(addr, _eina_mmap_pagesize,
103 PROT_READ | PROT_WRITE | PROT_EXEC,
104 MAP_PRIVATE | MAP_FIXED,
105 _eina_mmap_zero_fd, 0) == MAP_FAILED)
106 {
107 /* mmap of /dev/zero failed :( */
108 perror("mmap");
109 ERR("Failed to mmap() /dev/zero in place of page. SIGBUS!!!");
110 errno = perrno;
111 abort();
112 }
113 /* restore previous errno */
114 errno = perrno;
115}
116#endif
117
118/*============================================================================*
119 * API *
120 *============================================================================*/
121
122EAPI Eina_Bool
123eina_mmap_safety_enabled_set(Eina_Bool enabled)
124{
125#ifndef HAVE_SIGINFO_T
126 (void) enabled;
127 return EINA_FALSE;
128#else
129 if (_eina_mmap_log_dom < 0)
130 {
131 _eina_mmap_log_dom = eina_log_domain_register("eina_mmap",
132 EINA_LOG_COLOR_DEFAULT);
133 if (_eina_mmap_log_dom < 0)
134 {
135 EINA_LOG_ERR("Could not register log domain: eina_mmap");
136 return EINA_FALSE;
137 }
138 }
139
140 enabled = !!enabled;
141
142 if (mmap_safe == enabled) return mmap_safe;
143 if (enabled)
144 {
145 struct sigaction sa;
146
147 /* find out system page size the cleanest way we can */
148#ifdef _SC_PAGESIZE
149 _eina_mmap_pagesize = sysconf(_SC_PAGESIZE);
150 if (_eina_mmap_pagesize <= 0) return EINA_FALSE;
151#else
152 _eina_mmap_pagesize = 4096;
153#endif
154 /* no zero page device - open it */
155 if (_eina_mmap_zero_fd < 0)
156 {
157 _eina_mmap_zero_fd = open("/dev/zero", O_RDWR);
158 /* if we don;'t have one - fail to set up mmap safety */
159 if (_eina_mmap_zero_fd < 0) return EINA_FALSE;
160 }
161 /* set up signal handler for SIGBUS */
162 sa.sa_sigaction = _eina_mmap_safe_sigbus;
163 sa.sa_flags = SA_RESTART | SA_SIGINFO;
164 sigemptyset(&sa.sa_mask);
165 if (sigaction(SIGBUS, &sa, NULL) == 0) return EINA_FALSE;
166 /* setup of SIGBUS handler failed, lets close zero page dev and fail */
167 close(_eina_mmap_zero_fd);
168 _eina_mmap_zero_fd = -1;
169 return EINA_FALSE;
170 }
171 else
172 {
173 /* reset signal handler to default for SIGBUS */
174 signal(SIGBUS, SIG_DFL);
175 }
176 mmap_safe = enabled;
177 return mmap_safe;
178#endif
179}
180
181EAPI Eina_Bool
182eina_mmap_safety_enabled_get(void)
183{
184 return mmap_safe;
185}
diff --git a/libraries/eina/src/lib/eina_module.c b/libraries/eina/src/lib/eina_module.c
new file mode 100644
index 0000000..0dd19a6
--- /dev/null
+++ b/libraries/eina/src/lib/eina_module.c
@@ -0,0 +1,599 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Jorge Luis Zapata Muga, Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef HAVE_ALLOCA_H
24# include <alloca.h>
25#elif defined __GNUC__
26# define alloca __builtin_alloca
27#elif defined _AIX
28# define alloca __alloca
29#elif defined _MSC_VER
30# include <malloc.h>
31# define alloca _alloca
32#else
33# include <stddef.h>
34# ifdef __cplusplus
35extern "C"
36# endif
37void *alloca (size_t);
38#endif
39
40#include <stdio.h>
41#include <sys/types.h>
42#include <string.h>
43
44#ifdef HAVE_LIBGEN_H
45# include <libgen.h>
46#endif
47
48#ifdef HAVE_DLOPEN
49# include <dlfcn.h>
50#endif
51
52#ifdef HAVE_EVIL
53# include <Evil.h>
54#endif
55
56#ifdef HAVE_ESCAPE
57# include <Escape.h>
58#endif
59
60#include "eina_config.h"
61#include "eina_private.h"
62#include "eina_error.h"
63#include "eina_file.h"
64#include "eina_log.h"
65
66/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
67#include "eina_safety_checks.h"
68#include "eina_module.h"
69
70/*============================================================================*
71* Local *
72*============================================================================*/
73
74/**
75 * @cond LOCAL
76 */
77
78static int EINA_MODULE_LOG_DOM = -1;
79#ifdef ERR
80#undef ERR
81#endif
82#define ERR(...) EINA_LOG_DOM_ERR(EINA_MODULE_LOG_DOM, __VA_ARGS__)
83
84#ifdef WRN
85#undef WRN
86#endif
87#define WRN(...) EINA_LOG_DOM_WARN(EINA_MODULE_LOG_DOM, __VA_ARGS__)
88
89#ifdef DBG
90#undef DBG
91#endif
92#define DBG(...) EINA_LOG_DOM_DBG(EINA_MODULE_LOG_DOM, __VA_ARGS__)
93
94#ifdef _WIN32
95# define SEP_C '\\'
96# define SEP_S "\\"
97#else
98# define SEP_C '/'
99# define SEP_S "/"
100#endif
101
102#define EINA_MODULE_SYMBOL_INIT "__eina_module_init"
103#define EINA_MODULE_SYMBOL_SHUTDOWN "__eina_module_shutdown"
104
105struct _Eina_Module
106{
107 void *handle;
108 int ref;
109 const char file[];
110};
111
112typedef struct _Dir_List_Get_Cb_Data
113{
114 Eina_Module_Cb cb;
115 void *data;
116 Eina_Array *array;
117} Dir_List_Get_Cb_Data;
118
119typedef struct _Dir_List_Cb_Data
120{
121 Eina_Module_Cb cb;
122 void *data;
123} Dir_List_Cb_Data;
124
125static Eina_Bool _dir_list_get_cb(Eina_Module *m, void *data)
126{
127 Dir_List_Get_Cb_Data *cb_data = data;
128 Eina_Bool ret = EINA_TRUE;
129
130 if (cb_data->cb)
131 ret = cb_data->cb(m, cb_data->data);
132
133 if (ret)
134 eina_array_push(cb_data->array, m);
135
136 return ret;
137}
138
139static void _dir_list_cb(const char *name, const char *path, void *data)
140{
141 Dir_List_Cb_Data *cb_data = data;
142 size_t length;
143
144 length = strlen(name);
145 if (length < sizeof(SHARED_LIB_SUFFIX)) /* x.so */
146 return;
147
148 if (!strcmp(name + length - sizeof(SHARED_LIB_SUFFIX) + 1,
149 SHARED_LIB_SUFFIX))
150 {
151 char *file;
152 Eina_Module *m;
153
154 length = strlen(path) + strlen(name) + 2;
155
156 file = alloca(sizeof (char) * length);
157
158 snprintf(file, length, "%s" SEP_S "%s", path, name);
159 m = eina_module_new(file);
160 if (!m)
161 {
162 return; /* call the user provided cb on this module */
163
164 }
165
166 if (!cb_data->cb(m, cb_data->data))
167 eina_module_free(m);
168 }
169}
170
171static void _dir_arch_list_cb(const char *name, const char *path, void *data)
172{
173 Dir_List_Get_Cb_Data *cb_data = data;
174 Eina_Module *m;
175 char *file = NULL;
176 size_t length;
177
178 length = strlen(path) + 1 + strlen(name) + 1 +
179 strlen((char *)(cb_data->data)) + 1 + sizeof("module") +
180 sizeof(SHARED_LIB_SUFFIX) + 1;
181
182 file = alloca(length);
183 snprintf(file, length, "%s" SEP_S "%s" SEP_S "%s" SEP_S "module" SHARED_LIB_SUFFIX,
184 path, name, (char *)(cb_data->data));
185 m = eina_module_new(file);
186 if (!m)
187 return;
188
189 eina_array_push(cb_data->array, m);
190}
191
192/**
193 * @endcond
194 */
195
196
197/*============================================================================*
198* Global *
199*============================================================================*/
200
201/**
202 * @cond LOCAL
203 */
204
205static const char EINA_ERROR_WRONG_MODULE_STR[] =
206 "Wrong file format or no file module found";
207static const char EINA_ERROR_MODULE_INIT_FAILED_STR[] =
208 "Module initialisation function failed";
209
210EAPI Eina_Error EINA_ERROR_WRONG_MODULE = 0;
211EAPI Eina_Error EINA_ERROR_MODULE_INIT_FAILED = 0;
212
213/**
214 * @endcond
215 */
216
217/**
218 * @internal
219 * @brief Initialize the module loader module.
220 *
221 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
222 *
223 * This function sets up the module loader module of Eina. It is
224 * called by eina_init().
225 *
226 * This function sets up the module module of Eina. It also registers
227 * the errors #EINA_ERROR_WRONG_MODULE and
228 * #EINA_ERROR_MODULE_INIT_FAILED.
229 *
230 * @see eina_init()
231 */
232Eina_Bool
233eina_module_init(void)
234{
235 EINA_MODULE_LOG_DOM = eina_log_domain_register
236 ("eina_module", EINA_LOG_COLOR_DEFAULT);
237 if (EINA_MODULE_LOG_DOM < 0)
238 {
239 EINA_LOG_ERR("Could not register log domain: eina_module");
240 return EINA_FALSE;
241 }
242
243#define EEMR(n) n = eina_error_msg_static_register(n ## _STR)
244 EEMR(EINA_ERROR_WRONG_MODULE);
245 EEMR(EINA_ERROR_MODULE_INIT_FAILED);
246#undef EEMR
247
248 return EINA_TRUE;
249}
250
251/**
252 * @internal
253 * @brief Shut down the module loader module.
254 *
255 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
256 *
257 * This function shuts down the module loader module set up by
258 * eina_module_init(). It is called by eina_shutdown().
259 *
260 * @see eina_shutdown()
261 */
262Eina_Bool
263eina_module_shutdown(void)
264{
265 /* TODO should we store every module when "new" is called and
266 * delete the list of modules here
267 */
268
269 eina_log_domain_unregister(EINA_MODULE_LOG_DOM);
270 EINA_MODULE_LOG_DOM = -1;
271 return EINA_TRUE;
272}
273
274/*============================================================================*
275* API *
276*============================================================================*/
277
278EAPI Eina_Module *eina_module_new(const char *file)
279{
280 Eina_Module *m;
281 size_t len;
282
283 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
284 /* TODO check that the file exists. Update doc too */
285
286 len = strlen(file);
287 EINA_SAFETY_ON_FALSE_RETURN_VAL(len > 0, NULL);
288
289 m = malloc(sizeof(Eina_Module) + len + 1);
290 if (!m)
291 {
292 ERR("could not malloc(%lu)",
293 (unsigned long)(sizeof(Eina_Module) + len + 1));
294 return NULL;
295 }
296
297 memcpy((char *)m->file, file, len + 1);
298 m->ref = 0;
299 m->handle = NULL;
300 DBG("m=%p, file=%s", m, file);
301
302 return m;
303}
304
305EAPI Eina_Bool eina_module_free(Eina_Module *m)
306{
307 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
308
309 DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref);
310
311 if (m->handle)
312 if (eina_module_unload(m) == EINA_FALSE)
313 return EINA_FALSE;
314
315 free(m);
316 return EINA_TRUE;
317}
318
319EAPI Eina_Bool eina_module_load(Eina_Module *m)
320{
321#ifdef HAVE_DLOPEN
322 void *dl_handle;
323 Eina_Module_Init *initcall;
324
325 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
326
327 DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref);
328
329 if (m->handle)
330 goto loaded;
331
332 dl_handle = dlopen(m->file, RTLD_NOW);
333 if (!dl_handle)
334 {
335 WRN("could not dlopen(\"%s\", RTLD_NOW): %s", m->file, dlerror());
336 eina_error_set(EINA_ERROR_WRONG_MODULE);
337 return EINA_FALSE;
338 }
339
340 initcall = dlsym(dl_handle, EINA_MODULE_SYMBOL_INIT);
341 if ((!initcall) || (!(*initcall)))
342 goto ok;
343
344 if ((*initcall)() == EINA_TRUE)
345 goto ok;
346
347 WRN("could not find eina's entry symbol %s inside module %s",
348 EINA_MODULE_SYMBOL_INIT, m->file);
349 eina_error_set(EINA_ERROR_MODULE_INIT_FAILED);
350 dlclose(dl_handle);
351 return EINA_FALSE;
352ok:
353 DBG("successfully loaded %s", m->file);
354 m->handle = dl_handle;
355loaded:
356 m->ref++;
357 DBG("ref %d", m->ref);
358
359 eina_error_set(0);
360 return EINA_TRUE;
361#else
362 (void) m;
363 return EINA_FALSE;
364#endif
365}
366
367EAPI Eina_Bool eina_module_unload(Eina_Module *m)
368{
369#ifdef HAVE_DLOPEN
370 Eina_Module_Shutdown *shut;
371 EINA_SAFETY_ON_NULL_RETURN_VAL(m, EINA_FALSE);
372
373 DBG("m=%p, handle=%p, file=%s, refs=%d", m, m->handle, m->file, m->ref);
374
375 m->ref--;
376 if (!m->ref)
377 {
378 shut = dlsym(m->handle, EINA_MODULE_SYMBOL_SHUTDOWN);
379 if ((shut) && (*shut))
380 (*shut)();
381
382 dlclose(m->handle);
383 m->handle = NULL;
384 DBG("unloaded module %s", m->file);
385 return EINA_TRUE;
386 }
387
388 return EINA_FALSE;
389#else
390 (void) m;
391 return EINA_FALSE;
392#endif
393}
394
395EAPI void *eina_module_symbol_get(const Eina_Module *m, const char *symbol)
396{
397#ifdef HAVE_DLOPEN
398 EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
399 EINA_SAFETY_ON_NULL_RETURN_VAL(m->handle, NULL);
400 return dlsym(m->handle, symbol);
401#else
402 (void) m;
403 (void) symbol;
404 return NULL;
405#endif
406}
407
408EAPI const char *eina_module_file_get(const Eina_Module *m)
409{
410 EINA_SAFETY_ON_NULL_RETURN_VAL(m, NULL);
411 return m->file;
412}
413
414EAPI char *eina_module_symbol_path_get(const void *symbol, const char *sub_dir)
415{
416#ifdef HAVE_DLADDR
417 Dl_info eina_dl;
418
419 EINA_SAFETY_ON_NULL_RETURN_VAL(symbol, NULL);
420
421 if (dladdr(symbol, &eina_dl))
422 {
423 char *pos = strrchr(eina_dl.dli_fname, SEP_C);
424 if (pos)
425 {
426 char *path;
427 int l0;
428 int l1;
429 int l2 = 0;
430
431 l0 = strlen(eina_dl.dli_fname);
432 l1 = strlen(pos);
433 if (sub_dir && (*sub_dir != '\0'))
434 l2 = strlen(sub_dir);
435
436 path = malloc(l0 - l1 + l2 + 1);
437 if (path)
438 {
439 memcpy(path, eina_dl.dli_fname, l0 - l1);
440 if (sub_dir && (*sub_dir != '\0'))
441 memcpy(path + l0 - l1, sub_dir, l2);
442
443 path[l0 - l1 + l2] = '\0';
444 return path;
445 }
446 }
447 }
448#else
449 (void) symbol;
450 (void) sub_dir;
451#endif /* ! HAVE_DLADDR */
452
453 return NULL;
454}
455
456EAPI char *eina_module_environment_path_get(const char *env,
457 const char *sub_dir)
458{
459 const char *env_dir;
460
461 EINA_SAFETY_ON_NULL_RETURN_VAL(env, NULL);
462
463 env_dir = getenv(env);
464 if (env_dir)
465 {
466 char *path;
467 size_t l1;
468 size_t l2 = 0;
469
470 l1 = strlen(env_dir);
471 if (sub_dir && (*sub_dir != '\0'))
472 l2 = strlen(sub_dir);
473
474 path = (char *)malloc(l1 + l2 + 1);
475 if (path)
476 {
477 memcpy(path, env_dir, l1);
478 if (sub_dir && (*sub_dir != '\0'))
479 memcpy(path + l1, sub_dir, l2);
480
481 path[l1 + l2] = '\0';
482
483 return path;
484 }
485 }
486
487 return NULL;
488}
489
490EAPI Eina_Array *eina_module_arch_list_get(Eina_Array *array,
491 const char *path,
492 const char *arch)
493{
494 Dir_List_Get_Cb_Data list_get_cb_data;
495
496 if ((!path) || (!arch))
497 return array;
498
499 list_get_cb_data.array = array ? array : eina_array_new(4);
500 list_get_cb_data.cb = NULL;
501 list_get_cb_data.data = (void *)arch;
502
503 eina_file_dir_list(path, 0, &_dir_arch_list_cb, &list_get_cb_data);
504
505 return list_get_cb_data.array;
506}
507
508EAPI Eina_Array *eina_module_list_get(Eina_Array *array,
509 const char *path,
510 Eina_Bool recursive,
511 Eina_Module_Cb cb,
512 void *data)
513{
514 Dir_List_Get_Cb_Data list_get_cb_data;
515 Dir_List_Cb_Data list_cb_data;
516
517 if (!path)
518 return array;
519
520 list_get_cb_data.array = array ? array : eina_array_new(4);
521 list_get_cb_data.cb = cb;
522 list_get_cb_data.data = data;
523
524 list_cb_data.cb = &_dir_list_get_cb;
525 list_cb_data.data = &list_get_cb_data;
526
527 eina_file_dir_list(path, recursive, &_dir_list_cb, &list_cb_data);
528
529 return list_get_cb_data.array;
530}
531
532EAPI Eina_Module *
533eina_module_find(const Eina_Array *array, const char *module)
534{
535 unsigned int i;
536 Eina_Array_Iterator iterator;
537 Eina_Module *m;
538
539 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
540 {
541 char *file_m;
542 char *tmp;
543 ssize_t len;
544
545 /* basename() can modify its argument, so we first get a copie */
546 /* do not use strdupa, as opensolaris does not have it */
547 len = strlen(eina_module_file_get(m));
548 tmp = alloca(len + 1);
549 memcpy(tmp, eina_module_file_get(m), len + 1);
550 file_m = basename(tmp);
551 len = strlen(file_m);
552 len -= sizeof(SHARED_LIB_SUFFIX) - 1;
553 if (len <= 0)
554 continue;
555
556 if (!strncmp(module, file_m, len))
557 return m;;
558 }
559
560 return NULL;
561}
562
563EAPI void eina_module_list_load(Eina_Array *array)
564{
565 Eina_Array_Iterator iterator;
566 Eina_Module *m;
567 unsigned int i;
568
569 EINA_SAFETY_ON_NULL_RETURN(array);
570 DBG("array %p, count %u", array, array->count);
571 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
572 eina_module_load(m);
573}
574
575EAPI void eina_module_list_unload(Eina_Array *array)
576{
577 Eina_Array_Iterator iterator;
578 Eina_Module *m;
579 unsigned int i;
580
581 EINA_SAFETY_ON_NULL_RETURN(array);
582 DBG("array %p, count %u", array, array->count);
583 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
584 eina_module_unload(m);
585}
586
587EAPI void eina_module_list_free(Eina_Array *array)
588{
589 Eina_Array_Iterator iterator;
590 Eina_Module *m;
591 unsigned int i;
592
593 EINA_SAFETY_ON_NULL_RETURN(array);
594 DBG("array %p, count %u", array, array->count);
595 EINA_ARRAY_ITER_NEXT(array, i, m, iterator)
596 eina_module_free(m);
597
598 eina_array_flush(array);
599}
diff --git a/libraries/eina/src/lib/eina_prefix.c b/libraries/eina/src/lib/eina_prefix.c
new file mode 100644
index 0000000..9445222
--- /dev/null
+++ b/libraries/eina/src/lib/eina_prefix.c
@@ -0,0 +1,727 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Carsten Haitzler
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef STDC_HEADERS
24# include <stdlib.h>
25# include <stddef.h>
26#else
27# ifdef HAVE_STDLIB_H
28# include <stdlib.h>
29# endif
30#endif
31#ifdef HAVE_ALLOCA_H
32# include <alloca.h>
33#elif defined __GNUC__
34# define alloca __builtin_alloca
35#elif defined _AIX
36# define alloca __alloca
37#elif defined _MSC_VER
38# include <malloc.h>
39# define alloca _alloca
40#else
41# ifndef HAVE_ALLOCA
42# ifdef __cplusplus
43extern "C"
44# endif
45void *alloca (size_t);
46# endif
47#endif
48
49#include <stdio.h>
50#include <stdlib.h>
51#include <string.h>
52#include <sys/types.h>
53#include <sys/stat.h>
54#include <limits.h>
55
56#ifdef HAVE_UNISTD_H
57# include <unistd.h>
58#endif
59
60#ifdef HAVE_DLADDR
61# include <dlfcn.h>
62#endif
63
64#ifdef HAVE_EVIL
65# include <Evil.h>
66#endif
67
68#ifdef HAVE_ESCAPE
69# include <Escape.h>
70#endif
71
72#include "eina_config.h"
73#include "eina_private.h"
74#include "eina_log.h"
75#include "eina_prefix.h"
76
77#ifdef _WIN32
78# define PSEP_C ';'
79# define DSEP_C '\\'
80# define DSEP_S "\\"
81#else
82# define PSEP_C ':'
83# define DSEP_C '/'
84# define DSEP_S "/"
85#endif /* _WIN32 */
86
87/*============================================================================*
88 * Local *
89 *============================================================================*/
90
91/**
92 * @cond LOCAL
93 */
94
95struct _Eina_Prefix
96{
97 char *exe_path;
98
99 char *prefix_path;
100 char *prefix_path_bin;
101 char *prefix_path_data;
102 char *prefix_path_lib;
103 char *prefix_path_locale;
104
105 unsigned char fallback : 1;
106 unsigned char no_common_prefix : 1;
107 unsigned char env_used : 1;
108};
109
110#define STRDUP_REP(x, y) do { if (x) free(x); x = strdup(y); } while (0)
111#define IF_FREE_NULL(p) do { if (p) { free(p); p = NULL; } } while (0)
112
113#ifndef EINA_LOG_COLOR_DEFAULT
114#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
115#endif
116
117#ifdef ERR
118#undef ERR
119#endif
120#define ERR(...) EINA_LOG_DOM_ERR(_eina_prefix_log_dom, __VA_ARGS__)
121
122#ifdef WRN
123#undef WRN
124#endif
125#define WRN(...) EINA_LOG_DOM_WARN(_eina_prefix_log_dom, __VA_ARGS__)
126
127#ifdef INF
128#undef INF
129#endif
130#define INF(...) EINA_LOG_DOM_INFO(_eina_prefix_log_dom, __VA_ARGS__)
131
132#ifdef DBG
133#undef DBG
134#endif
135#define DBG(...) EINA_LOG_DOM_DBG(_eina_prefix_log_dom, __VA_ARGS__)
136
137static int _eina_prefix_log_dom = -1;
138
139static int
140_fallback(Eina_Prefix *pfx, const char *pkg_bin, const char *pkg_lib,
141 const char *pkg_data, const char *pkg_locale, const char *envprefix)
142{
143 char *p;
144
145 STRDUP_REP(pfx->prefix_path, pkg_bin);
146 if (!pfx->prefix_path) return 0;
147 p = strrchr(pfx->prefix_path, DSEP_C);
148 if (p) *p = 0;
149 STRDUP_REP(pfx->prefix_path_bin, pkg_bin);
150 STRDUP_REP(pfx->prefix_path_lib, pkg_lib);
151 STRDUP_REP(pfx->prefix_path_data, pkg_data);
152 STRDUP_REP(pfx->prefix_path_locale, pkg_locale);
153 fprintf(stderr,
154 "WARNING: Could not determine its installed prefix for '%s'\n"
155 " so am falling back on the compiled in default:\n"
156 " %s\n"
157 " implied by the following:\n"
158 " bindir = %s\n"
159 " libdir = %s\n"
160 " datadir = %s\n"
161 " localedir = %s\n"
162 " Try setting the following environment variables:\n"
163 " %s_PREFIX - points to the base prefix of install\n"
164 " or the next 4 variables\n"
165 " %s_BIN_DIR - provide a specific binary directory\n"
166 " %s_LIB_DIR - provide a specific library directory\n"
167 " %s_DATA_DIR - provide a specific data directory\n"
168 " %s_LOCALE_DIR - provide a specific locale directory\n"
169 , envprefix,
170 pfx->prefix_path, pkg_bin, pkg_lib, pkg_data, pkg_locale,
171 envprefix, envprefix, envprefix, envprefix, envprefix);
172 pfx->fallback = 1;
173 return 1;
174}
175
176#ifndef _WIN32
177static int
178_try_proc(Eina_Prefix *pfx, void *symbol)
179{
180 FILE *f;
181 char buf[4096];
182
183 DBG("Try /proc/self/maps");
184 f = fopen("/proc/self/maps", "rb");
185 if (!f) return 0;
186 DBG("Exists /proc/self/maps");
187 while (fgets(buf, sizeof(buf), f))
188 {
189 int len;
190 char *p, mode[5] = "";
191 unsigned long ptr1 = 0, ptr2 = 0;
192
193 len = strlen(buf);
194 if (buf[len - 1] == '\n')
195 {
196 buf[len - 1] = 0;
197 len--;
198 }
199 if (sscanf(buf, "%lx-%lx %4s", &ptr1, &ptr2, mode) == 3)
200 {
201 if (!strcmp(mode, "r-xp"))
202 {
203 if (((void *)ptr1 <= symbol) && (symbol < (void *)ptr2))
204 {
205 DBG("Found in /proc/self/maps: %s", buf);
206 p = strchr(buf, '/');
207 if (p)
208 {
209 DBG("Found in /proc/self/maps: found last /");
210 if (len > 10)
211 {
212 if (!strcmp(buf + len - 10, " (deleted)"))
213 buf[len - 10] = 0;
214 }
215 STRDUP_REP(pfx->exe_path, p);
216 INF("Found in /proc/self/maps: guess exe path is %s", pfx->exe_path);
217 fclose(f);
218 return 1;
219 }
220 else break;
221 }
222 }
223 }
224 }
225 fclose(f);
226 WRN("Failed in /proc/self/maps");
227 return 0;
228}
229#endif
230
231static int
232_try_argv(Eina_Prefix *pfx, const char *argv0)
233{
234 char *path, *p, *cp, *s;
235 int len, lenexe;
236 char buf[PATH_MAX], buf2[PATH_MAX], buf3[PATH_MAX];
237
238 DBG("Try argv0 = %s", argv0);
239 /* 1. is argv0 abs path? */
240#ifdef _WIN32
241 if (argv0[0] && (argv0[1] == ':'))
242#else
243 if (argv0[0] == DSEP_C)
244#endif
245 {
246 DBG("Match arvg0 is full path: %s", argv0);
247 STRDUP_REP(pfx->exe_path, argv0);
248 if (access(pfx->exe_path, X_OK) == 0)
249 {
250 INF("Executable argv0 = %s", argv0);
251 return 1;
252 }
253 IF_FREE_NULL(pfx->exe_path);
254 DBG("Non existent argv0: %s", argv0);
255 return 0;
256 }
257 /* 2. relative path */
258 if (strchr(argv0, DSEP_C))
259 {
260 DBG("Relative path argv0: %s", argv0);
261 if (getcwd(buf3, sizeof(buf3)))
262 {
263 snprintf(buf2, sizeof(buf2), "%s" DSEP_S "%s", buf3, argv0);
264 DBG("Relative to CWD: %s", buf2);
265 if (realpath(buf2, buf))
266 {
267 DBG("Realpath is: %s", buf);
268 STRDUP_REP(pfx->exe_path, buf);
269 if (access(pfx->exe_path, X_OK) == 0)
270 {
271 INF("Path %s is executable", pfx->exe_path);
272 return 1;
273 }
274 DBG("Fail check for executable: %s", pfx->exe_path);
275 IF_FREE_NULL(pfx->exe_path);
276 }
277 }
278 }
279 /* 3. argv0 no path - look in PATH */
280 DBG("Look for argv0=%s in $PATH", argv0);
281 path = getenv("PATH");
282 if (!path) return 0;
283 p = path;
284 cp = p;
285 lenexe = strlen(argv0);
286 while ((p = strchr(cp, PSEP_C)))
287 {
288 len = p - cp;
289 s = malloc(len + 1 + lenexe + 1);
290 if (s)
291 {
292 strncpy(s, cp, len);
293 s[len] = DSEP_C;
294 strcpy(s + len + 1, argv0);
295 DBG("Try path: %s", s);
296 if (realpath(s, buf))
297 {
298 DBG("Realpath is: %s", buf);
299 if (access(buf, X_OK) == 0)
300 {
301 STRDUP_REP(pfx->exe_path, buf);
302 INF("Path %s is executable", pfx->exe_path);
303 free(s);
304 return 1;
305 }
306 }
307 free(s);
308 }
309 cp = p + 1;
310 }
311 /* 4. big problems. arg[0] != executable - weird execution */
312 return 0;
313}
314
315static int
316_get_env_var(char **var, const char *env, const char *prefix, const char *dir)
317{
318 char buf[PATH_MAX];
319 const char *s = getenv(env);
320
321 DBG("Try env var %s", env);
322 if (s)
323 {
324 INF("Have env %s = %s", env, s);
325 STRDUP_REP(*var, s);
326 return 1;
327 }
328 else if (prefix)
329 {
330 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", prefix, dir);
331 INF("Have prefix %s = %s", prefix, buf);
332 STRDUP_REP(*var, buf);
333 return 1;
334 }
335 return 0;
336}
337
338static int
339_get_env_vars(Eina_Prefix *pfx,
340 const char *envprefix,
341 const char *bindir,
342 const char *libdir,
343 const char *datadir,
344 const char *localedir)
345{
346 char env[1024];
347 const char *s;
348 int ret = 0;
349
350 snprintf(env, sizeof(env), "%s_PREFIX", envprefix);
351 if ((s = getenv(env))) STRDUP_REP(pfx->prefix_path, s);
352 snprintf(env, sizeof(env), "%s_BIN_DIR", envprefix);
353 ret += _get_env_var(&pfx->prefix_path_bin, env, s, bindir);
354 snprintf(env, sizeof(env), "%s_LIB_DIR", envprefix);
355 ret += _get_env_var(&pfx->prefix_path_lib, env, s, libdir);
356 snprintf(env, sizeof(env), "%s_DATA_DIR", envprefix);
357 ret += _get_env_var(&pfx->prefix_path_data, env, s, datadir);
358 snprintf(env, sizeof(env), "%s_LOCALE_DIR", envprefix);
359 ret += _get_env_var(&pfx->prefix_path_locale, env, s, localedir);
360 return ret;
361}
362
363/**
364 * @endcond
365 */
366
367
368/*============================================================================*
369 * Global *
370 *============================================================================*/
371
372
373/*============================================================================*
374 * API *
375 *============================================================================*/
376
377
378EAPI Eina_Prefix *
379eina_prefix_new(const char *argv0, void *symbol, const char *envprefix,
380 const char *sharedir, const char *magicsharefile,
381 const char *pkg_bin, const char *pkg_lib,
382 const char *pkg_data, const char *pkg_locale)
383{
384 Eina_Prefix *pfx;
385 char *p, buf[4096], *tmp, *magic = NULL;
386 struct stat st;
387 const char *p1, *p2;
388 const char *pkg_bin_p = NULL;
389 const char *pkg_lib_p = NULL;
390 const char *pkg_data_p = NULL;
391 const char *pkg_locale_p = NULL;
392 const char *bindir = "bin";
393 const char *libdir = "lib";
394 const char *datadir = "share";
395 const char *localedir = "share";
396
397 DBG("EINA PREFIX: argv0=%s, symbol=%p, magicsharefile=%s, envprefix=%s",
398 argv0, symbol, magicsharefile, envprefix);
399 pfx = calloc(1, sizeof(Eina_Prefix));
400 if (!pfx) return NULL;
401
402 /* if provided with a share dir use datadir/sharedir as the share dir */
403 if (sharedir)
404 {
405 int len;
406
407 len = snprintf(buf, sizeof(buf), "%s" DSEP_S "%s", datadir, sharedir);
408 if (len > 0)
409 {
410#ifdef _WIN32
411 /* on win32 convert / to \ for path here */
412 for (p = buf + strlen(datadir) + strlen(DSEP_S); *p; p++)
413 {
414 if (*p == '/') *p = DSEP_C;
415 }
416#endif
417 tmp = alloca(len + 1);
418 strcpy(tmp, buf);
419 datadir = tmp;
420 }
421 }
422 if (magicsharefile)
423 {
424 magic = alloca(strlen(magicsharefile));
425 strcpy(magic, magicsharefile);
426#ifdef _WIN32
427 /* on win32 convert / to \ for path here */
428 for (p = magic; *p; p++)
429 {
430 if (*p == '/') *p = DSEP_C;
431 }
432#endif
433 }
434
435 /* look at compile-time package bin/lib/datadir etc. and figure out the
436 * bin, lib and data dirs from these, if possible. i.e.
437 * bin = /usr/local/bin
438 * lib = /usr/local/lib
439 * data = /usr/local/share/enlightenment
440 * thus they all have a common prefix string of /usr/local/ and
441 * bindir = bin
442 * libdir = lib
443 * datadir = share/enlightenment
444 * this addresses things like libdir is lib64 or lib32 or other such
445 * junk distributions like to do so then:
446 * bin = /usr/local/bin
447 * lib = /usr/local/lib64
448 * data = /usr/local/share/enlightenment
449 * then
450 * bindir = bin
451 * libdir = lib64
452 * datadir = share/enlightennment
453 * in theory this should also work with debians new multiarch style like
454 * bindir = bin
455 * libdir = lib/i386-linux-gnu
456 * or
457 * libdir = lib/x86_64-linux-gnu
458 * all with a common prefix that can be relocated
459 */
460 /* 1. check last common char in bin and lib strings */
461 for (p1 = pkg_bin, p2 = pkg_lib; *p1 && *p2; p1++, p2++)
462 {
463 if (*p1 != *p2)
464 {
465 pkg_bin_p = p1;
466 pkg_lib_p = p2;
467 break;
468 }
469 }
470 /* 1. check last common char in bin and data strings */
471 for (p1 = pkg_bin, p2 = pkg_data; *p1 && *p2; p1++, p2++)
472 {
473 if (*p1 != *p2)
474 {
475 pkg_data_p = p2;
476 break;
477 }
478 }
479 /* 1. check last common char in bin and locale strings */
480 for (p1 = pkg_bin, p2 = pkg_locale; *p1 && *p2; p1++, p2++)
481 {
482 if (*p1 != *p2)
483 {
484 pkg_locale_p = p2;
485 break;
486 }
487 }
488 /* 2. if all the common string offsets match we compiled with a common prefix */
489 if (((pkg_bin_p - pkg_bin) == (pkg_lib_p - pkg_lib))
490 && ((pkg_bin_p - pkg_bin) == (pkg_data_p - pkg_data))
491 && ((pkg_bin_p - pkg_bin) == (pkg_locale_p - pkg_locale))
492 )
493 {
494 bindir = pkg_bin_p;
495 libdir = pkg_lib_p;
496 datadir = pkg_data_p;
497 localedir = pkg_locale_p;
498 DBG("Prefix relative bindir = %s", bindir);
499 DBG("Prefix relative libdir = %s", libdir);
500 DBG("Prefix relative datadir = %s", datadir);
501 DBG("Prefix relative localedir = %s", localedir);
502 }
503 /* 3. some galoot thought it awesome not to give us a common prefix at compile time
504 * so fall back to the compile time directories. we are no longer relocatable */
505 else
506 {
507 STRDUP_REP(pfx->prefix_path_bin, pkg_bin);
508 STRDUP_REP(pfx->prefix_path_lib, pkg_lib);
509 STRDUP_REP(pfx->prefix_path_data, pkg_data);
510 STRDUP_REP(pfx->prefix_path_locale, pkg_locale);
511 pfx->no_common_prefix = 1;
512 DBG("Can't work out a common prefix - compiled in fallback");
513 }
514
515 /* if user provides env vars - then use that or also more specific sub
516 * dirs for bin, lib, data and locale */
517 if ((envprefix) &&
518 (_get_env_vars(pfx, envprefix, bindir, libdir, datadir, localedir) > 0))
519 {
520 pfx->env_used = 1;
521 return pfx;
522 }
523
524#ifdef HAVE_DLADDR
525 DBG("Try dladdr on %p", symbol);
526 if (symbol)
527 {
528 Dl_info info_dl;
529
530 if (dladdr(symbol, &info_dl))
531 {
532 DBG("Dlinfo worked");
533 if (info_dl.dli_fname)
534 {
535 DBG("Dlinfo dli_fname = %s", info_dl.dli_fname);
536# ifdef _WIN32
537 if (info_dl.dli_fname[0] && (info_dl.dli_fname[1] == ':'))
538# else
539 if (info_dl.dli_fname[0] == DSEP_C)
540# endif
541 {
542 INF("Dlsym gave full path = %s", info_dl.dli_fname);
543 STRDUP_REP(pfx->exe_path, info_dl.dli_fname);
544 }
545 }
546 }
547 }
548#endif
549 /* no env var - examine process and possible argv0 */
550 if ((argv0) && (!pfx->exe_path) && (symbol))
551 {
552#ifndef _WIN32
553 if (!_try_proc(pfx, symbol))
554 {
555#endif
556 if (!_try_argv(pfx, argv0))
557 {
558 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale,
559 envprefix);
560 return pfx;
561 }
562#ifndef _WIN32
563 }
564#endif
565 }
566 if (!pfx->exe_path)
567 {
568 WRN("Fallback - nothing found");
569 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, envprefix);
570 return pfx;
571 }
572 /* _exe_path is now a full absolute path TO this exe - figure out rest */
573 /* if
574 * exe = /blah/whatever/bin/exe
575 * or
576 * exe = /blah/whatever/lib/libexe.so
577 * then
578 * prefix = /blah/whatever
579 * bin_dir = /blah/whatever/bin
580 * data_dir = /blah/whatever/share/enlightenment
581 * lib_dir = /blah/whatever/lib
582 */
583 DBG("From exe %s figure out the rest", pfx->exe_path);
584 p = strrchr(pfx->exe_path, DSEP_C);
585 if (p)
586 {
587 p--;
588 while (p >= pfx->exe_path)
589 {
590 if (*p == DSEP_C)
591 {
592 pfx->prefix_path = malloc(p - pfx->exe_path + 1);
593 if (pfx->prefix_path)
594 {
595 strncpy(pfx->prefix_path, pfx->exe_path,
596 p - pfx->exe_path);
597 pfx->prefix_path[p - pfx->exe_path] = 0;
598 DBG("Have prefix = %s", pfx->prefix_path);
599
600 /* bin */
601 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
602 pfx->prefix_path, bindir);
603 STRDUP_REP(pfx->prefix_path_bin, buf);
604 DBG("Have bin = %s", pfx->prefix_path_bin);
605 /* lib */
606 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
607 pfx->prefix_path, libdir);
608 STRDUP_REP(pfx->prefix_path_lib, buf);
609 DBG("Have lib = %s", pfx->prefix_path_lib);
610 /* locale */
611 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
612 pfx->prefix_path, localedir);
613 STRDUP_REP(pfx->prefix_path_locale, buf);
614 DBG("Have locale = %s", pfx->prefix_path_locale);
615 /* check if magic file is there - then our guess is right */
616 if (magic)
617 {
618 DBG("Magic = %s", magic);
619 snprintf(buf, sizeof(buf),
620 "%s" DSEP_S "%s" DSEP_S "%s",
621 pfx->prefix_path, datadir, magic);
622 DBG("Check in %s", buf);
623 }
624 if ((!magic) || (stat(buf, &st) == 0))
625 {
626 if (buf[0])
627 DBG("Magic path %s stat passed", buf);
628 else
629 DBG("No magic file");
630 snprintf(buf, sizeof(buf), "%s" DSEP_S "%s",
631 pfx->prefix_path, datadir);
632 STRDUP_REP(pfx->prefix_path_data, buf);
633 }
634 /* magic file not there. time to start hunting! */
635 else
636 {
637 WRN("Magic failed");
638 _fallback(pfx, pkg_bin, pkg_lib, pkg_data,
639 pkg_locale, envprefix);
640 }
641 }
642 else
643 {
644 WRN("No Prefix path (alloc fail)");
645 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale,
646 envprefix);
647 }
648 return pfx;
649 }
650 p--;
651 }
652 }
653 WRN("Final fallback");
654 _fallback(pfx, pkg_bin, pkg_lib, pkg_data, pkg_locale, envprefix);
655 return pfx;
656}
657
658EAPI void
659eina_prefix_free(Eina_Prefix *pfx)
660{
661 if (!pfx) return;
662
663 IF_FREE_NULL(pfx->exe_path);
664 IF_FREE_NULL(pfx->prefix_path);
665 IF_FREE_NULL(pfx->prefix_path_bin);
666 IF_FREE_NULL(pfx->prefix_path_data);
667 IF_FREE_NULL(pfx->prefix_path_lib);
668 IF_FREE_NULL(pfx->prefix_path_locale);
669 free(pfx);
670}
671
672EAPI const char *
673eina_prefix_get(Eina_Prefix *pfx)
674{
675 if (!pfx) return "";
676 return pfx->prefix_path;
677}
678
679EAPI const char *
680eina_prefix_bin_get(Eina_Prefix *pfx)
681{
682 if (!pfx) return "";
683 return pfx->prefix_path_bin;
684}
685
686EAPI const char *
687eina_prefix_lib_get(Eina_Prefix *pfx)
688{
689 if (!pfx) return "";
690 return pfx->prefix_path_lib;
691}
692
693EAPI const char *
694eina_prefix_data_get(Eina_Prefix *pfx)
695{
696 if (!pfx) return "";
697 return pfx->prefix_path_data;
698}
699
700EAPI const char *
701eina_prefix_locale_get(Eina_Prefix *pfx)
702{
703 if (!pfx) return "";
704 return pfx->prefix_path_locale;
705}
706
707Eina_Bool
708eina_prefix_init(void)
709{
710 _eina_prefix_log_dom = eina_log_domain_register("eina_prefix",
711 EINA_LOG_COLOR_DEFAULT);
712 if (_eina_prefix_log_dom < 0)
713 {
714 EINA_LOG_ERR("Could not register log domain: eina_prefix");
715 return EINA_FALSE;
716 }
717
718 return EINA_TRUE;
719}
720
721Eina_Bool
722eina_prefix_shutdown(void)
723{
724 eina_log_domain_unregister(_eina_prefix_log_dom);
725 _eina_prefix_log_dom = -1;
726 return EINA_TRUE;
727}
diff --git a/libraries/eina/src/lib/eina_private.h b/libraries/eina/src/lib/eina_private.h
new file mode 100644
index 0000000..d390397
--- /dev/null
+++ b/libraries/eina/src/lib/eina_private.h
@@ -0,0 +1,140 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Carsten Haitzler, Vincent Torri, Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_PRIVATE_H_
20#define EINA_PRIVATE_H_
21
22#include <stdarg.h>
23
24#include "eina_magic.h"
25#include "eina_iterator.h"
26#include "eina_accessor.h"
27
28#ifndef MIN
29# define MIN(x, y) (((x) > (y)) ? (y) : (x))
30#endif
31
32#ifndef MAX
33# define MAX(x, y) (((x) > (y)) ? (x) : (y))
34#endif
35
36#ifndef ABS
37# define ABS(x) ((x) < 0 ? -(x) : (x))
38#endif
39
40#ifndef CLAMP
41# define CLAMP(x, min, \
42 max) (((x) > (max)) ? (max) : (((x) < (min)) ? (min) : (x)))
43#endif
44
45#define EINA_INLIST_JUMP_SIZE 256
46
47#define READBUFSIZ 65536
48
49#define EINA_LOG_COLOR_DEFAULT "\033[36m"
50
51/* eina magic types */
52#define EINA_MAGIC_SHARE 0x98761234
53#define EINA_MAGIC_SHARE_HEAD 0x98761235
54#define EINA_MAGIC_STRINGSHARE_NODE 0x98761254
55#define EINA_MAGIC_USTRINGSHARE_NODE 0x98761255
56#define EINA_MAGIC_BINSHARE_NODE 0x98761256
57
58#define EINA_MAGIC_LIST 0x98761237
59#define EINA_MAGIC_LIST_ITERATOR 0x98761238
60#define EINA_MAGIC_LIST_ACCESSOR 0x98761239
61#define EINA_MAGIC_LIST_ACCOUNTING 0x9876123a
62
63#define EINA_MAGIC_ARRAY 0x9876123b
64#define EINA_MAGIC_ARRAY_ITERATOR 0x9876123c
65#define EINA_MAGIC_ARRAY_ACCESSOR 0x9876123d
66
67#define EINA_MAGIC_HASH 0x9876123e
68#define EINA_MAGIC_HASH_ITERATOR 0x9876123f
69
70#define EINA_MAGIC_TILER 0x98761240
71#define EINA_MAGIC_TILER_ITERATOR 0x98761241
72
73#define EINA_MAGIC_MATRIXSPARSE 0x98761242
74#define EINA_MAGIC_MATRIXSPARSE_ROW 0x98761243
75#define EINA_MAGIC_MATRIXSPARSE_CELL 0x98761244
76#define EINA_MAGIC_MATRIXSPARSE_ITERATOR 0x98761245
77#define EINA_MAGIC_MATRIXSPARSE_ROW_ITERATOR 0x98761246
78#define EINA_MAGIC_MATRIXSPARSE_ROW_ACCESSOR 0x98761247
79#define EINA_MAGIC_MATRIXSPARSE_CELL_ITERATOR 0x98761248
80#define EINA_MAGIC_MATRIXSPARSE_CELL_ACCESSOR 0x98761249
81
82#define EINA_MAGIC_STRBUF 0x98761250
83#define EINA_MAGIC_USTRBUF 0x98761257
84#define EINA_MAGIC_BINBUF 0x98761258
85
86#define EINA_MAGIC_QUADTREE 0x98761251
87#define EINA_MAGIC_QUADTREE_ROOT 0x98761252
88#define EINA_MAGIC_QUADTREE_ITEM 0x98761253
89
90#define EINA_MAGIC_SIMPLE_XML_TAG 0x98761260
91#define EINA_MAGIC_SIMPLE_XML_DATA 0x98761261
92#define EINA_MAGIC_SIMPLE_XML_ATTRIBUTE 0x98761262
93
94#define EINA_MAGIC_CLASS 0x9877CB30
95
96/* undef the following, we want out version */
97#undef FREE
98#define FREE(ptr) \
99 do { \
100 free(ptr); \
101 ptr = NULL; \
102 } while(0);
103
104#undef IF_FREE
105#define IF_FREE(ptr) \
106 do { \
107 if (ptr) { \
108 free(ptr); \
109 ptr = NULL; \
110 } \
111 } while(0);
112
113#undef IF_FN_DEL
114#define IF_FN_DEL(_fn, ptr) \
115 do { \
116 if (ptr) { \
117 _fn(ptr); \
118 ptr = NULL; \
119 } \
120 } while(0);
121
122#define MAGIC_FREE(ptr) \
123 do { \
124 if (ptr) { \
125 EINA_MAGIC_SET(ptr, EINA_MAGIC_NONE); \
126 FREE(ptr); \
127 } \
128 } while(0);
129
130#ifdef EFL_HAVE_THREADS
131extern Eina_Bool _threads_activated;
132
133void eina_share_common_threads_init(void);
134void eina_share_common_threads_shutdown(void);
135void eina_log_threads_init(void);
136void eina_log_threads_shutdown(void);
137#endif
138
139#endif /* EINA_PRIVATE_H_ */
140
diff --git a/libraries/eina/src/lib/eina_quadtree.c b/libraries/eina/src/lib/eina_quadtree.c
new file mode 100644
index 0000000..daf03d0
--- /dev/null
+++ b/libraries/eina/src/lib/eina_quadtree.c
@@ -0,0 +1,935 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19/**
20 * @page tutorial_quadtree_page QuadTree Tutorial
21 *
22 * to be written...
23 *
24 */
25
26#ifdef HAVE_CONFIG_H
27# include "config.h"
28#endif
29
30#include <stdlib.h>
31#include <stdio.h>
32
33#ifdef HAVE_EVIL
34# include <Evil.h>
35#endif
36
37#include "eina_quadtree.h"
38#include "eina_magic.h"
39#include "eina_mempool.h"
40#include "eina_list.h"
41#include "eina_inlist.h"
42#include "eina_trash.h"
43#include "eina_log.h"
44#include "eina_rectangle.h"
45
46#include "eina_private.h"
47
48typedef struct _Eina_QuadTree_Root Eina_QuadTree_Root;
49
50static const char EINA_MAGIC_QUADTREE_STR[] = "Eina QuadTree";
51static const char EINA_MAGIC_QUADTREE_ROOT_STR[] = "Eina QuadTree Root";
52static const char EINA_MAGIC_QUADTREE_ITEM_STR[] = "Eina QuadTree Item";
53
54#define EINA_MAGIC_CHECK_QUADTREE(d, ...) \
55 do { \
56 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE)) \
57 { \
58 EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE); \
59 return __VA_ARGS__; \
60 } \
61 } while(0);
62
63#define EINA_MAGIC_CHECK_QUADTREE_ROOT(d, ...) \
64 do { \
65 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE_ROOT)) \
66 { \
67 EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE_ROOT); \
68 return __VA_ARGS__; \
69 } \
70 } while(0);
71
72#define EINA_MAGIC_CHECK_QUADTREE_ITEM(d, ...) \
73 do { \
74 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_QUADTREE_ITEM)) \
75 { \
76 EINA_MAGIC_FAIL(d, EINA_MAGIC_QUADTREE_ITEM); \
77 return __VA_ARGS__; \
78 } \
79 } while(0);
80
81struct _Eina_QuadTree
82{
83 Eina_QuadTree_Root *root;
84
85 Eina_List *hidden;
86
87 size_t root_count;
88 size_t items_count;
89
90 Eina_Trash *items_trash;
91 Eina_Trash *root_trash;
92
93 Eina_Inlist *change;
94 Eina_Inlist *cached;
95 Eina_Rectangle target;
96
97 size_t index;
98
99 struct
100 {
101 Eina_Quad_Callback v;
102 Eina_Quad_Callback h;
103 } func;
104
105 struct
106 {
107 size_t w;
108 size_t h;
109 } geom;
110
111 Eina_Bool resize : 1;
112 Eina_Bool lost : 1;
113
114 EINA_MAGIC
115};
116
117struct _Eina_QuadTree_Root
118{
119 Eina_QuadTree_Root *parent;
120 Eina_QuadTree_Root *left;
121 Eina_QuadTree_Root *right;
122
123 Eina_List *both;
124
125 Eina_Bool sorted : 1;
126
127 EINA_MAGIC
128};
129
130struct _Eina_QuadTree_Item
131{
132 EINA_INLIST;
133
134 Eina_QuadTree *quad;
135 Eina_QuadTree_Root *root;
136
137 const void *object;
138
139 size_t index;
140
141 Eina_Bool change : 1;
142 Eina_Bool delete_me : 1;
143 Eina_Bool visible : 1;
144 Eina_Bool hidden : 1;
145
146 EINA_MAGIC
147};
148
149static int _eina_quadtree_log_dom = -1;
150static Eina_Mempool *eina_quadtree_root_mp = NULL;
151static Eina_Mempool *_eina_quadtree_items_mp = NULL;
152
153#ifdef ERR
154#undef ERR
155#endif
156#define ERR(...) EINA_LOG_DOM_ERR(_eina_quadtree_log_dom, __VA_ARGS__)
157
158#ifdef DBG
159#undef DBG
160#endif
161#define DBG(...) EINA_LOG_DOM_DBG(_eina_quadtree_log_dom, __VA_ARGS__)
162
163
164static int
165_eina_quadtree_item_cmp(const void *a, const void *b)
166{
167 const Eina_QuadTree_Item *i = a;
168 const Eina_QuadTree_Item *j = b;
169
170 return i->index - j->index;
171}
172
173static Eina_QuadTree_Root *
174eina_quadtree_root_free(Eina_QuadTree *q, Eina_QuadTree_Root *root)
175{
176 Eina_QuadTree_Item *item;
177
178 if (!root)
179 return NULL;
180
181 EINA_MAGIC_CHECK_QUADTREE_ROOT(root, NULL);
182
183 EINA_LIST_FREE(root->both, item)
184 eina_mempool_free(_eina_quadtree_items_mp, item);
185
186 root->left = eina_quadtree_root_free(q, root->left);
187 root->right = eina_quadtree_root_free(q, root->right);
188
189 EINA_MAGIC_SET(root, 0);
190 eina_mempool_free(eina_quadtree_root_mp, root);
191
192 return NULL;
193}
194
195static Eina_QuadTree_Root *
196eina_quadtree_root_rebuild_pre(Eina_QuadTree *q,
197 Eina_Inlist **change,
198 Eina_QuadTree_Root *root)
199{
200 Eina_QuadTree_Item *item;
201
202 if (!root)
203 return NULL;
204
205 EINA_LIST_FREE(root->both, item)
206 {
207 if (item->visible)
208 *change = eina_inlist_append(*change, EINA_INLIST_GET(item));
209 else if (!item->hidden)
210 {
211 q->hidden = eina_list_append(q->hidden, item);
212 item->hidden = EINA_TRUE;
213 item->root = NULL;
214 }
215 }
216
217 root->left = eina_quadtree_root_rebuild_pre(q, change, root->left);
218 root->right = eina_quadtree_root_rebuild_pre(q, change, root->right);
219
220 EINA_MAGIC_SET(root, 0);
221 if (q->root_count > 50)
222 eina_mempool_free(eina_quadtree_root_mp, root);
223 else
224 {
225 eina_trash_push(&q->root_trash, root);
226 q->root_count++;
227 }
228
229 return NULL;
230}
231
232static size_t
233_eina_quadtree_split(Eina_Inlist *objects,
234 Eina_QuadTree_Root *root,
235 Eina_Inlist **left,
236 Eina_Inlist **right,
237 Eina_Quad_Callback func,
238 int border,
239 int middle)
240{
241 Eina_QuadTree_Item *object;
242
243 middle /= 2;
244
245 if (middle <= 4)
246 while (objects)
247 {
248 object = EINA_INLIST_CONTAINER_GET(objects, Eina_QuadTree_Item);
249 objects = objects->next;
250
251 object->change = EINA_FALSE;
252 if (!object->visible)
253 {
254 if (!object->hidden)
255 {
256 object->hidden = EINA_TRUE;
257 object->quad->hidden = eina_list_append(
258 object->quad->hidden,
259 object);
260 }
261
262 continue;
263 }
264
265 if (object->hidden)
266 {
267 object->hidden = EINA_FALSE;
268 object->quad->hidden = eina_list_remove(object->quad->hidden,
269 object);
270 }
271
272 if (!object->delete_me)
273 {
274 if (root->sorted)
275 root->both = eina_list_sorted_insert(root->both,
276 _eina_quadtree_item_cmp,
277 object);
278 else
279 root->both = eina_list_append(root->both, object);
280
281 object->root = root;
282 }
283 else
284 eina_quadtree_del(object);
285 }
286 else
287 while (objects)
288 {
289 object = EINA_INLIST_CONTAINER_GET(objects, Eina_QuadTree_Item);
290 objects = objects->next;
291
292 object->change = EINA_FALSE;
293 if (!object->visible)
294 {
295 if (!object->hidden)
296 {
297 object->hidden = EINA_TRUE;
298 object->quad->hidden = eina_list_append(
299 object->quad->hidden,
300 object);
301 }
302
303 continue;
304 }
305
306 if (object->hidden)
307 {
308 object->hidden = EINA_FALSE;
309 object->quad->hidden = eina_list_remove(object->quad->hidden,
310 object);
311 }
312
313 if (!object->delete_me)
314 {
315 switch (func(object->object, border + middle))
316 {
317 case EINA_QUAD_LEFT:
318 *left = eina_inlist_append(*left, EINA_INLIST_GET(object));
319 break;
320
321 case EINA_QUAD_RIGHT:
322 *right =
323 eina_inlist_append(*right, EINA_INLIST_GET(object));
324 break;
325
326 case EINA_QUAD_BOTH:
327 root->both = eina_list_append(root->both, object);
328 object->root = root;
329 break;
330
331 default:
332 abort();
333 }
334 }
335 else
336 eina_quadtree_del(object);
337 }
338
339 return middle;
340}
341
342
343static Eina_QuadTree_Root *
344_eina_quadtree_update(Eina_QuadTree *q, Eina_QuadTree_Root *parent,
345 Eina_QuadTree_Root *root, Eina_Inlist *objects,
346 Eina_Bool direction, Eina_Rectangle *size)
347{
348 Eina_Inlist *right = NULL;
349 Eina_Inlist *left = NULL;
350 size_t w2;
351 size_t h2;
352
353 if (!objects)
354 return root;
355
356 if (!root)
357 {
358 root = eina_trash_pop(&q->root_trash);
359 if (!root)
360 root = eina_mempool_malloc(eina_quadtree_root_mp, sizeof (Eina_QuadTree_Root));
361 else
362 q->root_count--;
363
364 if (!root)
365 /* FIXME: NOT GOOD TIMING, WE ARE GOING TO LEAK MORE MEMORY */
366 return NULL;
367
368 root->parent = parent;
369 root->both = NULL;
370 root->left = NULL;
371 root->right = NULL;
372 root->sorted = EINA_TRUE;
373
374 EINA_MAGIC_SET(root, EINA_MAGIC_QUADTREE_ROOT);
375 }
376
377 w2 = 0;
378 h2 = 0;
379
380 if (direction)
381 w2 = _eina_quadtree_split(objects, root,
382 &left, &right,
383 q->func.h, size->x, size->w);
384 else
385 h2 = _eina_quadtree_split(objects, root,
386 &left, &right,
387 q->func.v, size->y, size->h);
388
389 size->w -= w2; size->h -= h2;
390 root->left = _eina_quadtree_update(q, root,
391 root->left, left,
392 !direction, size);
393 size->x += w2; size->y += h2;
394 root->right = _eina_quadtree_update(q, root,
395 root->right, right,
396 !direction, size);
397 size->x -= w2; size->y -= h2;
398 size->w += w2; size->h += h2;
399
400 return root;
401}
402
403static Eina_Inlist *
404_eina_quadtree_merge(Eina_Inlist *result,
405 Eina_List *both)
406{
407 Eina_QuadTree_Item *item;
408 Eina_QuadTree_Item *b;
409 Eina_Inlist *moving;
410
411 if (!both)
412 return result;
413
414 if (!result)
415 {
416 Eina_List *l;
417
418 EINA_LIST_FOREACH(both, l, item)
419 if (item->visible)
420 result = eina_inlist_append(result, EINA_INLIST_GET(item));
421
422 return result;
423 }
424
425 moving = result;
426
427 item = EINA_INLIST_CONTAINER_GET(moving, Eina_QuadTree_Item);
428 b = eina_list_data_get(both);
429
430 while (both && moving)
431 {
432 if (!b->visible)
433 {
434 both = eina_list_next(both);
435 b = eina_list_data_get(both);
436 continue;
437 }
438
439 if (_eina_quadtree_item_cmp(item, b) < 0)
440 {
441 /* moving is still lower than item, so we can continue to the next one. */
442 moving = moving->next;
443 item = EINA_INLIST_CONTAINER_GET(moving, Eina_QuadTree_Item);
444 }
445 else
446 {
447 /* we just get above the limit of both, so insert it */
448 result = eina_inlist_prepend_relative(result,
449 EINA_INLIST_GET(b),
450 moving);
451 both = eina_list_next(both);
452 b = eina_list_data_get(both);
453 }
454 }
455
456 item = EINA_INLIST_CONTAINER_GET(result->last, Eina_QuadTree_Item);
457
458 while (both)
459 {
460 b = eina_list_data_get(both);
461 if (b->visible)
462 {
463 if (_eina_quadtree_item_cmp(item, b) < 0)
464 break;
465
466 result = eina_inlist_prepend_relative(result,
467 EINA_INLIST_GET(b),
468 result->last);
469 }
470
471 both = eina_list_next(both);
472 }
473
474 while (both)
475 {
476 b = eina_list_data_get(both);
477 if (b->visible)
478 result = eina_inlist_append(result, EINA_INLIST_GET(b));
479
480 both = eina_list_next(both);
481 }
482
483 return result;
484}
485
486static Eina_Inlist *
487_eina_quadtree_collide(Eina_Inlist *result,
488 Eina_QuadTree_Root *root,
489 Eina_Bool direction, Eina_Rectangle *size,
490 Eina_Rectangle *target)
491{
492 if (!root)
493 return result;
494
495 if (!root->sorted)
496 {
497 root->both = eina_list_sort(root->both, -1, _eina_quadtree_item_cmp);
498 root->sorted = EINA_TRUE;
499 }
500
501 result = _eina_quadtree_merge(result, root->both);
502 DBG("%p: %i in both for (%i, %i - %i, %i)",
503 root, eina_list_count(root->both),
504 size->x, size->y, size->w, size->h);
505
506 if (direction)
507 {
508 int middle = size->w / 2;
509
510 size->w -= middle;
511 if (eina_spans_intersect(size->x, size->w, target->x, target->w))
512 result = _eina_quadtree_collide(result, root->left,
513 !direction, size,
514 target);
515
516 size->x += middle;
517 if (eina_spans_intersect(size->x, size->w, target->x, target->w))
518 result = _eina_quadtree_collide(result, root->right,
519 !direction, size,
520 target);
521
522 size->x -= middle;
523 size->w += middle;
524 }
525 else
526 {
527 int middle = size->h / 2;
528
529 size->h -= middle;
530 if (eina_spans_intersect(size->y, size->h, target->y, target->h))
531 result = _eina_quadtree_collide(result, root->left,
532 !direction, size,
533 target);
534
535 size->y += middle;
536 if (eina_spans_intersect(size->y, size->h, target->y, target->h))
537 result = _eina_quadtree_collide(result, root->right,
538 !direction, size,
539 target);
540
541 size->y -= middle;
542 size->h += middle;
543 }
544
545 return result;
546}
547
548static void
549_eina_quadtree_remove(Eina_QuadTree_Item *object)
550{
551 if (!object->root)
552 return;
553
554 object->root->both = eina_list_remove(object->root->both, object);
555 if (object->root->both)
556 goto end;
557
558 if (object->root->left)
559 goto end;
560
561 if (object->root->right)
562 goto end;
563
564 /* The root is not useful anymore... */
565 if (object->root->parent)
566 {
567 if (object->root->parent->left == object->root)
568 object->root->parent->left = NULL;
569 else
570 object->root->parent->right = NULL;
571
572 object->root->parent = NULL;
573 }
574 else
575 object->quad->root = NULL;
576
577 if (object->quad->root_count > 50)
578 eina_mempool_free(eina_quadtree_root_mp, object->root);
579 else
580 {
581 eina_trash_push(&object->quad->root_trash, object->root);
582 object->quad->root_count++;
583 }
584
585end:
586 object->root = NULL;
587}
588
589EAPI Eina_QuadTree *
590eina_quadtree_new(size_t w, size_t h,
591 Eina_Quad_Callback vertical, Eina_Quad_Callback horizontal)
592{
593 Eina_QuadTree *result;
594
595 if (!vertical || !horizontal || h == 0 || w == 0)
596 return NULL;
597
598 result = calloc(1, sizeof (Eina_QuadTree));
599 if (!result)
600 return NULL;
601
602 result->func.v = vertical;
603 result->func.h = horizontal;
604
605 result->geom.w = w;
606 result->geom.h = h;
607
608 result->change = NULL;
609
610 result->lost = EINA_TRUE;
611
612 EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE);
613
614 return result;
615}
616
617EAPI void
618eina_quadtree_free(Eina_QuadTree *q)
619{
620 Eina_QuadTree_Item *item;
621
622 if (!q)
623 return;
624
625 EINA_MAGIC_CHECK_QUADTREE(q);
626
627 while (q->change)
628 {
629 item = EINA_INLIST_CONTAINER_GET(q->change, Eina_QuadTree_Item);
630 q->change = q->change->next;
631 if (!item->hidden)
632 eina_mempool_free(_eina_quadtree_items_mp, item);
633 }
634
635 EINA_LIST_FREE(q->hidden, item)
636 eina_mempool_free(_eina_quadtree_items_mp, item);
637
638 eina_quadtree_root_free(q, q->root);
639
640 while (q->items_trash)
641 {
642 item = eina_trash_pop(&q->items_trash);
643 eina_mempool_free(_eina_quadtree_items_mp, item);
644 }
645
646 while (q->root_trash)
647 {
648 Eina_QuadTree_Root *root;
649
650 root = eina_trash_pop(&q->root_trash);
651 eina_mempool_free(eina_quadtree_root_mp, root);
652 }
653
654 EINA_MAGIC_SET(q, 0);
655 free(q);
656}
657
658EAPI Eina_QuadTree_Item *
659eina_quadtree_add(Eina_QuadTree *q, const void *object)
660{
661 Eina_QuadTree_Item *result;
662
663 EINA_MAGIC_CHECK_QUADTREE(q, NULL);
664
665 if (!object)
666 return NULL;
667
668 result = eina_trash_pop(&q->items_trash);
669 if (!result)
670 result = eina_mempool_malloc(_eina_quadtree_items_mp, sizeof (Eina_QuadTree_Item));
671 else
672 q->items_count--;
673
674 if (!result)
675 return NULL;
676
677 result->quad = q;
678 result->root = NULL;
679 result->object = object;
680
681 result->index = q->index++;
682
683 result->change = EINA_TRUE;
684 result->delete_me = EINA_FALSE;
685 result->visible = EINA_TRUE;
686 result->hidden = EINA_FALSE;
687
688 EINA_MAGIC_SET(result, EINA_MAGIC_QUADTREE_ITEM);
689
690 /* Insertion is delayed until we really need to use it */
691 q->change = eina_inlist_append(q->change, EINA_INLIST_GET(result));
692
693 return result;
694}
695
696EAPI Eina_Bool
697eina_quadtree_del(Eina_QuadTree_Item *object)
698{
699 if (!object)
700 return EINA_FALSE;
701
702 EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
703
704 _eina_quadtree_remove(object);
705
706 if (object->change)
707 {
708 /* This object is still in the update array, delaying it's removal !*/
709 object->delete_me = EINA_TRUE;
710 object->visible = EINA_TRUE;
711 return EINA_TRUE;
712 }
713
714 if (object->hidden)
715 {
716 object->quad->hidden = eina_list_remove(object->quad->hidden, object);
717 object->hidden = EINA_TRUE;
718 }
719
720 /* This object is not anymore inside the tree, we can remove it now !*/
721 EINA_MAGIC_SET(object, 0);
722 if (object->quad->items_count > 256)
723 eina_mempool_free(_eina_quadtree_items_mp, object);
724 else
725 {
726 object->quad->items_count++;
727 eina_trash_push(&object->quad->items_trash, object);
728 }
729
730 return EINA_TRUE;
731}
732
733EAPI Eina_Bool
734eina_quadtree_change(Eina_QuadTree_Item *object)
735{
736 EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
737
738 if (object->delete_me || !object->visible)
739 return EINA_FALSE;
740
741 if (object->quad->resize)
742 return EINA_TRUE;
743
744 /* Delaying change until needed */
745 if (!object->change)
746 object->quad->change = eina_inlist_append(object->quad->change,
747 EINA_INLIST_GET(object));
748
749 object->change = EINA_TRUE;
750
751 _eina_quadtree_remove(object);
752
753 return EINA_TRUE;
754}
755
756EAPI Eina_Bool
757eina_quadtree_hide(Eina_QuadTree_Item *object)
758{
759 EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
760
761 object->visible = EINA_FALSE;
762
763 return EINA_TRUE;
764}
765
766EAPI Eina_Bool
767eina_quadtree_show(Eina_QuadTree_Item *object)
768{
769 EINA_MAGIC_CHECK_QUADTREE_ITEM(object, EINA_FALSE);
770
771 object->quad->lost = EINA_TRUE;
772
773 if (object->visible)
774 return EINA_TRUE;
775
776 object->visible = EINA_TRUE;
777 if (!object->change)
778 return eina_quadtree_change(object);
779
780 return EINA_TRUE;
781}
782
783EAPI Eina_Inlist *
784eina_quadtree_collide(Eina_QuadTree *q, int x, int y, int w, int h)
785{
786 Eina_Rectangle canvas;
787
788 EINA_MAGIC_CHECK_QUADTREE(q, NULL);
789
790 /* Now we need the tree to be up to date, so it's time */
791 if (q->resize) /* Full rebuild needed ! */
792 {
793 DBG("resizing quadtree");
794 q->root = eina_quadtree_root_rebuild_pre(q, &q->change, q->root);
795 q->resize = EINA_FALSE;
796 }
797
798 EINA_RECTANGLE_SET(&canvas, 0, 0, q->geom.w, q->geom.h);
799
800 if (q->change)
801 {
802 DBG("updating quadtree content");
803 q->root = _eina_quadtree_update(q, NULL, q->root, q->change,
804 EINA_FALSE, &canvas);
805 q->change = NULL;
806 q->lost = EINA_TRUE;
807 }
808
809 if (q->target.x != x
810 || q->target.y != y
811 || q->target.w != w
812 || q->target.h != h)
813 {
814 DBG("new target");
815 EINA_RECTANGLE_SET(&q->target, x, y, w, h);
816 q->lost = EINA_TRUE;
817 }
818
819 if (q->lost)
820 {
821 DBG("computing collide");
822 q->cached = _eina_quadtree_collide(NULL, q->root,
823 EINA_FALSE, &canvas,
824 &q->target);
825 q->lost = EINA_FALSE;
826 }
827
828 return q->cached;
829}
830
831EAPI void *
832eina_quadtree_object(Eina_Inlist *item)
833{
834 Eina_QuadTree_Item *qi;
835
836 if (!item)
837 return NULL;
838
839 qi = EINA_INLIST_CONTAINER_GET(item, Eina_QuadTree_Item);
840 if (!qi)
841 return NULL;
842
843 EINA_MAGIC_CHECK_QUADTREE_ITEM(qi, NULL);
844
845 if (!qi->visible)
846 return NULL;
847
848 return (void *)qi->object;
849}
850
851EAPI void
852eina_quadtree_resize(Eina_QuadTree *q, size_t w, size_t h)
853{
854 EINA_MAGIC_CHECK_QUADTREE(q);
855
856 if (q->geom.w == w
857 && q->geom.h == h)
858 return;
859
860 q->resize = EINA_TRUE;
861 q->geom.w = w;
862 q->geom.h = h;
863}
864
865EAPI void
866eina_quadtree_cycle(Eina_QuadTree *q)
867{
868 EINA_MAGIC_CHECK_QUADTREE(q);
869
870 q->index = 0;
871}
872
873EAPI void
874eina_quadtree_increase(Eina_QuadTree_Item *object)
875{
876 size_t tmp;
877
878 tmp = object->quad->index++;
879 if (object->index == tmp)
880 return;
881
882 object->index = tmp;
883 if (object->root)
884 object->root->sorted = EINA_FALSE;
885}
886
887Eina_Bool
888eina_quadtree_init(void)
889{
890 const char *choice, *tmp;
891
892 _eina_quadtree_log_dom = eina_log_domain_register("eina_quadtree",
893 EINA_LOG_COLOR_DEFAULT);
894 if (_eina_quadtree_log_dom < 0)
895 {
896 EINA_LOG_ERR("Could not register log domain: eina_quadtree");
897 return EINA_FALSE;
898 }
899
900#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
901 EMS(EINA_MAGIC_QUADTREE);
902 EMS(EINA_MAGIC_QUADTREE_ROOT);
903 EMS(EINA_MAGIC_QUADTREE_ITEM);
904#undef EMS
905
906#ifdef EINA_DEFAULT_MEMPOOL
907 choice = "pass_through";
908#else
909 choice = "chained_mempool";
910#endif
911 tmp = getenv("EINA_MEMPOOL");
912 if (tmp && tmp[0])
913 choice = tmp;
914
915 _eina_quadtree_items_mp = eina_mempool_add(choice, "QuadTree Item", NULL,
916 sizeof (Eina_QuadTree_Item), 320);
917 eina_quadtree_root_mp = eina_mempool_add(choice, "QuadTree Root", NULL,
918 sizeof (Eina_QuadTree_Root), 32);
919
920 return EINA_TRUE;
921}
922
923Eina_Bool
924eina_quadtree_shutdown(void)
925{
926 eina_mempool_del(eina_quadtree_root_mp);
927 eina_mempool_del(_eina_quadtree_items_mp);
928
929 eina_log_domain_unregister(_eina_quadtree_log_dom);
930 _eina_quadtree_log_dom = -1;
931 return EINA_TRUE;
932}
933
934
935
diff --git a/libraries/eina/src/lib/eina_rbtree.c b/libraries/eina/src/lib/eina_rbtree.c
new file mode 100644
index 0000000..c0c9f9e
--- /dev/null
+++ b/libraries/eina/src/lib/eina_rbtree.c
@@ -0,0 +1,518 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include "eina_config.h"
28#include "eina_private.h"
29#include "eina_array.h"
30
31/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
32#include "eina_safety_checks.h"
33#include "eina_rbtree.h"
34
35/*============================================================================*
36* Local *
37*============================================================================*/
38
39#define EINA_RBTREE_ITERATOR_PREFIX_MASK 0x1
40#define EINA_RBTREE_ITERATOR_INFIX_MASK 0x2
41#define EINA_RBTREE_ITERATOR_POSTFIX_MASK 0x4
42
43typedef struct _Eina_Iterator_Rbtree Eina_Iterator_Rbtree;
44typedef struct _Eina_Iterator_Rbtree_List Eina_Iterator_Rbtree_List;
45
46struct _Eina_Iterator_Rbtree
47{
48 Eina_Iterator iterator;
49
50 Eina_Array *stack;
51
52 unsigned char mask;
53};
54
55struct _Eina_Iterator_Rbtree_List
56{
57 Eina_Rbtree *tree;
58
59 Eina_Rbtree_Direction dir : 1;
60 Eina_Bool up : 1;
61};
62
63static Eina_Iterator_Rbtree_List *
64_eina_rbtree_iterator_list_new(const Eina_Rbtree *tree)
65{
66 Eina_Iterator_Rbtree_List *new;
67
68 eina_error_set(0);
69 new = malloc(sizeof (Eina_Iterator_Rbtree_List));
70 if (!new)
71 {
72 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
73 return NULL;
74 }
75
76 new->tree = (Eina_Rbtree *)tree;
77 new->dir = EINA_RBTREE_RIGHT;
78 new->up = EINA_FALSE;
79
80 return new;
81}
82
83static Eina_Rbtree *
84_eina_rbtree_iterator_get_content(Eina_Iterator_Rbtree *it)
85{
86 if (eina_array_count_get(it->stack) <= 0)
87 return NULL;
88
89 return eina_array_data_get(it->stack, 0);
90}
91
92static void
93_eina_rbtree_iterator_free(Eina_Iterator_Rbtree *it)
94{
95 Eina_Iterator_Rbtree_List *item;
96 Eina_Array_Iterator et;
97 unsigned int i;
98
99 EINA_ARRAY_ITER_NEXT(it->stack, i, item, et)
100 free(item);
101
102 eina_array_free(it->stack);
103 free(it);
104}
105
106static Eina_Bool
107_eina_rbtree_iterator_next(Eina_Iterator_Rbtree *it, void **data)
108{
109 Eina_Iterator_Rbtree_List *last;
110 Eina_Iterator_Rbtree_List *new;
111 Eina_Rbtree *tree;
112
113 if (eina_array_count_get(it->stack) <= 0)
114 return EINA_FALSE;
115
116 last = eina_array_data_get(it->stack, eina_array_count_get(it->stack) - 1);
117 tree = last->tree;
118
119 if (!last->tree || last->up == EINA_TRUE)
120 {
121 last = eina_array_pop(it->stack);
122 while (last->dir == EINA_RBTREE_LEFT
123 || !last->tree)
124 {
125 if (tree)
126 if ((it->mask & EINA_RBTREE_ITERATOR_POSTFIX_MASK) ==
127 EINA_RBTREE_ITERATOR_POSTFIX_MASK)
128 {
129 free(last);
130
131 if (eina_array_count_get(it->stack) > 0)
132 {
133 last = eina_array_data_get(it->stack,
134 eina_array_count_get(
135 it->
136 stack)
137 - 1);
138 last->up = EINA_TRUE;
139 }
140
141 goto onfix;
142 }
143
144 free(last);
145
146 last = eina_array_pop(it->stack);
147 if (!last)
148 return EINA_FALSE;
149
150 tree = last->tree;
151 }
152
153 last->dir = EINA_RBTREE_LEFT;
154 last->up = EINA_FALSE;
155
156 eina_array_push(it->stack, last);
157
158 if ((it->mask & EINA_RBTREE_ITERATOR_INFIX_MASK) ==
159 EINA_RBTREE_ITERATOR_INFIX_MASK)
160 goto onfix;
161 }
162
163 new = _eina_rbtree_iterator_list_new(last->tree->son[last->dir]);
164 if (!new)
165 return EINA_FALSE;
166
167 eina_array_push(it->stack, new);
168
169 if (last->dir == EINA_RBTREE_RIGHT)
170 if ((it->mask & EINA_RBTREE_ITERATOR_PREFIX_MASK) ==
171 EINA_RBTREE_ITERATOR_PREFIX_MASK)
172 goto onfix;
173
174 return _eina_rbtree_iterator_next(it, data);
175
176onfix:
177 *data = tree;
178 return EINA_TRUE;
179}
180
181static Eina_Iterator *
182_eina_rbtree_iterator_build(const Eina_Rbtree *root, unsigned char mask)
183{
184 Eina_Iterator_Rbtree_List *first;
185 Eina_Iterator_Rbtree *it;
186
187 eina_error_set(0);
188 it = calloc(1, sizeof (Eina_Iterator_Rbtree));
189 if (!it)
190 {
191 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
192 return NULL;
193 }
194
195 it->stack = eina_array_new(8);
196 if (!it->stack)
197 goto on_error2;
198
199 first = _eina_rbtree_iterator_list_new(root);
200 if (!first)
201 goto on_error;
202
203 eina_array_push(it->stack, first);
204
205 it->mask = mask;
206
207 it->iterator.version = EINA_ITERATOR_VERSION;
208 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_rbtree_iterator_next);
209 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
210 _eina_rbtree_iterator_get_content);
211 it->iterator.free = FUNC_ITERATOR_FREE(_eina_rbtree_iterator_free);
212
213 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
214
215 return &it->iterator;
216
217on_error:
218 eina_array_free(it->stack);
219on_error2:
220 free(it);
221
222 return NULL;
223}
224
225static void
226_eina_rbtree_node_init(Eina_Rbtree *node)
227{
228 if (!node)
229 return;
230
231 node->son[0] = NULL;
232 node->son[1] = NULL;
233
234 node->color = EINA_RBTREE_RED;
235}
236
237static inline Eina_Bool
238_eina_rbtree_is_red(Eina_Rbtree *node)
239{
240 return !!node && node->color == EINA_RBTREE_RED;
241}
242
243static inline Eina_Rbtree *
244_eina_rbtree_inline_single_rotation(Eina_Rbtree *node,
245 Eina_Rbtree_Direction dir)
246{
247 Eina_Rbtree *save = node->son[!dir];
248
249 node->son[!dir] = save->son[dir];
250 save->son[dir] = node;
251
252 node->color = EINA_RBTREE_RED;
253 save->color = EINA_RBTREE_BLACK;
254
255 return save;
256}
257
258static inline Eina_Rbtree *
259_eina_rbtree_inline_double_rotation(Eina_Rbtree *node,
260 Eina_Rbtree_Direction dir)
261{
262 node->son[!dir] = _eina_rbtree_inline_single_rotation(node->son[!dir], !dir);
263 return _eina_rbtree_inline_single_rotation(node, dir);
264}
265
266/*============================================================================*
267* Global *
268*============================================================================*/
269
270/*============================================================================*
271* API *
272*============================================================================*/
273
274EAPI Eina_Rbtree *
275eina_rbtree_inline_insert(Eina_Rbtree *root,
276 Eina_Rbtree *node,
277 Eina_Rbtree_Cmp_Node_Cb cmp,
278 const void *data)
279{
280 Eina_Rbtree head;
281 Eina_Rbtree *g, *t; /* Grandparent & parent */
282 Eina_Rbtree *p, *q; /* Iterator & parent */
283 /* WARNING:
284 Compiler is not able to understand the underlying algorithm and don't know that
285 first top node is always black, so it will never use last before running the loop
286 one time.
287 */
288 Eina_Rbtree_Direction dir, last;
289
290 EINA_SAFETY_ON_NULL_RETURN_VAL(node, root);
291 EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root);
292
293 if (!node)
294 return root;
295
296 _eina_rbtree_node_init(node);
297
298 if (!root)
299 {
300 root = node;
301 goto end_add;
302 }
303
304 memset(&head, 0, sizeof (Eina_Rbtree));
305 last = dir = EINA_RBTREE_LEFT;
306
307 /* Set up helpers */
308 t = &head;
309 g = p = NULL;
310 q = t->son[1] = root;
311
312 /* Search down the tree */
313 for (;; )
314 {
315 if (!q)
316 /* Insert new node at the bottom */
317 p->son[dir] = q = node;
318 else if (_eina_rbtree_is_red(q->son[0])
319 && _eina_rbtree_is_red(q->son[1]))
320 {
321 /* Color flip */
322 q->color = EINA_RBTREE_RED;
323 q->son[0]->color = EINA_RBTREE_BLACK;
324 q->son[1]->color = EINA_RBTREE_BLACK;
325 }
326
327 /* Fix red violation */
328 if (_eina_rbtree_is_red(q) && _eina_rbtree_is_red(p))
329 {
330 Eina_Rbtree_Direction dir2;
331
332 dir2 = (t->son[1] == g) ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT;
333
334 if (q == p->son[last])
335 t->son[dir2] = _eina_rbtree_inline_single_rotation(g, !last);
336 else
337 t->son[dir2] = _eina_rbtree_inline_double_rotation(g, !last);
338 }
339
340 /* Stop if found */
341 if (q == node)
342 break;
343
344 last = dir;
345 dir = cmp(q, node, (void *)data);
346
347 /* Update helpers */
348 if ( g )
349 t = g;
350
351 g = p, p = q;
352 q = q->son[dir];
353 }
354
355 root = head.son[1];
356
357end_add:
358 /* Make root black */
359 root->color = EINA_RBTREE_BLACK;
360
361 return root;
362}
363
364EAPI Eina_Rbtree *
365eina_rbtree_inline_remove(Eina_Rbtree *root,
366 Eina_Rbtree *node,
367 Eina_Rbtree_Cmp_Node_Cb cmp,
368 const void *data)
369{
370 Eina_Rbtree head;
371 Eina_Rbtree *q, *p;
372 Eina_Rbtree *f = NULL;
373 Eina_Rbtree_Direction dir;
374
375 EINA_SAFETY_ON_NULL_RETURN_VAL(node, root);
376 EINA_SAFETY_ON_NULL_RETURN_VAL( cmp, root);
377
378 if (!root || !node)
379 return root;
380
381 memset(&head, 0, sizeof(Eina_Rbtree));
382
383 dir = EINA_RBTREE_RIGHT;
384 q = &head;
385 p = NULL;
386 q->son[EINA_RBTREE_RIGHT] = root;
387
388 /* Search and push a red down */
389 while (q->son[dir])
390 {
391 Eina_Rbtree_Direction last = dir;
392 Eina_Rbtree *g;
393
394 /* Update helpers */
395 g = p; p = q;
396 q = q->son[dir];
397 dir = cmp(q, node, (void *)data);
398
399 /* Save parent node found */
400 if (q == node)
401 f = p;
402
403 /* Push the red node down */
404 if (!_eina_rbtree_is_red(q)
405 && !_eina_rbtree_is_red(q->son[dir]))
406 {
407 if (_eina_rbtree_is_red(q->son[!dir]))
408 q = p->son[last] = _eina_rbtree_inline_single_rotation(q, dir);
409 else if (!_eina_rbtree_is_red(q->son[!dir]))
410 {
411 Eina_Rbtree *s = p->son[!last];
412
413 if (s)
414 {
415 if (!_eina_rbtree_is_red(s->son[EINA_RBTREE_LEFT])
416 && !_eina_rbtree_is_red(s->son[EINA_RBTREE_RIGHT]))
417 {
418/* Color flip */
419 p->color = EINA_RBTREE_BLACK;
420 p->son[EINA_RBTREE_LEFT]->color = EINA_RBTREE_RED;
421 p->son[EINA_RBTREE_RIGHT]->color = EINA_RBTREE_RED;
422 }
423 else
424 {
425 Eina_Rbtree_Direction dir2;
426
427 dir2 = g->son[1] ==
428 p ? EINA_RBTREE_RIGHT : EINA_RBTREE_LEFT;
429
430 if (_eina_rbtree_is_red(s->son[last]))
431 {
432 g->son[dir2] =
433 _eina_rbtree_inline_double_rotation(p, last);
434 if (f == g)
435 {
436 p = g->son[dir2]->son[last];
437 f = g->son[dir2];
438 }
439 }
440 else if (_eina_rbtree_is_red(s->son[!last]))
441 {
442 g->son[dir2] =
443 _eina_rbtree_inline_single_rotation(p, last);
444 if (f == g)
445 {
446 p = g->son[dir2]->son[last];
447 f = g->son[dir2];
448 }
449 }
450
451/* Ensure correct coloring */
452 q->color = g->son[dir2]->color = EINA_RBTREE_RED;
453 g->son[dir2]->son[EINA_RBTREE_LEFT]->color =
454 EINA_RBTREE_BLACK;
455 g->son[dir2]->son[EINA_RBTREE_RIGHT]->color =
456 EINA_RBTREE_BLACK;
457 }
458 }
459 }
460 }
461 }
462
463 /* Replace and remove if found */
464 if (f)
465 {
466 /* 'q' should take the place of 'node' parent */
467 f->son[f->son[1] == node] = q;
468
469 /* Switch the link from the parent to q's son */
470 p->son[p->son[1] == q] = q->son[!q->son[0]];
471
472 /* Put q at the place of node */
473 q->son[0] = node->son[0];
474 q->son[1] = node->son[1];
475 q->color = node->color;
476
477 /* Reset node link */
478 node->son[0] = NULL;
479 node->son[1] = NULL;
480 }
481
482 root = head.son[1];
483 if (root)
484 root->color = EINA_RBTREE_BLACK;
485
486 return root;
487}
488
489EAPI Eina_Iterator *
490eina_rbtree_iterator_prefix(const Eina_Rbtree *root)
491{
492 return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_PREFIX_MASK);
493}
494
495EAPI Eina_Iterator *
496eina_rbtree_iterator_infix(const Eina_Rbtree *root)
497{
498 return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_INFIX_MASK);
499}
500
501EAPI Eina_Iterator *
502eina_rbtree_iterator_postfix(const Eina_Rbtree *root)
503{
504 return _eina_rbtree_iterator_build(root, EINA_RBTREE_ITERATOR_POSTFIX_MASK);
505}
506
507EAPI void
508eina_rbtree_delete(Eina_Rbtree *root, Eina_Rbtree_Free_Cb func, void *data)
509{
510 if (!root)
511 return;
512
513 EINA_SAFETY_ON_NULL_RETURN(func);
514
515 eina_rbtree_delete(root->son[0], func, data);
516 eina_rbtree_delete(root->son[1], func, data);
517 func(root, data);
518}
diff --git a/libraries/eina/src/lib/eina_rectangle.c b/libraries/eina/src/lib/eina_rectangle.c
new file mode 100644
index 0000000..7f0a619
--- /dev/null
+++ b/libraries/eina/src/lib/eina_rectangle.c
@@ -0,0 +1,568 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Cedric BAIL, Carsten Haitzler
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24#include <stdlib.h>
25
26#ifdef HAVE_EVIL
27# include <Evil.h>
28#endif
29
30#include "eina_config.h"
31#include "eina_private.h"
32#include "eina_magic.h"
33#include "eina_inlist.h"
34#include "eina_mempool.h"
35#include "eina_list.h"
36#include "eina_trash.h"
37#include "eina_log.h"
38
39/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
40#include "eina_safety_checks.h"
41#include "eina_rectangle.h"
42
43/*============================================================================*
44* Local *
45*============================================================================*/
46
47/**
48 * @cond LOCAL
49 */
50
51#define EINA_RECTANGLE_POOL_MAGIC 0x1578FCB0
52#define EINA_RECTANGLE_ALLOC_MAGIC 0x1578FCB1
53
54#define BUCKET_THRESHOLD 110
55
56typedef struct _Eina_Rectangle_Alloc Eina_Rectangle_Alloc;
57
58struct _Eina_Rectangle_Pool
59{
60 Eina_Inlist *head;
61 Eina_List *empty;
62 void *data;
63
64 Eina_Trash *bucket;
65 unsigned int bucket_count;
66
67 unsigned int references;
68 int w;
69 int h;
70
71 Eina_Bool sorted;
72 EINA_MAGIC
73};
74
75struct _Eina_Rectangle_Alloc
76{
77 EINA_INLIST;
78 Eina_Rectangle_Pool *pool;
79 EINA_MAGIC
80};
81
82#define EINA_MAGIC_CHECK_RECTANGLE_POOL(d) \
83 do { \
84 if (!EINA_MAGIC_CHECK((d), EINA_RECTANGLE_POOL_MAGIC)) { \
85 EINA_MAGIC_FAIL((d), EINA_RECTANGLE_POOL_MAGIC); } \
86 } while (0)
87
88#define EINA_MAGIC_CHECK_RECTANGLE_ALLOC(d) \
89 do { \
90 if (!EINA_MAGIC_CHECK((d), EINA_RECTANGLE_ALLOC_MAGIC)) { \
91 EINA_MAGIC_FAIL((d), EINA_RECTANGLE_ALLOC_MAGIC); } \
92 } while (0)
93
94static Eina_Mempool *_eina_rectangle_alloc_mp = NULL;
95static Eina_Mempool *_eina_rectangle_mp = NULL;
96
97static Eina_Trash *_eina_rectangles = NULL;
98static unsigned int _eina_rectangles_count = 0;
99static int _eina_rectangle_log_dom = -1;
100
101#ifdef ERR
102#undef ERR
103#endif
104#define ERR(...) EINA_LOG_DOM_ERR(_eina_rectangle_log_dom, __VA_ARGS__)
105
106#ifdef DBG
107#undef DBG
108#endif
109#define DBG(...) EINA_LOG_DOM_DBG(_eina_rectangle_log_dom, __VA_ARGS__)
110
111static int
112_eina_rectangle_cmp(const Eina_Rectangle *r1, const Eina_Rectangle *r2)
113{
114 return (r2->w * r2->h) - (r1->w * r1->h);
115}
116
117static Eina_List *
118_eina_rectangle_merge_list(Eina_List *empty, Eina_Rectangle *r)
119{
120 Eina_Rectangle *match;
121 Eina_List *l;
122 int xw;
123 int yh;
124
125 if (r->w == 0 || r->h == 0)
126 {
127 eina_rectangle_free(r);
128 return empty;
129 }
130
131start_again:
132 xw = r->x + r->w;
133 yh = r->y + r->h;
134
135 EINA_LIST_FOREACH(empty, l, match)
136 {
137 if (match->x == r->x && match->w == r->w
138 && (match->y == yh || r->y == match->y + match->h))
139 {
140 if (match->y > r->y)
141 match->y = r->y;
142
143 match->h += r->h;
144
145 eina_rectangle_free(r);
146
147 empty = eina_list_remove_list(empty, l);
148
149 r = match;
150
151 goto start_again;
152 }
153 else if (match->y == r->y && match->h == r->h
154 && (match->x == xw || r->x == match->x + match->w))
155 {
156 if (match->x > r->x)
157 match->x = r->x;
158
159 match->w += r->w;
160
161 eina_rectangle_free(r);
162
163 empty = eina_list_remove_list(empty, l);
164
165 r = match;
166
167 goto start_again;
168 }
169 }
170
171 return eina_list_append(empty, r);
172}
173
174static Eina_List *
175_eina_rectangle_empty_space_find(Eina_List *empty, int w, int h, int *x, int *y)
176{
177 Eina_Rectangle *r;
178 Eina_List *l;
179
180 EINA_LIST_FOREACH(empty, l, r)
181 {
182 if (r->w >= w && r->h >= h)
183 {
184 /* Remove l from empty */
185 empty = eina_list_remove_list(empty, l);
186 /* Remember x and y */
187 *x = r->x;
188 *y = r->y;
189 /* Split r in 2 rectangle if needed (only the empty one) and insert them */
190 if (r->w == w)
191 {
192 r->y += h;
193 r->h -= h;
194 }
195 else if (r->h == h)
196 {
197 r->x += w;
198 r->w -= w;
199 }
200 else
201 {
202 int rx1, ry1, rw1, rh1;
203 int x2, y2, w2, h2;
204
205 rx1 = r->x + w;
206 ry1 = r->y;
207 rw1 = r->w - w;
208 /* h1 could be h or r->h */
209 x2 = r->x;
210 y2 = r->y + h;
211 /* w2 could be w or r->w */
212 h2 = r->h - h;
213
214 if (rw1 * r->h > h2 * r->w)
215 {
216 rh1 = r->h;
217 w2 = w;
218 }
219 else
220 {
221 rh1 = h;
222 w2 = r->w;
223 }
224
225 EINA_RECTANGLE_SET(r, rx1, ry1, rw1, rh1);
226 empty = _eina_rectangle_merge_list(empty, r);
227
228 r = eina_rectangle_new(x2, y2, w2, h2);
229 }
230
231 if (r)
232 {
233 empty = _eina_rectangle_merge_list(empty, r); /* Return empty */
234
235 }
236
237 return empty;
238 }
239 }
240
241 *x = -1;
242 *y = -1;
243 return empty;
244}
245
246/**
247 * @endcond
248 */
249
250/*============================================================================*
251* Global *
252*============================================================================*/
253
254Eina_Bool
255eina_rectangle_init(void)
256{
257 const char *choice, *tmp;
258
259 _eina_rectangle_log_dom = eina_log_domain_register("eina_rectangle",
260 EINA_LOG_COLOR_DEFAULT);
261 if (_eina_rectangle_log_dom < 0)
262 {
263 EINA_LOG_ERR("Could not register log domain: eina_rectangle");
264 return EINA_FALSE;
265 }
266
267#ifdef EINA_DEFAULT_MEMPOOL
268 choice = "pass_through";
269#else
270 choice = "chained_mempool";
271#endif
272 tmp = getenv("EINA_MEMPOOL");
273 if (tmp && tmp[0])
274 choice = tmp;
275
276 _eina_rectangle_alloc_mp = eina_mempool_add
277 (choice, "rectangle-alloc", NULL,
278 sizeof(Eina_Rectangle_Alloc) + sizeof(Eina_Rectangle), 1024);
279 if (!_eina_rectangle_alloc_mp)
280 {
281 ERR("Mempool for rectangle cannot be allocated in rectangle init.");
282 goto init_error;
283 }
284
285 _eina_rectangle_mp = eina_mempool_add
286 (choice, "rectangle", NULL, sizeof(Eina_Rectangle), 256);
287 if (!_eina_rectangle_mp)
288 {
289 ERR("Mempool for rectangle cannot be allocated in rectangle init.");
290 goto init_error;
291 }
292
293 return EINA_TRUE;
294
295init_error:
296 eina_log_domain_unregister(_eina_rectangle_log_dom);
297 _eina_rectangle_log_dom = -1;
298
299 return EINA_FALSE;
300}
301
302Eina_Bool
303eina_rectangle_shutdown(void)
304{
305 Eina_Rectangle *del;
306
307 while ((del = eina_trash_pop(&_eina_rectangles)))
308 eina_mempool_free(_eina_rectangle_mp, del);
309 _eina_rectangles_count = 0;
310
311 eina_mempool_del(_eina_rectangle_alloc_mp);
312 eina_mempool_del(_eina_rectangle_mp);
313
314 eina_log_domain_unregister(_eina_rectangle_log_dom);
315 _eina_rectangle_log_dom = -1;
316
317 return EINA_TRUE;
318}
319
320/*============================================================================*
321* API *
322*============================================================================*/
323
324EAPI Eina_Rectangle *
325eina_rectangle_new(int x, int y, int w, int h)
326{
327 Eina_Rectangle *rect;
328
329 if (_eina_rectangles)
330 {
331 rect = eina_trash_pop(&_eina_rectangles);
332 _eina_rectangles_count--;
333 }
334 else
335 rect = eina_mempool_malloc(_eina_rectangle_mp, sizeof (Eina_Rectangle));
336
337 if (!rect)
338 return NULL;
339
340 EINA_RECTANGLE_SET(rect, x, y, w, h);
341
342 return rect;
343}
344
345EAPI void
346eina_rectangle_free(Eina_Rectangle *rect)
347{
348 EINA_SAFETY_ON_NULL_RETURN(rect);
349
350 if (_eina_rectangles_count > BUCKET_THRESHOLD)
351 eina_mempool_free(_eina_rectangle_mp, rect);
352 else
353 {
354 eina_trash_push(&_eina_rectangles, rect);
355 _eina_rectangles_count++;
356 }
357}
358
359EAPI Eina_Rectangle_Pool *
360eina_rectangle_pool_new(int w, int h)
361{
362 Eina_Rectangle_Pool *new;
363
364 new = malloc(sizeof (Eina_Rectangle_Pool));
365 if (!new)
366 return NULL;
367
368 new->head = NULL;
369 new->empty = eina_list_append(NULL, eina_rectangle_new(0, 0, w, h));
370 new->references = 0;
371 new->sorted = EINA_FALSE;
372 new->w = w;
373 new->h = h;
374 new->bucket = NULL;
375 new->bucket_count = 0;
376
377 EINA_MAGIC_SET(new, EINA_RECTANGLE_POOL_MAGIC);
378 DBG("pool=%p, size=(%d, %d)", new, w, h);
379
380 return new;
381}
382
383EAPI void
384eina_rectangle_pool_free(Eina_Rectangle_Pool *pool)
385{
386 Eina_Rectangle_Alloc *del;
387
388 EINA_SAFETY_ON_NULL_RETURN(pool);
389 DBG("pool=%p, size=(%d, %d), references=%u",
390 pool, pool->w, pool->h, pool->references);
391 while (pool->head)
392 {
393 del = (Eina_Rectangle_Alloc *)pool->head;
394
395 pool->head = (EINA_INLIST_GET(del))->next;
396
397 EINA_MAGIC_SET(del, EINA_MAGIC_NONE);
398 eina_mempool_free(_eina_rectangle_alloc_mp, del);
399 }
400
401 while (pool->bucket)
402 {
403 del = eina_trash_pop(&pool->bucket);
404 eina_mempool_free(_eina_rectangle_alloc_mp, del);
405 }
406
407 MAGIC_FREE(pool);
408}
409
410EAPI int
411eina_rectangle_pool_count(Eina_Rectangle_Pool *pool)
412{
413 EINA_SAFETY_ON_NULL_RETURN_VAL(pool, 0);
414 return pool->references;
415}
416
417EAPI Eina_Rectangle *
418eina_rectangle_pool_request(Eina_Rectangle_Pool *pool, int w, int h)
419{
420 Eina_Rectangle_Alloc *new;
421 Eina_Rectangle *rect;
422 int x;
423 int y;
424
425 EINA_SAFETY_ON_NULL_RETURN_VAL(pool, NULL);
426
427 DBG("pool=%p, size=(%d, %d), references=%u",
428 pool, pool->w, pool->h, pool->references);
429
430 if (w <= 0 || h <= 0)
431 return NULL;
432
433 if (w > pool->w || h > pool->h)
434 return NULL;
435
436 /* Sort empty if dirty */
437 if (pool->sorted)
438 {
439 pool->empty =
440 eina_list_sort(pool->empty, 0, EINA_COMPARE_CB(_eina_rectangle_cmp));
441 pool->sorted = EINA_TRUE;
442 }
443
444 pool->empty = _eina_rectangle_empty_space_find(pool->empty, w, h, &x, &y);
445 if (x == -1)
446 return NULL;
447
448 pool->sorted = EINA_FALSE;
449
450 if (pool->bucket_count > 0)
451 {
452 new = eina_trash_pop(&pool->bucket);
453 pool->bucket_count--;
454 }
455 else
456 new = eina_mempool_malloc(_eina_rectangle_alloc_mp,
457 sizeof (Eina_Rectangle_Alloc) +
458 sizeof (Eina_Rectangle));
459
460 if (!new)
461 return NULL;
462
463 rect = (Eina_Rectangle *)(new + 1);
464 eina_rectangle_coords_from(rect, x, y, w, h);
465
466 pool->head = eina_inlist_prepend(pool->head, EINA_INLIST_GET(new));
467 pool->references++;
468
469 new->pool = pool;
470
471 EINA_MAGIC_SET(new, EINA_RECTANGLE_ALLOC_MAGIC);
472 DBG("rect=%p pool=%p, size=(%d, %d), references=%u",
473 rect, pool, pool->w, pool->h, pool->references);
474
475 return rect;
476}
477
478EAPI void
479eina_rectangle_pool_release(Eina_Rectangle *rect)
480{
481 Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *)rect) - 1;
482 Eina_Rectangle *r;
483
484 EINA_SAFETY_ON_NULL_RETURN(rect);
485
486 EINA_MAGIC_CHECK_RECTANGLE_ALLOC(era);
487 EINA_MAGIC_CHECK_RECTANGLE_POOL(era->pool);
488
489 DBG("rect=%p pool=%p, size=(%d, %d), references=%u",
490 rect, era->pool, era->pool->w, era->pool->h, era->pool->references);
491
492 era->pool->references--;
493 era->pool->head = eina_inlist_remove(era->pool->head, EINA_INLIST_GET(era));
494
495 r = eina_rectangle_new(rect->x, rect->y, rect->w, rect->h);
496 if (r)
497 {
498 era->pool->empty = _eina_rectangle_merge_list(era->pool->empty, r);
499 era->pool->sorted = EINA_FALSE;
500 }
501
502 if (era->pool->bucket_count < BUCKET_THRESHOLD)
503 {
504 Eina_Rectangle_Pool *pool;
505
506 pool = era->pool;
507
508 pool->bucket_count++;
509 eina_trash_push(&pool->bucket, era);
510 }
511 else
512 {
513 EINA_MAGIC_SET(era, EINA_MAGIC_NONE);
514 eina_mempool_free(_eina_rectangle_alloc_mp, era);
515 }
516}
517
518EAPI Eina_Rectangle_Pool *
519eina_rectangle_pool_get(Eina_Rectangle *rect)
520{
521 Eina_Rectangle_Alloc *era = ((Eina_Rectangle_Alloc *)rect) - 1;
522
523 EINA_SAFETY_ON_NULL_RETURN_VAL(rect, NULL);
524
525 EINA_MAGIC_CHECK_RECTANGLE_ALLOC(era);
526 EINA_MAGIC_CHECK_RECTANGLE_POOL(era->pool);
527
528 return era->pool;
529}
530
531EAPI void
532eina_rectangle_pool_data_set(Eina_Rectangle_Pool *pool, const void *data)
533{
534 EINA_MAGIC_CHECK_RECTANGLE_POOL(pool);
535 EINA_SAFETY_ON_NULL_RETURN(pool);
536
537 DBG("data=%p pool=%p, size=(%d, %d), references=%u",
538 data, pool, pool->w, pool->h, pool->references);
539
540 pool->data = (void *)data;
541}
542
543EAPI void *
544eina_rectangle_pool_data_get(Eina_Rectangle_Pool *pool)
545{
546 EINA_MAGIC_CHECK_RECTANGLE_POOL(pool);
547 EINA_SAFETY_ON_NULL_RETURN_VAL(pool, NULL);
548
549 return pool->data;
550}
551
552EAPI Eina_Bool
553eina_rectangle_pool_geometry_get(Eina_Rectangle_Pool *pool, int *w, int *h)
554{
555 if (!pool)
556 return EINA_FALSE;
557
558 EINA_MAGIC_CHECK_RECTANGLE_POOL(pool);
559 EINA_SAFETY_ON_NULL_RETURN_VAL(pool, EINA_FALSE);
560
561 if (w)
562 *w = pool->w;
563
564 if (h)
565 *h = pool->h;
566
567 return EINA_TRUE;
568}
diff --git a/libraries/eina/src/lib/eina_safety_checks.c b/libraries/eina/src/lib/eina_safety_checks.c
new file mode 100644
index 0000000..eed7c59
--- /dev/null
+++ b/libraries/eina/src/lib/eina_safety_checks.c
@@ -0,0 +1,90 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include "eina_private.h"
24#include "eina_error.h"
25#include "eina_log.h"
26#include "eina_safety_checks.h"
27
28/*============================================================================*
29* Local *
30*============================================================================*/
31
32/*============================================================================*
33* Global *
34*============================================================================*/
35
36/**
37 * @internal
38 * @brief Shut down the safety checks module.
39 *
40 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
41 *
42 * This function shuts down the error module set up by
43 * eina_safety_checks_init(). It is called by eina_shutdown().
44 *
45 * @see eina_shutdown()
46 */
47Eina_Bool
48eina_safety_checks_shutdown(void)
49{
50 return EINA_TRUE;
51}
52
53/*============================================================================*
54* API *
55*============================================================================*/
56
57/**
58 * @cond LOCAL
59 */
60
61EAPI Eina_Error EINA_ERROR_SAFETY_FAILED = 0;
62
63static const char EINA_ERROR_SAFETY_FAILED_STR[] = "Safety check failed.";
64
65/**
66 * @endcond
67 */
68
69/**
70 * @internal
71 * @brief Initialize the safety checks module.
72 *
73 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
74 *
75 * This function sets up the safety checks module of Eina. It is
76 * called by eina_init().
77 *
78 * @see eina_init()
79 */
80Eina_Bool
81eina_safety_checks_init(void)
82{
83 EINA_ERROR_SAFETY_FAILED = eina_error_msg_static_register(
84 EINA_ERROR_SAFETY_FAILED_STR);
85 return EINA_TRUE;
86}
87
88/**
89 * @}
90 */
diff --git a/libraries/eina/src/lib/eina_sched.c b/libraries/eina/src/lib/eina_sched.c
new file mode 100644
index 0000000..8c7f7fe
--- /dev/null
+++ b/libraries/eina/src/lib/eina_sched.c
@@ -0,0 +1,94 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 ProFUSION embedded systems
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef EFL_HAVE_POSIX_THREADS
24# include <pthread.h>
25# ifdef __linux__
26# include <sched.h>
27# include <sys/time.h>
28# include <sys/resource.h>
29# include <errno.h>
30# endif
31#endif
32
33#ifdef EFL_HAVE_WIN32_THREADS
34# ifndef WIN32_LEAN_AND_MEAN
35# define WIN32_LEAN_AND_MEAN
36# endif
37# include <windows.h>
38# undef WIN32_LEAN_AND_MEAN
39#endif
40
41#include "eina_sched.h"
42#include "eina_log.h"
43
44#define RTNICENESS 5
45#define NICENESS 5
46
47EAPI void
48eina_sched_prio_drop(void)
49{
50#ifdef EFL_HAVE_POSIX_THREADS
51 struct sched_param param;
52 int pol, prio, ret;
53 pthread_t pthread_id;
54
55 pthread_id = pthread_self();
56 ret = pthread_getschedparam(pthread_id, &pol, &param);
57 if (ret)
58 {
59 EINA_LOG_ERR("Unable to query sched parameters");
60 return;
61 }
62
63 if (EINA_UNLIKELY(pol == SCHED_RR || pol == SCHED_FIFO))
64 {
65 prio = sched_get_priority_max(pol);
66 param.sched_priority += RTNICENESS;
67 if (prio > 0 && param.sched_priority > prio)
68 param.sched_priority = prio;
69
70 pthread_setschedparam(pthread_id, pol, &param);
71 }
72# ifdef __linux__
73 else
74 {
75 errno = 0;
76 prio = getpriority(PRIO_PROCESS, 0);
77 if (errno == 0)
78 {
79 prio += NICENESS;
80 if (prio > 19)
81 prio = 19;
82
83 setpriority(PRIO_PROCESS, 0, prio);
84 }
85 }
86# endif
87#elif defined EFL_HAVE_WIN32_THREADS
88 if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL))
89 EINA_LOG_ERR("Can not set thread priority");
90#else
91 EINA_LOG_ERR("Eina does not have support for threads enabled"
92 "or it doesn't support setting scheduler priorities");
93#endif
94}
diff --git a/libraries/eina/src/lib/eina_share_common.c b/libraries/eina/src/lib/eina_share_common.c
new file mode 100644
index 0000000..90e1868
--- /dev/null
+++ b/libraries/eina/src/lib/eina_share_common.c
@@ -0,0 +1,977 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2010
3 * Carsten Haitzler,
4 * Jorge Luis Zapata Muga,
5 * Cedric Bail,
6 * Gustavo Sverzut Barbieri
7 * Tom Hacohen
8 * Brett Nash
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library;
22 * if not, see <http://www.gnu.org/licenses/>.
23 *
24 * This file incorporates work covered by the following copyright and
25 * permission notice:
26 *
27 * Copyright (C) 2008 Peter Wehrfritz
28 *
29 * Permission is hereby granted, free of charge, to any person obtaining a copy
30 * of this software and associated documentation files (the "Software"), to
31 * deal in the Software without restriction, including without limitation the
32 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
33 * sell copies of the Software, and to permit persons to whom the Software is
34 * furnished to do so, subject to the following conditions:
35 *
36 * The above copyright notice and this permission notice shall be included in
37 * all copies of the Software and its Copyright notices. In addition publicly
38 * documented acknowledgment must be given that this software has been used if no
39 * source code of this software is made available publicly. This includes
40 * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
41 * documents or any documentation provided with any product containing this
42 * software. This License does not apply to any software that links to the
43 * libraries provided by this software (statically or dynamically), but only to
44 * the software provided.
45 *
46 * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice
47 * and it's intent.
48 *
49 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
52 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
53 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
54 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
55 */
56
57#ifdef HAVE_CONFIG_H
58# include "config.h"
59#endif
60
61#include <stdlib.h>
62#include <stdio.h>
63#include <string.h>
64#include <stddef.h>
65
66#ifdef EFL_HAVE_POSIX_THREADS
67# include <pthread.h>
68#endif
69
70#ifdef HAVE_EVIL
71# include <Evil.h>
72#endif
73
74#include "eina_config.h"
75#include "eina_private.h"
76#include "eina_hash.h"
77#include "eina_rbtree.h"
78#include "eina_error.h"
79#include "eina_log.h"
80#include "eina_lock.h"
81
82/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
83#include "eina_safety_checks.h"
84#include "eina_share_common.h"
85
86/*============================================================================*
87* Local *
88*============================================================================*/
89
90/**
91 * @cond LOCAL
92 */
93
94#define EINA_SHARE_COMMON_BUCKETS 256
95#define EINA_SHARE_COMMON_MASK 0xFF
96
97static const char EINA_MAGIC_SHARE_STR[] = "Eina Share";
98static const char EINA_MAGIC_SHARE_HEAD_STR[] = "Eina Share Head";
99
100static int _eina_share_common_count = 0;
101
102#define EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(d, unlock, ...) \
103 do { \
104 if (!EINA_MAGIC_CHECK((d), EINA_MAGIC_SHARE_HEAD)) \
105 { \
106 EINA_MAGIC_FAIL((d), EINA_MAGIC_SHARE_HEAD); \
107 unlock; \
108 return __VA_ARGS__; \
109 } \
110 } while (0)
111
112#define EINA_MAGIC_CHECK_SHARE_COMMON_NODE(d, _node_magic, unlock) \
113 do { \
114 if (!EINA_MAGIC_CHECK((d), _node_magic)) \
115 { \
116 EINA_MAGIC_FAIL((d), _node_magic); \
117 unlock; \
118 } \
119 } while (0)
120
121#ifdef EINA_SHARE_USAGE
122typedef struct _Eina_Share_Common_Population Eina_Share_Common_Population;
123#endif
124
125typedef struct _Eina_Share_Common Eina_Share_Common;
126typedef struct _Eina_Share_Common_Node Eina_Share_Common_Node;
127typedef struct _Eina_Share_Common_Head Eina_Share_Common_Head;
128
129int _eina_share_common_log_dom = -1;
130
131struct _Eina_Share
132{
133 Eina_Share_Common *share;
134 Eina_Magic node_magic;
135#ifdef EINA_SHARE_COMMON_USAGE
136 Eina_Share_Common_Population population;
137 int max_node_population;
138#endif
139};
140
141struct _Eina_Share_Common
142{
143 Eina_Share_Common_Head *buckets[EINA_SHARE_COMMON_BUCKETS];
144
145 EINA_MAGIC
146};
147
148struct _Eina_Share_Common_Node
149{
150 Eina_Share_Common_Node *next;
151
152 EINA_MAGIC
153
154 unsigned int length;
155 unsigned int references;
156 char str[];
157};
158
159struct _Eina_Share_Common_Head
160{
161 EINA_RBTREE;
162 EINA_MAGIC
163
164 int hash;
165
166#ifdef EINA_SHARE_COMMON_USAGE
167 int population;
168#endif
169
170 Eina_Share_Common_Node *head;
171 Eina_Share_Common_Node builtin_node;
172};
173
174Eina_Bool _share_common_threads_activated = EINA_FALSE;
175
176static Eina_Lock _mutex_big;
177
178#ifdef EINA_SHARE_COMMON_USAGE
179struct _Eina_Share_Common_Population
180{
181 int count;
182 int max;
183};
184
185static Eina_Share_Common_Population population = { 0, 0 };
186
187static Eina_Share_Common_Population population_group[4] =
188{
189 { 0, 0 },
190 { 0, 0 },
191 { 0, 0 },
192 { 0, 0 }
193};
194
195static void
196_eina_share_common_population_init(Eina_Share *share)
197{
198 unsigned int i;
199
200 for (i = 0;
201 i < sizeof (share->population_group) /
202 sizeof (share->population_group[0]);
203 ++i)
204 {
205 share->population_group[i].count = 0;
206 share->population_group[i].max = 0;
207 }
208}
209
210static void
211_eina_share_common_population_shutdown(Eina_Share *share)
212{
213 unsigned int i;
214
215 share->max_node_population = 0;
216 share->population.count = 0;
217 share->population.max = 0;
218
219 for (i = 0;
220 i < sizeof (share->population_group) /
221 sizeof (share->population_group[0]);
222 ++i)
223 {
224 share->population_group[i].count = 0;
225 share->population_group[i].max = 0;
226 }
227}
228
229static void
230_eina_share_common_population_stats(Eina_Share *share)
231{
232 unsigned int i;
233
234 fprintf(stderr, "eina share_common statistic:\n");
235 fprintf(stderr,
236 " * maximum shared strings : %i\n",
237 share->population.max);
238 fprintf(stderr,
239 " * maximum shared strings per node : %i\n",
240 share->max_node_population);
241
242 for (i = 0;
243 i < sizeof (share->population_group) /
244 sizeof (share->population_group[0]);
245 ++i)
246 fprintf(stderr,
247 "DDD: %i strings of length %i, max strings: %i\n",
248 share->population_group[i].count,
249 i,
250 share->population_group[i].max);
251}
252
253void
254eina_share_common_population_add(Eina_Share *share, int slen)
255{
256 eina_lock_take(&_mutex_big);
257
258 share->population.count++;
259 if (share->population.count > share->population.max)
260 share->population.max = share->population.count;
261
262 if (slen < 4)
263 {
264 share->population_group[slen].count++;
265 if (share->population_group[slen].count >
266 share->population_group[slen].max)
267 share->population_group[slen].max =
268 share->population_group[slen].count;
269 }
270
271 eina_lock_release(&_mutex_big);
272}
273
274void
275eina_share_common_population_del(Eina_Share *share, int slen)
276{
277 eina_lock_take(&_mutex_big);
278
279 share->population.count--;
280 if (slen < 4)
281 share->population_group[slen].count--;
282
283 eina_lock_release(&_mutex_big);
284}
285
286static void
287_eina_share_common_population_head_init(Eina_Share *share,
288 Eina_Share_Common_Head *head)
289{
290 head->population = 1;
291}
292
293static void
294_eina_share_common_population_head_add(Eina_Share *share,
295 Eina_Share_Common_Head *head)
296{
297 head->population++;
298 if (head->population > share->max_node_population)
299 share->max_node_population = head->population;
300}
301
302static void
303_eina_share_common_population_head_del(Eina_Share *share,
304 Eina_Share_Common_Head *head)
305{
306 head->population--;
307}
308
309#else /* EINA_SHARE_COMMON_USAGE undefined */
310
311static void _eina_share_common_population_init(__UNUSED__ Eina_Share *share) {
312}
313static void _eina_share_common_population_shutdown(__UNUSED__ Eina_Share *share)
314{
315}
316static void _eina_share_common_population_stats(__UNUSED__ Eina_Share *share) {
317}
318void eina_share_common_population_add(__UNUSED__ Eina_Share *share,
319 __UNUSED__ int slen) {
320}
321void eina_share_common_population_del(__UNUSED__ Eina_Share *share,
322 __UNUSED__ int slen) {
323}
324static void _eina_share_common_population_head_init(
325 __UNUSED__ Eina_Share *share,
326 __UNUSED__ Eina_Share_Common_Head *head) {
327}
328static void _eina_share_common_population_head_add(
329 __UNUSED__ Eina_Share *share,
330 __UNUSED__
331 Eina_Share_Common_Head *head) {
332}
333static void _eina_share_common_population_head_del(
334 __UNUSED__ Eina_Share *share,
335 __UNUSED__
336 Eina_Share_Common_Head *head) {
337}
338#endif
339
340static int
341_eina_share_common_cmp(const Eina_Share_Common_Head *ed,
342 const int *hash,
343 __UNUSED__ int length,
344 __UNUSED__ void *data)
345{
346 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, , 0);
347
348 return ed->hash - *hash;
349}
350
351static Eina_Rbtree_Direction
352_eina_share_common_node(const Eina_Share_Common_Head *left,
353 const Eina_Share_Common_Head *right,
354 __UNUSED__ void *data)
355{
356 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(left, , 0);
357 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(right, , 0);
358
359 if (left->hash - right->hash < 0)
360 return EINA_RBTREE_LEFT;
361
362 return EINA_RBTREE_RIGHT;
363}
364
365static void
366_eina_share_common_head_free(Eina_Share_Common_Head *ed, __UNUSED__ void *data)
367{
368 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, );
369
370 while (ed->head)
371 {
372 Eina_Share_Common_Node *el = ed->head;
373
374 ed->head = ed->head->next;
375 if (el != &ed->builtin_node)
376 MAGIC_FREE(el);
377 }
378 MAGIC_FREE(ed);
379}
380
381static void
382_eina_share_common_node_init(Eina_Share_Common_Node *node,
383 const char *str,
384 int slen,
385 unsigned int null_size,
386 Eina_Magic node_magic)
387{
388 EINA_MAGIC_SET(node, node_magic);
389 node->references = 1;
390 node->length = slen;
391 memcpy(node->str, str, slen);
392 memset(node->str + slen, 0, null_size); /* Nullify the null */
393
394 (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */
395}
396
397static Eina_Share_Common_Head *
398_eina_share_common_head_alloc(int slen)
399{
400 Eina_Share_Common_Head *head;
401 const size_t head_size = offsetof(Eina_Share_Common_Head, builtin_node.str);
402
403 head = malloc(head_size + slen);
404 if (!head)
405 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
406
407 return head;
408}
409
410static const char *
411_eina_share_common_add_head(Eina_Share *share,
412 Eina_Share_Common_Head **p_bucket,
413 int hash,
414 const char *str,
415 unsigned int slen,
416 unsigned int null_size)
417{
418 Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
419 Eina_Share_Common_Head *head;
420
421 head = _eina_share_common_head_alloc(slen + null_size);
422 if (!head)
423 return NULL;
424
425 EINA_MAGIC_SET(head, EINA_MAGIC_SHARE_HEAD);
426 head->hash = hash;
427 head->head = &head->builtin_node;
428 _eina_share_common_node_init(head->head,
429 str,
430 slen,
431 null_size,
432 share->node_magic);
433 head->head->next = NULL;
434
435 _eina_share_common_population_head_init(share, head);
436
437 *p_tree = eina_rbtree_inline_insert
438 (*p_tree, EINA_RBTREE_GET(head),
439 EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL);
440
441 return head->head->str;
442}
443
444static void
445_eina_share_common_del_head(Eina_Share_Common_Head **p_bucket,
446 Eina_Share_Common_Head *head)
447{
448 Eina_Rbtree **p_tree = (Eina_Rbtree **)p_bucket;
449
450 *p_tree = eina_rbtree_inline_remove
451 (*p_tree, EINA_RBTREE_GET(head),
452 EINA_RBTREE_CMP_NODE_CB(_eina_share_common_node), NULL);
453
454 MAGIC_FREE(head);
455}
456
457
458static inline Eina_Bool
459_eina_share_common_node_eq(const Eina_Share_Common_Node *node,
460 const char *str,
461 unsigned int slen)
462{
463 return ((node->length == slen) &&
464 (memcmp(node->str, str, slen) == 0));
465}
466
467static Eina_Share_Common_Node *
468_eina_share_common_head_find(Eina_Share_Common_Head *head,
469 const char *str,
470 unsigned int slen)
471{
472 Eina_Share_Common_Node *node, *prev;
473
474 node = head->head;
475 if (_eina_share_common_node_eq(node, str, slen))
476 return node;
477
478 prev = node;
479 node = node->next;
480 for (; node; prev = node, node = node->next)
481 if (_eina_share_common_node_eq(node, str, slen))
482 {
483 /* promote node, make hot items be at the beginning */
484 prev->next = node->next;
485 node->next = head->head;
486 head->head = node;
487 return node;
488 }
489
490 return NULL;
491}
492
493static Eina_Bool
494_eina_share_common_head_remove_node(Eina_Share_Common_Head *head,
495 const Eina_Share_Common_Node *node)
496{
497 Eina_Share_Common_Node *cur, *prev;
498
499 if (head->head == node)
500 {
501 head->head = node->next;
502 return 1;
503 }
504
505 prev = head->head;
506 cur = head->head->next;
507 for (; cur; prev = cur, cur = cur->next)
508 if (cur == node)
509 {
510 prev->next = cur->next;
511 return 1;
512 }
513
514 return 0;
515}
516
517static Eina_Share_Common_Head *
518_eina_share_common_find_hash(Eina_Share_Common_Head *bucket, int hash)
519{
520 return (Eina_Share_Common_Head *)eina_rbtree_inline_lookup
521 (EINA_RBTREE_GET(bucket), &hash, 0,
522 EINA_RBTREE_CMP_KEY_CB(_eina_share_common_cmp), NULL);
523}
524
525static Eina_Share_Common_Node *
526_eina_share_common_node_alloc(unsigned int slen, unsigned int null_size)
527{
528 Eina_Share_Common_Node *node;
529 const size_t node_size = offsetof(Eina_Share_Common_Node, str);
530
531 node = malloc(node_size + slen + null_size);
532 if (!node)
533 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
534
535 return node;
536}
537
538static Eina_Share_Common_Node *
539_eina_share_common_node_from_str(const char *str, Eina_Magic node_magic)
540{
541 Eina_Share_Common_Node *node;
542 const size_t offset = offsetof(Eina_Share_Common_Node, str);
543
544 node = (Eina_Share_Common_Node *)(str - offset);
545 EINA_MAGIC_CHECK_SHARE_COMMON_NODE(node, node_magic, node = NULL);
546 return node;
547
548 (void) node_magic; /* When magic are disable, node_magic is unused, this remove a warning. */
549}
550
551static Eina_Bool
552eina_iterator_array_check(const Eina_Rbtree *rbtree __UNUSED__,
553 Eina_Share_Common_Head *head,
554 struct dumpinfo *fdata)
555{
556 Eina_Share_Common_Node *node;
557
558 fdata->used += sizeof(Eina_Share_Common_Head);
559 for (node = head->head; node; node = node->next)
560 {
561 printf("DDD: %5i %5i ", node->length, node->references);
562 printf("'%.*s'\n", node->length, ((char *)node) + sizeof(Eina_Share_Common_Node));
563 fdata->used += sizeof(Eina_Share_Common_Node);
564 fdata->used += node->length;
565 fdata->saved += (node->references - 1) * node->length;
566 fdata->dups += node->references - 1;
567 fdata->unique++;
568 }
569
570 return EINA_TRUE;
571}
572
573/**
574 * @endcond
575 */
576
577
578/*============================================================================*
579* Global *
580*============================================================================*/
581
582/**
583 * @internal
584 * @brief Initialize the share_common module.
585 *
586 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
587 *
588 * This function sets up the share_common module of Eina. It is called by
589 * eina_init().
590 *
591 * @see eina_init()
592 */
593Eina_Bool
594eina_share_common_init(Eina_Share **_share,
595 Eina_Magic node_magic,
596 const char *node_magic_STR)
597{
598 Eina_Share *share;
599
600 share = *_share = calloc(sizeof(Eina_Share), 1);
601 if (!share) goto on_error;
602
603 if (_eina_share_common_log_dom < 0) /*Only register if not already */
604 _eina_share_common_log_dom = eina_log_domain_register(
605 "eina_share",
606 EINA_LOG_COLOR_DEFAULT);
607
608 if (_eina_share_common_log_dom < 0)
609 {
610 EINA_LOG_ERR("Could not register log domain: eina_share_common");
611 goto on_error;
612 }
613
614 share->share = calloc(1, sizeof(Eina_Share_Common));
615 if (!share->share)
616 {
617 if (_eina_share_common_log_dom > 0)
618 {
619 eina_log_domain_unregister(_eina_share_common_log_dom);
620 _eina_share_common_log_dom = -1;
621 }
622
623 goto on_error;
624 }
625
626 share->node_magic = node_magic;
627#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
628 EMS(EINA_MAGIC_SHARE);
629 EMS(EINA_MAGIC_SHARE_HEAD);
630 EMS(node_magic);
631#undef EMS
632 EINA_MAGIC_SET(share->share, EINA_MAGIC_SHARE);
633
634 _eina_share_common_population_init(share);
635
636 /* below is the common part among other all eina_share_common user */
637 if (_eina_share_common_count++ != 0)
638 return EINA_TRUE;
639
640 eina_lock_new(&_mutex_big);
641 return EINA_TRUE;
642
643 on_error:
644 _eina_share_common_count--;
645 return EINA_FALSE;
646}
647
648/**
649 * @internal
650 * @brief Shut down the share_common module.
651 *
652 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
653 *
654 * This function shuts down the share_common module set up by
655 * eina_share_common_init(). It is called by eina_shutdown().
656 *
657 * @see eina_shutdown()
658 */
659Eina_Bool
660eina_share_common_shutdown(Eina_Share **_share)
661{
662 unsigned int i;
663 Eina_Share *share = *_share;
664
665 eina_lock_take(&_mutex_big);
666
667 _eina_share_common_population_stats(share);
668
669 /* remove any string still in the table */
670 for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
671 {
672 eina_rbtree_delete(EINA_RBTREE_GET(
673 share->share->buckets[i]),
674 EINA_RBTREE_FREE_CB(
675 _eina_share_common_head_free), NULL);
676 share->share->buckets[i] = NULL;
677 }
678 MAGIC_FREE(share->share);
679
680 _eina_share_common_population_shutdown(share);
681 if (_eina_share_common_log_dom > 0) /* Only free if necessary */
682 {
683 eina_log_domain_unregister(_eina_share_common_log_dom);
684 _eina_share_common_log_dom = -1;
685 }
686
687 eina_lock_release(&_mutex_big);
688
689 free(*_share);
690 *_share = NULL;
691
692 /* below is the common part among other all eina_share_common user */
693 if (--_eina_share_common_count != 0)
694 return EINA_TRUE;
695
696 eina_lock_free(&_mutex_big);
697
698 return EINA_TRUE;
699}
700
701#ifdef EFL_HAVE_THREADS
702
703/**
704 * @internal
705 * @brief Activate the share_common mutexes.
706 *
707 * This function activate the mutexes in the eina share_common module. It is called by
708 * eina_threads_init().
709 *
710 * @see eina_threads_init()
711 */
712void
713eina_share_common_threads_init(void)
714{
715 _share_common_threads_activated = EINA_TRUE;
716}
717
718/**
719 * @internal
720 * @brief Shut down the share_common mutexes.
721 *
722 * This function shuts down the mutexes in the share_common module.
723 * It is called by eina_threads_shutdown().
724 *
725 * @see eina_threads_shutdown()
726 */
727void
728eina_share_common_threads_shutdown(void)
729{
730 _share_common_threads_activated = EINA_FALSE;
731}
732
733#endif
734
735/*============================================================================*
736* API *
737*============================================================================*/
738
739/**
740 * @cond LOCAL
741 */
742
743const char *
744eina_share_common_add_length(Eina_Share *share,
745 const char *str,
746 unsigned int slen,
747 unsigned int null_size)
748{
749 Eina_Share_Common_Head **p_bucket, *ed;
750 Eina_Share_Common_Node *el;
751 int hash_num, hash;
752
753 if (!str)
754 return NULL;
755
756 eina_share_common_population_add(share, slen);
757
758 if (slen <= 0)
759 return NULL;
760
761 hash = eina_hash_superfast(str, slen);
762 hash_num = hash & 0xFF;
763 hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
764
765 eina_lock_take(&_mutex_big);
766 p_bucket = share->share->buckets + hash_num;
767
768 ed = _eina_share_common_find_hash(*p_bucket, hash);
769 if (!ed)
770 {
771 const char *s = _eina_share_common_add_head(share,
772 p_bucket,
773 hash,
774 str,
775 slen,
776 null_size);
777 eina_lock_release(&_mutex_big);
778 return s;
779 }
780
781 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big), NULL);
782
783 el = _eina_share_common_head_find(ed, str, slen);
784 if (el)
785 {
786 EINA_MAGIC_CHECK_SHARE_COMMON_NODE(el,
787 share->node_magic,
788 eina_lock_release(&_mutex_big));
789 el->references++;
790 eina_lock_release(&_mutex_big);
791 return el->str;
792 }
793
794 el = _eina_share_common_node_alloc(slen, null_size);
795 if (!el)
796 {
797 eina_lock_release(&_mutex_big);
798 return NULL;
799 }
800
801 _eina_share_common_node_init(el, str, slen, null_size, share->node_magic);
802 el->next = ed->head;
803 ed->head = el;
804 _eina_share_common_population_head_add(share, ed);
805
806 eina_lock_release(&_mutex_big);
807
808 return el->str;
809}
810
811const char *
812eina_share_common_ref(Eina_Share *share, const char *str)
813{
814 Eina_Share_Common_Node *node;
815
816 if (!str)
817 return NULL;
818
819 eina_lock_take(&_mutex_big);
820 node = _eina_share_common_node_from_str(str, share->node_magic);
821 if (!node)
822 {
823 eina_lock_release(&_mutex_big);
824 return str;
825 }
826 node->references++;
827
828 eina_lock_release(&_mutex_big);
829
830 eina_share_common_population_add(share, node->length);
831
832 return str;
833}
834
835
836void
837eina_share_common_del(Eina_Share *share, const char *str)
838{
839 unsigned int slen;
840 Eina_Share_Common_Head *ed;
841 Eina_Share_Common_Head **p_bucket;
842 Eina_Share_Common_Node *node;
843 int hash_num, hash;
844
845 if (!str)
846 return;
847
848 eina_lock_take(&_mutex_big);
849
850 node = _eina_share_common_node_from_str(str, share->node_magic);
851 if (!node)
852 goto on_error;
853
854 slen = node->length;
855 eina_share_common_population_del(share, slen);
856 if (node->references > 1)
857 {
858 node->references--;
859 eina_lock_release(&_mutex_big);
860 return;
861 }
862
863 node->references = 0;
864
865 hash = eina_hash_superfast(str, slen);
866 hash_num = hash & 0xFF;
867 hash = (hash >> 8) & EINA_SHARE_COMMON_MASK;
868
869 p_bucket = share->share->buckets + hash_num;
870 ed = _eina_share_common_find_hash(*p_bucket, hash);
871 if (!ed)
872 goto on_error;
873
874 EINA_MAGIC_CHECK_SHARE_COMMON_HEAD(ed, eina_lock_release(&_mutex_big));
875
876 if (!_eina_share_common_head_remove_node(ed, node))
877 goto on_error;
878
879 if (node != &ed->builtin_node)
880 MAGIC_FREE(node);
881
882 if (!ed->head)
883 _eina_share_common_del_head(p_bucket, ed);
884 else
885 _eina_share_common_population_head_del(share, ed);
886
887 eina_lock_release(&_mutex_big);
888
889 return;
890
891on_error:
892 eina_lock_release(&_mutex_big);
893 /* possible segfault happened before here, but... */
894 CRITICAL("EEEK trying to del non-shared share_common \"%s\"", str);
895}
896
897int
898eina_share_common_length(__UNUSED__ Eina_Share *share, const char *str)
899{
900 const Eina_Share_Common_Node *node;
901
902 if (!str)
903 return -1;
904
905 node = _eina_share_common_node_from_str(str, share->node_magic);
906 if (!node) return 0;
907 return node->length;
908}
909
910void
911eina_share_common_dump(Eina_Share *share, void (*additional_dump)(
912 struct dumpinfo *), int used)
913{
914 Eina_Iterator *it;
915 unsigned int i;
916 struct dumpinfo di;
917
918 if (!share)
919 return;
920
921 di.used = used;
922 di.saved = 0;
923 di.dups = 0;
924 di.unique = 0;
925 printf("DDD: len ref string\n");
926 printf("DDD:-------------------\n");
927
928 eina_lock_take(&_mutex_big);
929 for (i = 0; i < EINA_SHARE_COMMON_BUCKETS; i++)
930 {
931 if (!share->share->buckets[i])
932 {
933 continue; // printf("DDD: BUCKET # %i (HEAD=%i, NODE=%i)\n", i,
934
935 }
936
937// sizeof(Eina_Share_Common_Head), sizeof(Eina_Share_Common_Node));
938 it = eina_rbtree_iterator_prefix(
939 (Eina_Rbtree *)share->share->buckets[i]);
940 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), &di);
941 eina_iterator_free(it);
942 }
943 if (additional_dump)
944 additional_dump(&di);
945
946#ifdef EINA_SHARE_COMMON_USAGE
947 /* One character strings are not counted in the hash. */
948 di.saved += share->population_group[0].count * sizeof(char);
949 di.saved += share->population_group[1].count * sizeof(char) * 2;
950#endif
951 printf("DDD:-------------------\n");
952 printf("DDD: usage (bytes) = %i, saved = %i (%3.0f%%)\n",
953 di.used, di.saved, di.used ? (di.saved * 100.0 / di.used) : 0.0);
954 printf("DDD: unique: %d, duplicates: %d (%3.0f%%)\n",
955 di.unique, di.dups, di.unique ? (di.dups * 100.0 / di.unique) : 0.0);
956
957#ifdef EINA_SHARE_COMMON_USAGE
958 printf("DDD: Allocated strings: %i\n", share->population.count);
959 printf("DDD: Max allocated strings: %i\n", share->population.max);
960
961 for (i = 0;
962 i < sizeof (share->population_group) /
963 sizeof (share->population_group[0]);
964 ++i)
965 fprintf(stderr,
966 "DDD: %i strings of length %i, max strings: %i\n",
967 share->population_group[i].count,
968 i,
969 share->population_group[i].max);
970#endif
971
972 eina_lock_release(&_mutex_big);
973}
974
975/**
976 * @endcond
977 */
diff --git a/libraries/eina/src/lib/eina_share_common.h b/libraries/eina/src/lib/eina_share_common.h
new file mode 100644
index 0000000..002c652
--- /dev/null
+++ b/libraries/eina/src/lib/eina_share_common.h
@@ -0,0 +1,103 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler, Jorge Luis Zapata Muga, Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 *
18 * This file incorporates work covered by the following copyright and
19 * permission notice:
20 *
21 * Copyright (C) 2008 Peter Wehrfritz
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to
25 * deal in the Software without restriction, including without limitation the
26 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
27 * sell copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies of the Software and its Copyright notices. In addition publicly
32 * documented acknowledgment must be given that this software has been used if no
33 * source code of this software is made available publicly. This includes
34 * acknowledgments in either Copyright notices, Manuals, Publicity and Marketing
35 * documents or any documentation provided with any product containing this
36 * software. This License does not apply to any software that links to the
37 * libraries provided by this software (statically or dynamically), but only to
38 * the software provided.
39 *
40 * Please see the OLD-COPYING.PLAIN for a plain-english explanation of this notice
41 * and it's intent.
42 *
43 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
46 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
47 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
48 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49 */
50
51#ifndef EINA_SHARE_COMMON_H_
52#define EINA_SHARE_COMMON_H_
53
54#include "eina_types.h"
55#include "eina_magic.h"
56
57typedef struct _Eina_Share Eina_Share;
58
59struct dumpinfo
60{
61 int used, saved, dups, unique;
62};
63
64Eina_Bool eina_share_common_init(Eina_Share **share,
65 Eina_Magic node_magic,
66 const char *node_magic_STR);
67Eina_Bool eina_share_common_shutdown(Eina_Share **share);
68const char *eina_share_common_add_length(Eina_Share *share,
69 const char *str,
70 unsigned int slen,
71 unsigned int null_size)
72EINA_WARN_UNUSED_RESULT;
73const char *eina_share_common_ref(Eina_Share *share, const char *str);
74void eina_share_common_del(Eina_Share *share, const char *str);
75int eina_share_common_length(Eina_Share *share,
76 const char *str) EINA_CONST
77EINA_WARN_UNUSED_RESULT;
78void eina_share_common_dump(Eina_Share *share, void (*additional_dump)(
79 struct dumpinfo *), int used);
80
81
82/* Population functions */
83void eina_share_common_population_add(Eina_Share *share, int slen);
84void eina_share_common_population_del(Eina_Share *share, int slen);
85
86/* Share logging */
87#ifdef CRITICAL
88#undef CRITICAL
89#endif
90#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eina_share_common_log_dom, __VA_ARGS__)
91
92#ifdef ERR
93#undef ERR
94#endif
95#define ERR(...) EINA_LOG_DOM_ERR(_eina_share_common_log_dom, __VA_ARGS__)
96
97#ifdef DBG
98#undef DBG
99#endif
100#define DBG(...) EINA_LOG_DOM_DBG(_eina_share_common_log_dom, __VA_ARGS__)
101extern int _eina_share_common_log_dom;
102
103#endif /* EINA_STRINGSHARE_H_ */
diff --git a/libraries/eina/src/lib/eina_simple_xml_parser.c b/libraries/eina/src/lib/eina_simple_xml_parser.c
new file mode 100644
index 0000000..08a8259
--- /dev/null
+++ b/libraries/eina/src/lib/eina_simple_xml_parser.c
@@ -0,0 +1,1070 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Gustavo Sverzut Barbieri
3 * Cedric Bail
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifdef HAVE_CONFIG_H
21# include "config.h"
22#endif
23
24#ifdef HAVE_ALLOCA_H
25# include <alloca.h>
26#elif defined __GNUC__
27# define alloca __builtin_alloca
28#elif defined _AIX
29# define alloca __alloca
30#elif defined _MSC_VER
31# include <malloc.h>
32# define alloca _alloca
33#else
34# include <stddef.h>
35# ifdef __cplusplus
36extern "C"
37# endif
38void *alloca (size_t);
39#endif
40
41#include <strings.h>
42#include <string.h>
43#include <ctype.h>
44
45#ifdef HAVE_EVIL
46# include <Evil.h>
47#endif
48
49#include "eina_private.h"
50#include "eina_log.h"
51#include "eina_mempool.h"
52#include "eina_stringshare.h"
53#include "eina_strbuf.h"
54#include "eina_simple_xml_parser.h"
55
56/*============================================================================*
57 * Local *
58 *============================================================================*/
59
60/**
61 * @cond LOCAL
62 */
63
64static Eina_Mempool *_eina_simple_xml_tag_mp = NULL;
65static Eina_Mempool *_eina_simple_xml_attribute_mp = NULL;
66static int _eina_simple_xml_log_dom = -1;
67
68static const char EINA_MAGIC_SIMPLE_XML_TAG_STR[] = "Eina Simple XML Tag";
69static const char EINA_MAGIC_SIMPLE_XML_DATA_STR[] = "Eina Simple XML Data";
70static const char EINA_MAGIC_SIMPLE_XML_ATTRIBUTE_STR[] = "Eina Simple XML Attribute";
71
72#define EINA_MAGIC_CHECK_TAG(d, ...) \
73 do { \
74 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_TAG)) \
75 { \
76 EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_TAG); \
77 return __VA_ARGS__; \
78 } \
79 } while(0)
80
81#define EINA_MAGIC_CHECK_DATA(d, ...) \
82 do { \
83 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_DATA)) \
84 { \
85 EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_DATA); \
86 return __VA_ARGS__; \
87 } \
88 } while(0)
89
90#define EINA_MAGIC_CHECK_ATTRIBUTE(d, ...) \
91 do { \
92 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE)) \
93 { \
94 EINA_MAGIC_FAIL(d, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE); \
95 return __VA_ARGS__; \
96 } \
97 } while(0)
98
99
100#ifndef EINA_LOG_COLOR_DEFAULT
101#define EINA_LOG_COLOR_DEFAULT EINA_COLOR_CYAN
102#endif
103
104#ifdef ERR
105#undef ERR
106#endif
107#define ERR(...) EINA_LOG_DOM_ERR(_eina_simple_xml_log_dom, __VA_ARGS__)
108
109#ifdef WRN
110#undef WRN
111#endif
112#define WRN(...) EINA_LOG_DOM_WARN(_eina_simple_xml_log_dom, __VA_ARGS__)
113
114#ifdef DBG
115#undef DBG
116#endif
117#define DBG(...) EINA_LOG_DOM_DBG(_eina_simple_xml_log_dom, __VA_ARGS__)
118
119
120static inline const char *
121_eina_simple_xml_whitespace_find(const char *itr, const char *itr_end)
122{
123 for (; itr < itr_end; itr++)
124 if (isspace(*itr)) break;
125 return itr;
126}
127
128static inline const char *
129_eina_simple_xml_whitespace_skip(const char *itr, const char *itr_end)
130{
131 for (; itr < itr_end; itr++)
132 if (!isspace(*itr)) break;
133 return itr;
134}
135
136static inline const char *
137_eina_simple_xml_whitespace_unskip(const char *itr, const char *itr_start)
138{
139 for (itr--; itr > itr_start; itr--)
140 if (!isspace(*itr)) break;
141 return itr + 1;
142}
143
144static inline const char *
145_eina_simple_xml_tag_start_find(const char *itr, const char *itr_end)
146{
147 return memchr(itr, '<', itr_end - itr);
148}
149
150static inline const char *
151_eina_simple_xml_tag_end_find(const char *itr, const char *itr_end)
152{
153 for (; itr < itr_end; itr++)
154 if ((*itr == '>') || (*itr == '<')) /* consider < also ends a tag */
155 return itr;
156 return NULL;
157}
158
159/**
160 * @endcond
161 */
162
163/*============================================================================*
164 * Global *
165 *============================================================================*/
166
167
168/**
169 * @internal
170 * @brief Initialize the simple xml parser module.
171 *
172 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
173 *
174 * This function sets up the simple xml parser module of Eina. It is called by
175 * eina_init().
176 *
177 * @see eina_init()
178 */
179Eina_Bool
180eina_simple_xml_init(void)
181{
182 const char *choice, *tmp;
183
184 _eina_simple_xml_log_dom = eina_log_domain_register("eina_simple_xml",
185 EINA_LOG_COLOR_DEFAULT);
186 if (_eina_simple_xml_log_dom < 0)
187 {
188 EINA_LOG_ERR("Could not register log domain: eina_simple_xml");
189 return EINA_FALSE;
190 }
191
192#ifdef EINA_DEFAULT_MEMPOOL
193 choice = "pass_through";
194#else
195 choice = "chained_mempool";
196#endif
197 tmp = getenv("EINA_MEMPOOL");
198 if (tmp && tmp[0])
199 choice = tmp;
200
201 _eina_simple_xml_tag_mp = eina_mempool_add
202 (choice, "simple_xml_tag", NULL,
203 sizeof(Eina_Simple_XML_Node_Tag), 320);
204 if (!_eina_simple_xml_tag_mp)
205 {
206 ERR("Mempool for simple_xml_tag cannot be allocated in init.");
207 goto on_init_fail;
208 }
209
210 _eina_simple_xml_attribute_mp = eina_mempool_add
211 (choice, "simple_xml_attribute", NULL,
212 sizeof(Eina_Simple_XML_Attribute), 80);
213 if (!_eina_simple_xml_attribute_mp)
214 {
215 ERR("Mempool for simple_xml_attribute cannot be allocated in init.");
216 eina_mempool_del(_eina_simple_xml_tag_mp);
217 goto on_init_fail;
218 }
219
220#define EMS(n) eina_magic_string_static_set(n, n ## _STR)
221 EMS(EINA_MAGIC_SIMPLE_XML_TAG);
222 EMS(EINA_MAGIC_SIMPLE_XML_DATA);
223 EMS(EINA_MAGIC_SIMPLE_XML_ATTRIBUTE);
224#undef EMS
225
226 return EINA_TRUE;
227
228on_init_fail:
229 eina_log_domain_unregister(_eina_simple_xml_log_dom);
230 _eina_simple_xml_log_dom = -1;
231 return EINA_FALSE;
232}
233
234/**
235 * @internal
236 * @brief Shut down the simple xml parser module.
237 *
238 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
239 *
240 * This function shuts down the simple xml parser module set
241 * up by eina_simple_xml_init(). It is called by
242 * eina_shutdown().
243 *
244 * @see eina_shutdown()
245 */
246Eina_Bool
247eina_simple_xml_shutdown(void)
248{
249 eina_mempool_del(_eina_simple_xml_attribute_mp);
250 eina_mempool_del(_eina_simple_xml_tag_mp);
251
252 eina_log_domain_unregister(_eina_simple_xml_log_dom);
253 _eina_simple_xml_log_dom = -1;
254 return EINA_TRUE;
255}
256
257
258/*============================================================================*
259 * API *
260 *============================================================================*/
261
262
263EAPI Eina_Bool
264eina_simple_xml_parse(const char *buf, unsigned buflen, Eina_Bool strip, Eina_Simple_XML_Cb func, const void *data)
265{
266 const char *itr = buf, *itr_end = buf + buflen;
267
268 if (!buf) return EINA_FALSE;
269 if (!func) return EINA_FALSE;
270
271#define CB(type, start, end) \
272 do \
273 { \
274 size_t _sz = end - start; \
275 Eina_Bool _ret; \
276 _ret = func((void*)data, type, start, start - buf, _sz); \
277 if (!_ret) return EINA_FALSE; \
278 } \
279 while (0)
280
281 while (itr < itr_end)
282 {
283 if (itr[0] == '<')
284 {
285 if (itr + 1 >= itr_end)
286 {
287 CB(EINA_SIMPLE_XML_ERROR, itr, itr_end);
288 return EINA_FALSE;
289 }
290 else
291 {
292 Eina_Simple_XML_Type type;
293 size_t toff;
294 const char *p;
295
296 if (itr[1] == '/')
297 {
298 type = EINA_SIMPLE_XML_CLOSE;
299 toff = 1;
300 }
301 else if (itr[1] == '?')
302 {
303 type = EINA_SIMPLE_XML_PROCESSING;
304 toff = 1;
305 }
306 else if (itr[1] == '!')
307 {
308 if ((itr + sizeof("<!DOCTYPE>") - 1 < itr_end) &&
309 (!memcmp(itr + 2, "DOCTYPE",
310 sizeof("DOCTYPE") - 1)) &&
311 ((itr[2 + sizeof("DOCTYPE") - 1] == '>') ||
312 (isspace(itr[2 + sizeof("DOCTYPE") - 1]))))
313 {
314 type = EINA_SIMPLE_XML_DOCTYPE;
315 toff = sizeof("!DOCTYPE") - 1;
316 }
317 else if ((itr + sizeof("<!---->") - 1 < itr_end) &&
318 (!memcmp(itr + 2, "--", sizeof("--") - 1)))
319 {
320 type = EINA_SIMPLE_XML_COMMENT;
321 toff = sizeof("!--") - 1;
322 }
323 else if ((itr + sizeof("<![CDATA[]]>") - 1 < itr_end) &&
324 (!memcmp(itr + 2, "[CDATA[",
325 sizeof("[CDATA[") - 1)))
326 {
327 type = EINA_SIMPLE_XML_CDATA;
328 toff = sizeof("![CDATA[") - 1;
329 }
330 else
331 {
332 type = EINA_SIMPLE_XML_OPEN;
333 toff = 0;
334 }
335 }
336 else
337 {
338 type = EINA_SIMPLE_XML_OPEN;
339 toff = 0;
340 }
341
342 p = _eina_simple_xml_tag_end_find(itr + 1 + toff, itr_end);
343 if (p)
344 {
345 if (type == EINA_SIMPLE_XML_CDATA)
346 {
347 /* must end with ]]> */
348 while ((p) && (memcmp(p - 2, "]]>", 3)))
349 p = _eina_simple_xml_tag_end_find(p + 1, itr_end);
350 }
351
352 if ((p) && (*p == '<'))
353 {
354 type = EINA_SIMPLE_XML_ERROR;
355 toff = 0;
356 }
357 }
358
359 if (p)
360 {
361 const char *start, *end;
362
363 start = itr + 1 + toff;
364 end = p;
365
366 switch (type)
367 {
368 case EINA_SIMPLE_XML_OPEN:
369 if (p[-1] == '/')
370 {
371 type = EINA_SIMPLE_XML_OPEN_EMPTY;
372 end--;
373 }
374 break;
375 case EINA_SIMPLE_XML_CDATA:
376 if (!memcmp(p - 2, "]]", 2)) end -= 2;
377 break;
378 case EINA_SIMPLE_XML_PROCESSING:
379 if (p[-1] == '?') end--;
380 break;
381 case EINA_SIMPLE_XML_COMMENT:
382 if (!memcmp(p - 2, "--", 2)) end -= 2;
383 break;
384 case EINA_SIMPLE_XML_OPEN_EMPTY:
385 case EINA_SIMPLE_XML_CLOSE:
386 case EINA_SIMPLE_XML_DATA:
387 case EINA_SIMPLE_XML_ERROR:
388 case EINA_SIMPLE_XML_DOCTYPE:
389 case EINA_SIMPLE_XML_IGNORED:
390 break;
391 }
392
393 if ((strip) && (type != EINA_SIMPLE_XML_ERROR))
394 {
395 start = _eina_simple_xml_whitespace_skip
396 (start, end);
397 end = _eina_simple_xml_whitespace_unskip
398 (end, start + 1);
399 }
400
401 CB(type, start, end);
402
403 if (type != EINA_SIMPLE_XML_ERROR)
404 itr = p + 1;
405 else
406 itr = p;
407 }
408 else
409 {
410 CB(EINA_SIMPLE_XML_ERROR, itr, itr_end);
411 return EINA_FALSE;
412 }
413 }
414 }
415 else
416 {
417 const char *p, *end;
418
419 if (strip)
420 {
421 p = _eina_simple_xml_whitespace_skip(itr, itr_end);
422 if (p)
423 {
424 CB(EINA_SIMPLE_XML_IGNORED, itr, p);
425 itr = p;
426 }
427 }
428
429 p = _eina_simple_xml_tag_start_find(itr, itr_end);
430 if (!p) p = itr_end;
431
432 end = p;
433 if (strip)
434 end = _eina_simple_xml_whitespace_unskip(end, itr);
435
436 if (itr != end)
437 CB(EINA_SIMPLE_XML_DATA, itr, end);
438
439 if ((strip) && (end < p))
440 CB(EINA_SIMPLE_XML_IGNORED, end, p);
441
442 itr = p;
443 }
444 }
445
446#undef CB
447
448 return EINA_TRUE;
449}
450
451EAPI const char *
452eina_simple_xml_tag_attributes_find(const char *buf, unsigned buflen)
453{
454 const char *itr = buf, *itr_end = buf + buflen;
455
456 for (; itr < itr_end; itr++)
457 {
458 if (!isspace(*itr))
459 {
460 /* user skip tagname and already gave it the attributes */
461 if (*itr == '=')
462 return buf;
463 }
464 else
465 {
466 itr = _eina_simple_xml_whitespace_skip(itr + 1, itr_end);
467 if (itr == itr_end)
468 return NULL;
469 return itr;
470 }
471 }
472
473 return NULL;
474}
475
476EAPI Eina_Bool
477eina_simple_xml_attributes_parse(const char *buf, unsigned buflen, Eina_Simple_XML_Attribute_Cb func, const void *data)
478{
479 const char *itr = buf, *itr_end = buf + buflen;
480 char *tmpbuf = alloca(buflen + 1);
481
482 if (!buf) return EINA_FALSE;
483 if (!func) return EINA_FALSE;
484
485 while (itr < itr_end)
486 {
487 const char *p = _eina_simple_xml_whitespace_skip(itr, itr_end);
488 const char *key, *key_end, *value, *value_end;
489 char *tval;
490
491 if (p == itr_end) return EINA_TRUE;
492
493 key = p;
494 for (key_end = key; key_end < itr_end; key_end++)
495 if ((*key_end == '=') || (isspace(*key_end))) break;
496 if (key_end == itr_end) return EINA_FALSE;
497 if (key_end == key) continue;
498
499 if (*key_end == '=') value = key_end + 1;
500 else
501 {
502 value = memchr(key_end, '=', itr_end - key_end);
503 if (!value) return EINA_FALSE;
504 value++;
505 }
506 for (; value < itr_end; value++)
507 if (!isspace(*value)) break;
508 if (value == itr_end) return EINA_FALSE;
509
510 if ((*value == '"') || (*value == '\''))
511 {
512 value_end = memchr(value + 1, *value, itr_end - value);
513 if (!value_end) return EINA_FALSE;
514 value++;
515 }
516 else
517 {
518 value_end = _eina_simple_xml_whitespace_find(value, itr_end);
519 }
520
521 memcpy(tmpbuf, key, key_end - key);
522 tmpbuf[key_end - key] = '\0';
523
524 tval = tmpbuf + (key_end - key) + 1;
525 memcpy(tval, value, value_end - value);
526 tval[value_end - value] = '\0';
527
528 if (!func((void*)data, tmpbuf, tval))
529 return EINA_FALSE;
530
531 itr = value_end + 1;
532 }
533 return EINA_TRUE;
534}
535
536/* Node loader *************************************************************/
537
538EAPI Eina_Simple_XML_Attribute *
539eina_simple_xml_attribute_new(Eina_Simple_XML_Node_Tag *parent, const char *key, const char *value)
540{
541 Eina_Simple_XML_Attribute *attr;
542
543 if (!key) return NULL;
544
545 attr = eina_mempool_malloc(_eina_simple_xml_attribute_mp, sizeof(*attr));
546 if (!attr)
547 {
548 ERR("could not allocate memory for attribute from mempool");
549 return NULL;
550 }
551
552 EINA_MAGIC_SET(attr, EINA_MAGIC_SIMPLE_XML_ATTRIBUTE);
553 attr->parent = parent;
554 attr->key = eina_stringshare_add(key);
555 attr->value = eina_stringshare_add(value ? value : "");
556
557 if (parent)
558 parent->attributes = eina_inlist_append
559 (parent->attributes, EINA_INLIST_GET(attr));
560
561 return attr;
562}
563
564EAPI void
565eina_simple_xml_attribute_free(Eina_Simple_XML_Attribute *attr)
566{
567 EINA_MAGIC_CHECK_ATTRIBUTE(attr);
568
569 if (attr->parent)
570 attr->parent->attributes = eina_inlist_remove
571 (attr->parent->attributes, EINA_INLIST_GET(attr));
572
573 eina_stringshare_del(attr->key);
574 eina_stringshare_del(attr->value);
575 EINA_MAGIC_SET(attr, EINA_MAGIC_NONE);
576 eina_mempool_free(_eina_simple_xml_attribute_mp, attr);
577}
578
579static void
580_eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
581{
582 if (node->base.parent)
583 node->base.parent->children = eina_inlist_remove
584 (node->base.parent->children, EINA_INLIST_GET(&node->base));
585
586 EINA_MAGIC_SET(&node->base, EINA_MAGIC_NONE);
587 free(node);
588}
589
590EAPI Eina_Simple_XML_Node_Tag *
591eina_simple_xml_node_tag_new(Eina_Simple_XML_Node_Tag *parent, const char *name)
592{
593 Eina_Simple_XML_Node_Tag *n;
594
595 if (!name) return NULL;
596
597 n = eina_mempool_malloc(_eina_simple_xml_tag_mp, sizeof(*n));
598 if (!n)
599 {
600 ERR("could not allocate memory for node from mempool");
601 return NULL;
602 }
603
604 memset(n, 0, sizeof(*n));
605
606 EINA_MAGIC_SET(&n->base, EINA_MAGIC_SIMPLE_XML_TAG);
607
608 n->base.type = EINA_SIMPLE_XML_NODE_TAG;
609 n->base.parent = parent;
610 n->name = eina_stringshare_add(name);
611
612 if (parent)
613 parent->children = eina_inlist_append
614 (parent->children, EINA_INLIST_GET(&n->base));
615
616 return n;
617}
618
619void
620_eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
621{
622 while (tag->children)
623 {
624 Eina_Simple_XML_Node *n = EINA_INLIST_CONTAINER_GET
625 (tag->children, Eina_Simple_XML_Node);
626 if (n->type == EINA_SIMPLE_XML_NODE_TAG)
627 _eina_simple_xml_node_tag_free((Eina_Simple_XML_Node_Tag *)n);
628 else
629 _eina_simple_xml_node_data_free((Eina_Simple_XML_Node_Data *)n);
630 }
631
632 while (tag->attributes)
633 {
634 Eina_Simple_XML_Attribute *a = EINA_INLIST_CONTAINER_GET
635 (tag->attributes, Eina_Simple_XML_Attribute);
636 eina_simple_xml_attribute_free(a);
637 }
638
639 if (tag->base.parent)
640 tag->base.parent->children = eina_inlist_remove
641 (tag->base.parent->children, EINA_INLIST_GET(&tag->base));
642
643 eina_stringshare_del(tag->name);
644 EINA_MAGIC_SET(&tag->base, EINA_MAGIC_NONE);
645 eina_mempool_free(_eina_simple_xml_tag_mp, tag);
646}
647
648EAPI void
649eina_simple_xml_node_tag_free(Eina_Simple_XML_Node_Tag *tag)
650{
651 EINA_MAGIC_CHECK_TAG(&tag->base);
652 if (tag->base.type != EINA_SIMPLE_XML_NODE_TAG)
653 {
654 ERR("expected tag node!");
655 return;
656 }
657 _eina_simple_xml_node_tag_free(tag);
658}
659
660static Eina_Simple_XML_Node_Data *
661_eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, Eina_Simple_XML_Node_Type type, const char *content, unsigned length)
662{
663 Eina_Simple_XML_Node_Data *n = malloc(sizeof(*n) + length + 1);
664
665 if (!content) return NULL;
666
667 if (!n)
668 {
669 ERR("could not allocate memory for node");
670 return NULL;
671 }
672
673 EINA_MAGIC_SET(&n->base, EINA_MAGIC_SIMPLE_XML_DATA);
674 n->base.type = type;
675 n->base.parent = parent;
676
677 n->length = length;
678 memcpy(n->data, content, length);
679 n->data[length] = '\0';
680
681 if (parent)
682 parent->children = eina_inlist_append
683 (parent->children, EINA_INLIST_GET(&n->base));
684
685 return n;
686}
687
688EAPI Eina_Simple_XML_Node_Data *
689eina_simple_xml_node_data_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
690{
691 return _eina_simple_xml_node_data_new
692 (parent, EINA_SIMPLE_XML_NODE_DATA, contents, length);
693}
694
695EAPI void
696eina_simple_xml_node_data_free(Eina_Simple_XML_Node_Data *node)
697{
698 EINA_MAGIC_CHECK_DATA(&node->base);
699 if (node->base.type != EINA_SIMPLE_XML_NODE_DATA)
700 {
701 ERR("expected node of type: data!");
702 return;
703 }
704 _eina_simple_xml_node_data_free(node);
705}
706
707EAPI Eina_Simple_XML_Node_CData *
708eina_simple_xml_node_cdata_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
709{
710 return _eina_simple_xml_node_data_new
711 (parent, EINA_SIMPLE_XML_NODE_CDATA, contents, length);
712}
713
714EAPI void
715eina_simple_xml_node_cdata_free(Eina_Simple_XML_Node_Data *node)
716{
717 EINA_MAGIC_CHECK_DATA(&node->base);
718 if (node->base.type != EINA_SIMPLE_XML_NODE_CDATA)
719 {
720 ERR("expected node of type: cdata!");
721 return;
722 }
723 _eina_simple_xml_node_data_free(node);
724}
725
726EAPI Eina_Simple_XML_Node_Processing *
727eina_simple_xml_node_processing_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
728{
729 return _eina_simple_xml_node_data_new
730 (parent, EINA_SIMPLE_XML_NODE_PROCESSING, contents, length);
731}
732
733EAPI void
734eina_simple_xml_node_processing_free(Eina_Simple_XML_Node_Data *node)
735{
736 EINA_MAGIC_CHECK_DATA(&node->base);
737 if (node->base.type != EINA_SIMPLE_XML_NODE_PROCESSING)
738 {
739 ERR("expected node of type: processing!");
740 return;
741 }
742 _eina_simple_xml_node_data_free(node);
743}
744
745EAPI Eina_Simple_XML_Node_Doctype *
746eina_simple_xml_node_doctype_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
747{
748 return _eina_simple_xml_node_data_new
749 (parent, EINA_SIMPLE_XML_NODE_DOCTYPE, contents, length);
750}
751
752EAPI void
753eina_simple_xml_node_doctype_free(Eina_Simple_XML_Node_Data *node)
754{
755 EINA_MAGIC_CHECK_DATA(&node->base);
756 if (node->base.type != EINA_SIMPLE_XML_NODE_DOCTYPE)
757 {
758 ERR("expected node of type: doctype!");
759 return;
760 }
761 _eina_simple_xml_node_data_free(node);
762}
763
764EAPI Eina_Simple_XML_Node_Comment *
765eina_simple_xml_node_comment_new(Eina_Simple_XML_Node_Tag *parent, const char *contents, size_t length)
766{
767 return _eina_simple_xml_node_data_new
768 (parent, EINA_SIMPLE_XML_NODE_COMMENT, contents, length);
769}
770
771EAPI void
772eina_simple_xml_node_comment_free(Eina_Simple_XML_Node_Data *node)
773{
774 EINA_MAGIC_CHECK_DATA(&node->base);
775 if (node->base.type != EINA_SIMPLE_XML_NODE_COMMENT)
776 {
777 ERR("expected node of type: comment!");
778 return;
779 }
780 _eina_simple_xml_node_data_free(node);
781}
782
783struct eina_simple_xml_node_load_ctxt
784{
785 Eina_Simple_XML_Node_Root *root;
786 Eina_Simple_XML_Node_Tag *current;
787};
788
789static Eina_Bool
790_eina_simple_xml_attrs_parse(void *data, const char *key, const char *value)
791{
792 Eina_Simple_XML_Node_Tag *n = data;
793 Eina_Simple_XML_Attribute *attr;
794
795 attr = eina_simple_xml_attribute_new(n, key, value);
796 return !!attr;
797}
798
799static Eina_Bool
800_eina_simple_xml_node_parse(void *data, Eina_Simple_XML_Type type, const char *content, unsigned offset, unsigned length)
801{
802 struct eina_simple_xml_node_load_ctxt *ctx = data;
803
804 switch (type)
805 {
806 case EINA_SIMPLE_XML_OPEN:
807 case EINA_SIMPLE_XML_OPEN_EMPTY:
808 {
809 Eina_Simple_XML_Node_Tag *n;
810 const char *name, *name_end, *attrs;
811
812 attrs = eina_simple_xml_tag_attributes_find(content, length);
813 if (!attrs)
814 name_end = content + length;
815 else
816 name_end = attrs;
817
818 name_end = _eina_simple_xml_whitespace_unskip(name_end, content);
819
820 name = eina_stringshare_add_length(content, name_end - content);
821 n = eina_simple_xml_node_tag_new(ctx->current, name);
822 eina_stringshare_del(name);
823 if (!n) return EINA_FALSE;
824
825 if (attrs)
826 eina_simple_xml_attributes_parse
827 (attrs, length - (attrs - content),
828 _eina_simple_xml_attrs_parse, n);
829
830 if (type == EINA_SIMPLE_XML_OPEN)
831 ctx->current = n;
832 }
833 break;
834
835 case EINA_SIMPLE_XML_CLOSE:
836 if (ctx->current->base.parent)
837 {
838 const char *end = _eina_simple_xml_whitespace_unskip
839 (content + length, content);
840 int len;
841 len = end - content;
842 if ((len == 0) /* </> closes the tag for us. */ ||
843 ((eina_stringshare_strlen(ctx->current->name) == len) &&
844 (memcmp(ctx->current->name, content, len) == 0)))
845 ctx->current = ctx->current->base.parent;
846 else
847 WRN("closed incorrect tag: '%.*s', '%s' was expected!",
848 len, content, ctx->current->name);
849 }
850 else
851 WRN("closed tag '%.*s' but already at document root!",
852 length, content);
853 break;
854
855 case EINA_SIMPLE_XML_DATA:
856 return !!eina_simple_xml_node_data_new
857 (ctx->current, content, length);
858 case EINA_SIMPLE_XML_CDATA:
859 return !!eina_simple_xml_node_cdata_new
860 (ctx->current, content, length);
861 case EINA_SIMPLE_XML_PROCESSING:
862 return !!eina_simple_xml_node_processing_new
863 (ctx->current, content, length);
864 case EINA_SIMPLE_XML_DOCTYPE:
865 return !!eina_simple_xml_node_doctype_new
866 (ctx->current, content, length);
867 case EINA_SIMPLE_XML_COMMENT:
868 return !!eina_simple_xml_node_comment_new
869 (ctx->current, content, length);
870
871 case EINA_SIMPLE_XML_ERROR:
872 ERR("parser error at offset %u-%u: %.*s",
873 offset, length, length, content);
874 break;
875 case EINA_SIMPLE_XML_IGNORED:
876 DBG("ignored contents at offset %u-%u: %.*s",
877 offset, length, length, content);
878 break;
879 }
880
881 return EINA_TRUE;
882}
883
884EAPI Eina_Simple_XML_Node_Root *
885eina_simple_xml_node_load(const char *buf, unsigned buflen, Eina_Bool strip)
886{
887 Eina_Simple_XML_Node_Root *root;
888 struct eina_simple_xml_node_load_ctxt ctx;
889
890 if (!buf) return NULL;
891
892 root = eina_mempool_malloc(_eina_simple_xml_tag_mp, sizeof(*root));
893 if (!root) return NULL;
894
895 memset(root, 0, sizeof(*root));
896 EINA_MAGIC_SET(&root->base, EINA_MAGIC_SIMPLE_XML_TAG);
897 root->base.type = EINA_SIMPLE_XML_NODE_ROOT;
898
899 ctx.root = root;
900 ctx.current = root;
901 eina_simple_xml_parse(buf, buflen, strip, _eina_simple_xml_node_parse, &ctx);
902
903 return root;
904}
905
906EAPI void
907eina_simple_xml_node_root_free(Eina_Simple_XML_Node_Root *root)
908{
909 if (!root) return;
910 EINA_MAGIC_CHECK_TAG(&root->base);
911 if (root->base.type != EINA_SIMPLE_XML_NODE_ROOT)
912 {
913 ERR("expected root node!");
914 return;
915 }
916 _eina_simple_xml_node_tag_free(root);
917}
918
919static inline void
920_eina_simple_xml_node_dump_indent(Eina_Strbuf *buf, const char *indent, unsigned level)
921{
922 unsigned i, indent_len = strlen(indent);
923 for (i = 0; i < level; i++)
924 eina_strbuf_append_length(buf, indent, indent_len);
925}
926
927static void
928_eina_simple_xml_node_tag_attributes_append(Eina_Strbuf *buf, Eina_Simple_XML_Node_Tag *tag)
929{
930 Eina_Simple_XML_Attribute *a;
931
932 EINA_INLIST_FOREACH(tag->attributes, a)
933 eina_strbuf_append_printf(buf, " %s=\"%s\"", a->key, a->value);
934}
935
936static void _eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const char *indent, unsigned level);
937
938static void
939_eina_simple_xml_node_children_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node_Tag *tag, const char *indent, unsigned level)
940{
941 Eina_Simple_XML_Node *node;
942
943 EINA_INLIST_FOREACH(tag->children, node)
944 _eina_simple_xml_node_dump(buf, node, indent, level);
945}
946
947static void
948_eina_simple_xml_node_dump(Eina_Strbuf *buf, Eina_Simple_XML_Node *node, const char *indent, unsigned level)
949{
950 switch (node->type)
951 {
952 case EINA_SIMPLE_XML_NODE_ROOT:
953 _eina_simple_xml_node_children_dump
954 (buf, (Eina_Simple_XML_Node_Tag *)node, indent, level);
955 break;
956
957 case EINA_SIMPLE_XML_NODE_TAG:
958 {
959 Eina_Simple_XML_Node_Tag *n = (Eina_Simple_XML_Node_Tag *)node;
960
961 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
962
963 eina_strbuf_append_char(buf, '<');
964 eina_strbuf_append_length
965 (buf, n->name, eina_stringshare_strlen(n->name));
966
967 if (n->attributes)
968 _eina_simple_xml_node_tag_attributes_append(buf, n);
969
970 if (n->children)
971 eina_strbuf_append_char(buf, '>');
972 else
973 eina_strbuf_append_length(buf, "/>", sizeof("/>") - 1);
974
975 if (indent) eina_strbuf_append_char(buf, '\n');
976
977 if (n->children)
978 {
979 _eina_simple_xml_node_children_dump(buf, n, indent, level + 1);
980
981 if (indent)
982 _eina_simple_xml_node_dump_indent(buf, indent, level);
983
984 eina_strbuf_append_length(buf, "</", sizeof("</") - 1);
985 eina_strbuf_append_length
986 (buf, n->name, eina_stringshare_strlen(n->name));
987 eina_strbuf_append_char(buf, '>');
988
989 if (indent) eina_strbuf_append_char(buf, '\n');
990 }
991 }
992 break;
993 case EINA_SIMPLE_XML_NODE_DATA:
994 {
995 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
996
997 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
998 eina_strbuf_append_length(buf, n->data, n->length);
999 if (indent) eina_strbuf_append_char(buf, '\n');
1000 }
1001 break;
1002
1003 case EINA_SIMPLE_XML_NODE_CDATA:
1004 {
1005 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1006
1007 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1008 eina_strbuf_append_length(buf, "<![CDATA[", sizeof("<![CDATA[") - 1);
1009 eina_strbuf_append_length(buf, n->data, n->length);
1010 eina_strbuf_append_length(buf, "]]>", sizeof("]]>") - 1);
1011 if (indent) eina_strbuf_append_char(buf, '\n');
1012 }
1013 break;
1014
1015 case EINA_SIMPLE_XML_NODE_PROCESSING:
1016 {
1017 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1018
1019 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1020 eina_strbuf_append_length(buf, "<?", sizeof("<?") - 1);
1021 eina_strbuf_append_length(buf, n->data, n->length);
1022 eina_strbuf_append_length(buf, " ?>", sizeof(" ?>") - 1);
1023 if (indent) eina_strbuf_append_char(buf, '\n');
1024 }
1025 break;
1026
1027 case EINA_SIMPLE_XML_NODE_DOCTYPE:
1028 {
1029 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1030
1031 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1032 eina_strbuf_append_length
1033 (buf, "<!DOCTYPE ", sizeof("<!DOCTYPE ") - 1);
1034 eina_strbuf_append_length(buf, n->data, n->length);
1035 eina_strbuf_append_char(buf, '>');
1036 if (indent) eina_strbuf_append_char(buf, '\n');
1037 }
1038 break;
1039
1040 case EINA_SIMPLE_XML_NODE_COMMENT:
1041 {
1042 Eina_Simple_XML_Node_Data *n = (Eina_Simple_XML_Node_Data *)node;
1043
1044 if (indent) _eina_simple_xml_node_dump_indent(buf, indent, level);
1045 eina_strbuf_append_length(buf, "<!-- ", sizeof("<!-- ") - 1);
1046 eina_strbuf_append_length(buf, n->data, n->length);
1047 eina_strbuf_append_length(buf, " -->", sizeof(" -->") - 1);
1048 if (indent) eina_strbuf_append_char(buf, '\n');
1049 }
1050 break;
1051 }
1052}
1053
1054EAPI char *
1055eina_simple_xml_node_dump(Eina_Simple_XML_Node *node, const char *indent)
1056{
1057 Eina_Strbuf *buf;
1058 char *ret;
1059
1060 if (!node) return NULL;
1061
1062 buf = eina_strbuf_new();
1063 if (!buf) return NULL;
1064
1065 _eina_simple_xml_node_dump(buf, node, indent, 0);
1066
1067 ret = eina_strbuf_string_steal(buf);
1068 eina_strbuf_free(buf);
1069 return ret;
1070}
diff --git a/libraries/eina/src/lib/eina_str.c b/libraries/eina/src/lib/eina_str.c
new file mode 100644
index 0000000..8d27c65
--- /dev/null
+++ b/libraries/eina/src/lib/eina_str.c
@@ -0,0 +1,462 @@
1/* Leave the OpenBSD version below so we can track upstream fixes */
2/* $OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $ */
3
4/*
5 * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
10 *
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 */
19
20
21#ifdef HAVE_CONFIG_H
22# include "config.h"
23#endif
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <limits.h>
29#include <ctype.h>
30
31#ifdef HAVE_ICONV
32# include <errno.h>
33# include <iconv.h>
34#endif
35
36#include "eina_private.h"
37#include "eina_str.h"
38
39/*============================================================================*
40* Local *
41*============================================================================*/
42
43/**
44 * @cond LOCAL
45 */
46
47/*
48 * Internal helper function used by eina_str_has_suffix() and
49 * eina_str_has_extension()
50 */
51static inline Eina_Bool
52eina_str_has_suffix_helper(const char *str,
53 const char *suffix,
54 int (*cmp)(const char *, const char *))
55{
56 size_t str_len;
57 size_t suffix_len;
58
59 if ((!str) || (!suffix)) return EINA_FALSE;
60 str_len = strlen(str);
61 suffix_len = eina_strlen_bounded(suffix, str_len);
62 if (suffix_len == (size_t)-1)
63 return EINA_FALSE;
64
65 return cmp(str + str_len - suffix_len, suffix) == 0;
66}
67
68static inline char **
69eina_str_split_full_helper(const char *str,
70 const char *delim,
71 int max_tokens,
72 unsigned int *elements)
73{
74 char *s, **str_array;
75 const char *src;
76 size_t len, dlen;
77 unsigned int tokens;
78
79 dlen = strlen(delim);
80 if (dlen == 0)
81 {
82 if (elements)
83 *elements = 0;
84
85 return NULL;
86 }
87
88 tokens = 0;
89 src = str;
90 /* count tokens and check strlen(str) */
91 while (*src != '\0')
92 {
93 const char *d = delim, *d_end = d + dlen;
94 const char *tmp = src;
95 for (; (d < d_end) && (*tmp != '\0'); d++, tmp++)
96 {
97 if (EINA_LIKELY(*d != *tmp))
98 break;
99 }
100 if (EINA_UNLIKELY(d == d_end))
101 {
102 src = tmp;
103 tokens++;
104 }
105 else
106 src++;
107 }
108 len = src - str;
109
110 if ((max_tokens > 0) && (tokens > (unsigned int)max_tokens))
111 tokens = max_tokens;
112
113 str_array = malloc(sizeof(char *) * (tokens + 2));
114 if (!str_array)
115 {
116 if (elements)
117 *elements = 0;
118
119 return NULL;
120 }
121
122 s = malloc(len + 1);
123 if (!s)
124 {
125 free(str_array);
126 if (elements)
127 *elements = 0;
128
129 return NULL;
130 }
131
132 /* copy tokens and string */
133 tokens = 0;
134 str_array[0] = s;
135 src = str;
136 while (*src != '\0')
137 {
138 const char *d = delim, *d_end = d + dlen;
139 const char *tmp = src;
140 for (; (d < d_end) && (*tmp != '\0'); d++, tmp++)
141 {
142 if (EINA_LIKELY(*d != *tmp))
143 break;
144 }
145 if (EINA_UNLIKELY(d == d_end))
146 {
147 src = tmp;
148 *s = '\0';
149 s += dlen;
150 tokens++;
151 str_array[tokens] = s;
152 }
153 else
154 {
155 *s = *src;
156 s++;
157 src++;
158 }
159 }
160 *s = '\0';
161 str_array[tokens + 1] = NULL;
162 if (elements)
163 *elements = (tokens + 1);
164
165 return str_array;
166}
167
168/**
169 * @endcond
170 */
171
172/*============================================================================*
173* Global *
174*============================================================================*/
175
176/*============================================================================*
177* API *
178*============================================================================*/
179
180EAPI size_t
181eina_strlcpy(char *dst, const char *src, size_t siz)
182{
183#ifdef HAVE_STRLCPY
184 return strlcpy(dst, src, siz);
185#else
186 char *d = dst;
187 const char *s = src;
188 size_t n = siz;
189
190 /* Copy as many bytes as will fit */
191 if (n != 0)
192 while (--n != 0)
193 {
194 if ((*d++ = *s++) == '\0')
195 break;
196 }
197
198 /* Not enough room in dst, add NUL and traverse rest of src */
199 if (n == 0)
200 {
201 if (siz != 0)
202 *d = '\0'; /* NUL-terminate dst */
203
204 while (*s++)
205 ;
206 }
207
208 return(s - src - 1); /* count does not include NUL */
209#endif
210}
211
212EAPI size_t
213eina_strlcat(char *dst, const char *src, size_t siz)
214{
215 char *d = dst;
216 const char *s = src;
217 size_t n = siz;
218 size_t dlen;
219
220 /* Find the end of dst and adjust bytes left but don't go past end */
221 while (n-- != 0 && *d != '\0')
222 d++;
223 dlen = d - dst;
224 n = siz - dlen;
225
226 if (n == 0)
227 return(dlen + strlen(s));
228
229 while (*s != '\0') {
230 if (n != 1)
231 {
232 *d++ = *s;
233 n--;
234 }
235
236 s++;
237 }
238 *d = '\0';
239
240 return(dlen + (s - src)); /* count does not include NUL */
241}
242
243EAPI Eina_Bool
244eina_str_has_prefix(const char *str, const char *prefix)
245{
246 size_t str_len;
247 size_t prefix_len;
248
249 str_len = strlen(str);
250 prefix_len = eina_strlen_bounded(prefix, str_len);
251 if (prefix_len == (size_t)-1)
252 return EINA_FALSE;
253
254 return (strncmp(str, prefix, prefix_len) == 0);
255}
256
257EAPI Eina_Bool
258eina_str_has_suffix(const char *str, const char *suffix)
259{
260 return eina_str_has_suffix_helper(str, suffix, strcmp);
261}
262
263EAPI Eina_Bool
264eina_str_has_extension(const char *str, const char *ext)
265{
266 return eina_str_has_suffix_helper(str, ext, strcasecmp);
267}
268
269EAPI char **
270eina_str_split_full(const char *str,
271 const char *delim,
272 int max_tokens,
273 unsigned int *elements)
274{
275 return eina_str_split_full_helper(str, delim, max_tokens, elements);
276}
277
278
279EAPI char **
280eina_str_split(const char *str, const char *delim, int max_tokens)
281{
282 return eina_str_split_full_helper(str, delim, max_tokens, NULL);
283}
284
285EAPI size_t
286eina_str_join_len(char *dst,
287 size_t size,
288 char sep,
289 const char *a,
290 size_t a_len,
291 const char *b,
292 size_t b_len)
293{
294 size_t ret = a_len + b_len + 1;
295 size_t off;
296
297 if (size < 1)
298 return ret;
299
300 if (size <= a_len)
301 {
302 memcpy(dst, a, size - 1);
303 dst[size - 1] = '\0';
304 return ret;
305 }
306
307 memcpy(dst, a, a_len);
308 off = a_len;
309
310 if (size <= off + 1)
311 {
312 dst[size - 1] = '\0';
313 return ret;
314 }
315
316 dst[off] = sep;
317 off++;
318
319 if (size <= off + b_len + 1)
320 {
321 memcpy(dst + off, b, size - off - 1);
322 dst[size - 1] = '\0';
323 return ret;
324 }
325
326 memcpy(dst + off, b, b_len);
327 dst[off + b_len] = '\0';
328 return ret;
329}
330
331#ifdef HAVE_ICONV
332EAPI char *
333eina_str_convert(const char *enc_from, const char *enc_to, const char *text)
334{
335 iconv_t ic;
336 char *new_txt, *inp, *outp;
337 size_t inb, outb, outlen, tob, outalloc;
338
339 if (!text)
340 return NULL;
341
342 ic = iconv_open(enc_to, enc_from);
343 if (ic == (iconv_t)(-1))
344 return NULL;
345
346 new_txt = malloc(64);
347 inb = strlen(text);
348 outb = 64;
349 inp = (char *)text;
350 outp = new_txt;
351 outalloc = 64;
352 outlen = 0;
353
354 for (;; )
355 {
356 size_t count;
357
358 tob = outb;
359 count = iconv(ic, &inp, &inb, &outp, &outb);
360 outlen += tob - outb;
361 if (count == (size_t)(-1))
362 {
363 if (errno == E2BIG)
364 {
365 new_txt = realloc(new_txt, outalloc + 64);
366 outp = new_txt + outlen;
367 outalloc += 64;
368 outb += 64;
369 }
370 else if (errno == EILSEQ)
371 {
372 if (new_txt)
373 free(new_txt);
374
375 new_txt = NULL;
376 break;
377 }
378 else if (errno == EINVAL)
379 {
380 if (new_txt)
381 free(new_txt);
382
383 new_txt = NULL;
384 break;
385 }
386 else
387 {
388 if (new_txt)
389 free(new_txt);
390
391 new_txt = NULL;
392 break;
393 }
394 }
395
396 if (inb == 0)
397 {
398 if (outalloc == outlen)
399 new_txt = realloc(new_txt, outalloc + 1);
400
401 new_txt[outlen] = 0;
402 break;
403 }
404 }
405 iconv_close(ic);
406 return new_txt;
407}
408#else
409EAPI char *
410eina_str_convert(const char *enc_from __UNUSED__,
411 const char *enc_to __UNUSED__,
412 const char *text __UNUSED__)
413{
414 return NULL;
415}
416#endif
417
418EAPI char *
419eina_str_escape(const char *str)
420{
421 char *s2, *d;
422 const char *s;
423
424 s2 = malloc((strlen(str) * 2) + 1);
425 if (!s2)
426 return NULL;
427
428 for (s = str, d = s2; *s != 0; s++, d++)
429 {
430 if ((*s == ' ') || (*s == '\\') || (*s == '\''))
431 {
432 *d = '\\';
433 d++;
434 }
435
436 *d = *s;
437 }
438 *d = 0;
439 return s2;
440}
441
442EAPI void
443eina_str_tolower(char **str)
444{
445 char *p;
446 if ((!str) || (!(*str)))
447 return;
448
449 for (p = *str; (*p); p++)
450 *p = tolower((unsigned char )(*p));
451}
452
453EAPI void
454eina_str_toupper(char **str)
455{
456 char *p;
457 if ((!str) || (!(*str)))
458 return;
459
460 for (p = *str; (*p); p++)
461 *p = toupper((unsigned char)(*p));
462}
diff --git a/libraries/eina/src/lib/eina_strbuf.c b/libraries/eina/src/lib/eina_strbuf.c
new file mode 100644
index 0000000..74b1eb9
--- /dev/null
+++ b/libraries/eina/src/lib/eina_strbuf.c
@@ -0,0 +1,202 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6#include <string.h>
7#include <ctype.h>
8
9#ifdef HAVE_EVIL
10# include <Evil.h>
11#endif
12
13#include "eina_private.h"
14#include "eina_str.h"
15#include "eina_strbuf_common.h"
16#include "eina_unicode.h"
17
18/*============================================================================*
19 * Local *
20 *============================================================================*/
21
22/**
23 * @cond LOCAL
24 */
25
26#ifdef _STRBUF_DATA_TYPE
27# undef _STRBUF_DATA_TYPE
28#endif
29
30#ifdef _STRBUF_CSIZE
31# undef _STRBUF_CSIZE
32#endif
33
34#ifdef _STRBUF_STRUCT_NAME
35# undef _STRBUF_STRUCT_NAME
36#endif
37
38#ifdef _STRBUF_STRLEN_FUNC
39# undef _STRBUF_STRLEN_FUNC
40#endif
41
42#ifdef _STRBUF_STRESCAPE_FUNC
43# undef _STRBUF_STRESCAPE_FUNC
44#endif
45
46#ifdef _STRBUF_MAGIC
47# undef _STRBUF_MAGIC
48#endif
49
50#ifdef _STRBUF_MAGIC_STR
51# undef _STRBUF_MAGIC_STR
52#endif
53
54#ifdef _FUNC_EXPAND
55# undef _FUNC_EXPAND
56#endif
57
58
59#define _STRBUF_DATA_TYPE char
60#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE)
61#define _STRBUF_STRUCT_NAME Eina_Strbuf
62#define _STRBUF_STRLEN_FUNC(x) strlen(x)
63#define _STRBUF_STRESCAPE_FUNC(x) eina_str_escape(x)
64#define _STRBUF_MAGIC EINA_MAGIC_STRBUF
65#define _STRBUF_MAGIC_STR __STRBUF_MAGIC_STR
66static const char __STRBUF_MAGIC_STR[] = "Eina Strbuf";
67
68#define _FUNC_EXPAND(y) eina_strbuf_ ## y
69
70/**
71 * @endcond
72 */
73
74
75/*============================================================================*
76 * Global *
77 *============================================================================*/
78
79
80/*============================================================================*
81 * API *
82 *============================================================================*/
83
84
85EAPI Eina_Bool
86eina_strbuf_append_printf(Eina_Strbuf *buf, const char *fmt, ...)
87{
88 va_list args;
89 char *str;
90 size_t len;
91 Eina_Bool ret;
92
93 va_start(args, fmt);
94 len = vasprintf(&str, fmt, args);
95 va_end(args);
96
97 if (len <= 0 || !str)
98 return EINA_FALSE;
99
100 ret = eina_strbuf_append_length(buf, str, len);
101 free(str);
102 return ret;
103}
104
105EAPI Eina_Bool
106eina_strbuf_append_vprintf(Eina_Strbuf *buf, const char *fmt, va_list args)
107{
108 char *str;
109 size_t len;
110 Eina_Bool ret;
111
112 len = vasprintf(&str, fmt, args);
113
114 if (len <= 0 || !str)
115 return EINA_FALSE;
116
117 ret = eina_strbuf_append_length(buf, str, len);
118 free(str);
119 return ret;
120}
121
122EAPI Eina_Bool
123eina_strbuf_insert_printf(Eina_Strbuf *buf, const char *fmt, size_t pos, ...)
124{
125 va_list args;
126 char *str;
127 size_t len;
128 Eina_Bool ret;
129
130 va_start(args, pos);
131 len = vasprintf(&str, fmt, args);
132 va_end(args);
133
134 if (len <= 0 || !str)
135 return EINA_FALSE;
136
137 ret = eina_strbuf_insert(buf, str, pos);
138 free(str);
139 return ret;
140}
141
142EAPI Eina_Bool
143eina_strbuf_insert_vprintf(Eina_Strbuf *buf,
144 const char *fmt,
145 size_t pos,
146 va_list args)
147{
148 char *str;
149 size_t len;
150 Eina_Bool ret;
151
152 len = vasprintf(&str, fmt, args);
153
154 if (len <= 0 || !str)
155 return EINA_FALSE;
156
157 ret = eina_strbuf_insert(buf, str, pos);
158 free(str);
159 return ret;
160}
161
162EAPI void
163eina_strbuf_trim(Eina_Strbuf *buf)
164{
165 char *c = buf->buf;
166
167 while (buf->len > 0 && isspace(((unsigned char*)(buf->buf))[buf->len - 1]))
168 buf->len--;
169 while (buf->len > 0 && isspace(*c))
170 {
171 c++;
172 buf->len--;
173 }
174 memmove(buf->buf, c, buf->len);
175 ((unsigned char *)buf->buf)[buf->len] = '\0';
176}
177
178EAPI void
179eina_strbuf_ltrim(Eina_Strbuf *buf)
180{
181 char *c = buf->buf;
182
183 while (buf->len > 0 && isspace(*c))
184 {
185 c++;
186 buf->len--;
187 }
188 memmove(buf->buf, c, buf->len);
189 ((unsigned char *)buf->buf)[buf->len] = '\0';
190}
191
192EAPI void
193eina_strbuf_rtrim(Eina_Strbuf *buf)
194{
195 while (buf->len > 0 && isspace(((unsigned char*)(buf->buf))[buf->len - 1]))
196 buf->len--;
197 ((unsigned char *)buf->buf)[buf->len] = '\0';
198}
199
200/* Unicode */
201
202#include "eina_strbuf_template_c.x"
diff --git a/libraries/eina/src/lib/eina_strbuf_common.c b/libraries/eina/src/lib/eina_strbuf_common.c
new file mode 100644
index 0000000..46067cd
--- /dev/null
+++ b/libraries/eina/src/lib/eina_strbuf_common.c
@@ -0,0 +1,874 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9#ifdef _WIN32
10# include <Evil.h>
11#endif
12
13#include "eina_private.h"
14#include "eina_str.h"
15#include "eina_magic.h"
16#include "eina_error.h"
17#include "eina_safety_checks.h"
18#include "eina_strbuf.h"
19#include "eina_strbuf_common.h"
20
21/*============================================================================*
22* Local *
23*============================================================================*/
24
25/**
26 * @cond LOCAL
27 */
28
29#define EINA_STRBUF_INIT_SIZE 32
30#define EINA_STRBUF_INIT_STEP 32
31#define EINA_STRBUF_MAX_STEP 4096
32
33/**
34 * @endcond
35 */
36
37/*============================================================================*
38* Global *
39*============================================================================*/
40
41/**
42 * @internal
43 * @brief Initialize the strbuf module.
44 *
45 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
46 *
47 * This function sets up the strbuf module of Eina. It is called by
48 * eina_init().
49 *
50 * @see eina_init()
51 */
52Eina_Bool
53eina_strbuf_common_init(void)
54{
55 return EINA_TRUE;
56}
57
58/**
59 * @internal
60 * @brief Shut down the strbuf module.
61 *
62 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
63 *
64 * This function shuts down the strbuf module set up by
65 * eina_strbuf_common_init(). It is called by eina_shutdown().
66 *
67 * @see eina_shutdown()
68 */
69Eina_Bool
70eina_strbuf_common_shutdown(void)
71{
72 return EINA_TRUE;
73}
74
75/**
76 * @internal
77 *
78 * init the buffer
79 * @param csize the character size
80 * @param buf the buffer to init
81 *
82 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
83 */
84static Eina_Bool
85_eina_strbuf_common_init(size_t csize, Eina_Strbuf *buf)
86{
87 buf->len = 0;
88 buf->size = EINA_STRBUF_INIT_SIZE;
89 buf->step = EINA_STRBUF_INIT_STEP;
90
91 eina_error_set(0);
92 buf->buf = calloc(csize, buf->size);
93 if (EINA_UNLIKELY(!buf->buf))
94 {
95 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
96 return EINA_FALSE;
97 }
98
99 return EINA_TRUE;
100}
101
102/**
103 * @internal
104 *
105 * init the buffer without allocating the actual string (for managed)
106 * @param csize the character size
107 * @param buf the buffer to init
108 *
109 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
110 */
111static Eina_Bool
112_eina_strbuf_common_manage_init(size_t csize __UNUSED__,
113 Eina_Strbuf *buf,
114 void *str,
115 size_t len)
116{
117 buf->len = len;
118 buf->size = len + 1;
119 buf->step = EINA_STRBUF_INIT_STEP;
120 buf->buf = str;
121
122 return EINA_TRUE;
123}
124
125
126/**
127 * @internal
128 *
129 * resize the buffer
130 * @param csize the character size
131 * @param buf the buffer to resize
132 * @param size the minimum size of the buffer
133 *
134 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
135 */
136static inline Eina_Bool
137_eina_strbuf_common_resize(size_t csize, Eina_Strbuf *buf, size_t size)
138{
139 size_t new_size, new_step, delta;
140 void *buffer;
141
142 size += 1; // Add extra space for '\0'
143
144 /* nothing to do */
145 if (size == buf->size) return EINA_TRUE;
146 else if (size > buf->size) delta = size - buf->size;
147 else delta = buf->size - size;
148
149 /* check if should keep the same step (just used while growing) */
150 if ((delta <= buf->step) && (size > buf->size)) new_step = buf->step;
151 else
152 {
153 new_step = (((delta / EINA_STRBUF_INIT_STEP) + 1)
154 * EINA_STRBUF_INIT_STEP);
155 if (new_step > EINA_STRBUF_MAX_STEP) new_step = EINA_STRBUF_MAX_STEP;
156 }
157
158 new_size = (((size / new_step) + 1) * new_step);
159
160 /* reallocate the buffer to the new size */
161 buffer = realloc(buf->buf, new_size * csize);
162 if (EINA_UNLIKELY(!buffer))
163 {
164 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
165 return EINA_FALSE;
166 }
167
168 buf->buf = buffer;
169 buf->size = new_size;
170 buf->step = new_step;
171 eina_error_set(0);
172 return EINA_TRUE;
173}
174
175/**
176 * @internal
177 *
178 * If required, enlarge the buffer to fit the new size.
179 *
180 * @param csize the character size
181 * @param buf the buffer to resize
182 * @param size the minimum size of the buffer
183 *
184 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
185 */
186Eina_Bool
187_eina_strbuf_common_grow(size_t csize, Eina_Strbuf *buf, size_t size)
188{
189 if ((size + 1) < buf->size) return EINA_TRUE;
190 return _eina_strbuf_common_resize(csize, buf, size);
191}
192
193/**
194 * @internal
195 *
196 * insert string of known length at random within existing strbuf limits.
197 *
198 * @param csize the character size
199 * @param buf the buffer to resize, must be valid.
200 * @param str the string to copy, must be valid (!NULL and smaller than @a len)
201 * @param len the amount of bytes in @a str to copy, must be valid.
202 * @param pos the position inside buffer to insert, must be valid (smaller
203 * than eina_strbuf_common_length_get())
204 *
205 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
206 */
207static inline Eina_Bool
208_eina_strbuf_common_insert_length(size_t csize,
209 Eina_Strbuf *buf,
210 const void *str,
211 size_t len,
212 size_t pos)
213{
214 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len)))
215 return EINA_FALSE;
216
217 /* move the existing text */
218 memmove(((unsigned char *)(buf->buf)) + ((len + pos) * csize),
219 ((unsigned char *)(buf->buf)) + (pos * csize),
220 (buf->len - pos) * csize);
221
222 /* and now insert the given string */
223 memcpy((unsigned char *)buf->buf + (pos * csize), str, len * csize);
224
225 buf->len += len;
226 memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize);
227 return EINA_TRUE;
228}
229
230/*============================================================================*
231* API *
232*============================================================================*/
233
234/**
235 * @internal
236 * @brief Create a new string buffer.
237 *
238 * @param csize the character size
239 * @return Newly allocated string buffer instance.
240 *
241 * This function creates a new string buffer. On error, @c NULL is
242 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
243 * free the resources, use eina_strbuf_common_free().
244 *
245 * @see eina_strbuf_common_free()
246 * @see eina_strbuf_common_append()
247 * @see eina_strbuf_common_string_get()
248 */
249Eina_Strbuf *
250eina_strbuf_common_new(size_t csize)
251{
252 Eina_Strbuf *buf;
253
254 eina_error_set(0);
255 buf = malloc(sizeof(Eina_Strbuf));
256 if (EINA_UNLIKELY(!buf))
257 {
258 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
259 return NULL;
260 }
261 if (EINA_UNLIKELY(!_eina_strbuf_common_init(csize, buf)))
262 {
263 eina_strbuf_common_free(buf);
264 return NULL;
265 }
266 return buf;
267}
268
269/**
270 * @internal
271 * @brief Create a new string buffer managing str.
272 *
273 * @param csize the character size
274 * @param str the string to manage
275 * @param len the length of the string to manage
276 * @return Newly allocated string buffer instance.
277 *
278 * This function creates a new string buffer. On error, @c NULL is
279 * returned and Eina error is set to #EINA_ERROR_OUT_OF_MEMORY. To
280 * free the resources, use eina_strbuf_common_free().
281 *
282 * @see eina_strbuf_common_free()
283 * @see eina_strbuf_common_append()
284 * @see eina_strbuf_common_string_get()
285 * @since 1.1.0
286 */
287Eina_Strbuf *
288eina_strbuf_common_manage_new(size_t csize,
289 void *str,
290 size_t len)
291{
292 Eina_Strbuf *buf;
293
294 eina_error_set(0);
295 buf = malloc(sizeof(Eina_Strbuf));
296 if (EINA_UNLIKELY(!buf))
297 {
298 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
299 return NULL;
300 }
301 if (EINA_UNLIKELY(!_eina_strbuf_common_manage_init(csize, buf, str, len)))
302 {
303 eina_strbuf_common_free(buf);
304 return NULL;
305 }
306 return buf;
307}
308
309/**
310 * @internal
311 * @brief Free a string buffer.
312 *
313 * @param buf The string buffer to free.
314 *
315 * This function frees the memory of @p buf. @p buf must have been
316 * created by eina_strbuf_common_new().
317 */
318void
319eina_strbuf_common_free(Eina_Strbuf *buf)
320{
321 free(buf->buf);
322 free(buf);
323}
324
325/**
326 * @internal
327 * @brief Reset a string buffer.
328 *
329 * @param csize the character size
330 * @param buf The string buffer to reset.
331 *
332 * This function reset @p buf: the buffer len is set to 0, and the
333 * string is set to '\\0'. No memory is free'd.
334 */
335void
336eina_strbuf_common_reset(size_t csize, Eina_Strbuf *buf)
337{
338 buf->len = 0;
339 buf->step = EINA_STRBUF_INIT_STEP;
340 memset(buf->buf, 0, csize);
341}
342
343/**
344 * @internal
345 * @brief Append a string to a buffer, reallocating as necessary.
346 *
347 * @param csize the character size
348 * @param buf The string buffer to append to.
349 * @param str The string to append.
350 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
351 *
352 * This function appends @p str to @p buf. It computes the length of
353 * @p str, so is slightly slower than eina_strbuf_common_append_length(). If
354 * the length is known beforehand, consider using that variant. If
355 * @p buf can't append it, #EINA_FALSE is returned, otherwise
356 * #EINA_TRUE is returned.
357 *
358 * @see eina_strbuf_common_append()
359 * @see eina_strbuf_common_append_length()
360 */
361Eina_Bool
362eina_strbuf_common_append(size_t csize,
363 Eina_Strbuf *buf,
364 const void *str,
365 size_t len)
366{
367 EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
368
369 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len)))
370 return EINA_FALSE;
371 memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
372 (len + 1) * csize);
373 buf->len += len;
374 return EINA_TRUE;
375}
376
377/**
378 * @internal
379 * @brief Append a string to a buffer, reallocating as necessary,
380 * limited by the given length.
381 *
382 * @param csize the character size
383 * @param buf The string buffer to append to.
384 * @param str The string to append.
385 * @param maxlen The maximum number of characters to append.
386 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
387 *
388 * This function appends at most @p maxlen characters of @p str to
389 * @p buf. It can't appends more than the length of @p str. It
390 * computes the length of @p str, so is slightly slower than
391 * eina_strbuf_common_append_length(). If the length is known beforehand,
392 * consider using that variant (@p maxlen should then be checked so
393 * that it is greater than the size of @p str). If @p str can not be
394 * appended, #EINA_FALSE is returned, otherwise, #EINA_TRUE is
395 * returned.
396 *
397 * @see eina_strbuf_common_append()
398 * @see eina_strbuf_common_append_length()
399 */
400Eina_Bool
401eina_strbuf_common_append_n(size_t csize,
402 Eina_Strbuf *buf,
403 const void *str,
404 size_t len,
405 size_t maxlen)
406{
407 EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
408
409 if (len > maxlen) len = maxlen;
410 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + len)))
411 return EINA_FALSE;
412 memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
413 len * csize);
414 buf->len += len;
415 memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize);
416 return EINA_TRUE;
417}
418
419/**
420 * @internal
421 * @brief Append a string of exact length to a buffer, reallocating as necessary.
422 *
423 * @param csize the character size
424 * @param buf The string buffer to append to.
425 * @param str The string to append.
426 * @param length The exact length to use.
427 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
428 *
429 * This function appends @p str to @p buf. @p str must be of size at
430 * most @p length. It is slightly faster than eina_strbuf_common_append() as
431 * it does not compute the size of @p str. It is useful when dealing
432 * with strings of known size, such as eina_strngshare. If @p buf
433 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
434 * returned.
435 *
436 * @see eina_stringshare_length()
437 * @see eina_strbuf_common_append()
438 * @see eina_strbuf_common_append_n()
439 */
440Eina_Bool
441eina_strbuf_common_append_length(size_t csize,
442 Eina_Strbuf *buf,
443 const void *str,
444 size_t length)
445{
446 EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
447
448 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + length)))
449 return EINA_FALSE;
450 memcpy(((unsigned char *)(buf->buf)) + (buf->len * csize), str,
451 length * csize);
452 buf->len += length;
453 memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize);
454 return EINA_TRUE;
455}
456
457/**
458 * @internal
459 * @brief Insert a string to a buffer, reallocating as necessary.
460 *
461 * @param csize the character size
462 * @param buf The string buffer to insert.
463 * @param str The string to insert.
464 * @param pos The position to insert the string.
465 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
466 *
467 * This function inserts @p str to @p buf at position @p pos. It
468 * computes the length of @p str, so is slightly slower than
469 * eina_strbuf_common_insert_length(). If the length is known beforehand,
470 * consider using that variant. If @p buf can't insert it, #EINA_FALSE
471 * is returned, otherwise #EINA_TRUE is returned.
472 */
473Eina_Bool
474eina_strbuf_common_insert(size_t csize,
475 Eina_Strbuf *buf,
476 const void *str,
477 size_t len,
478 size_t pos)
479{
480 EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
481
482 if (pos >= buf->len) return eina_strbuf_common_append(csize, buf, str, len);
483 return _eina_strbuf_common_insert_length(csize, buf, str, len, pos);
484}
485
486/**
487 * @internal
488 * @brief Insert a string to a buffer, reallocating as necessary. Limited by maxlen.
489 *
490 * @param csize the character size
491 * @param buf The string buffer to insert to.
492 * @param str The string to insert.
493 * @param maxlen The maximum number of chars to insert.
494 * @param pos The position to insert the string.
495 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
496 *
497 * This function inserts @p str ot @p buf at position @p pos, with at
498 * most @p maxlen bytes. The number of inserted characters can not be
499 * greater than the length of @p str. It computes the length of
500 * @p str, so is slightly slower than eina_strbuf_common_insert_length(). If the
501 * length is known beforehand, consider using that variant (@p maxlen
502 * should then be checked so that it is greater than the size of
503 * @p str). If @p str can not be inserted, #EINA_FALSE is returned,
504 * otherwise, #EINA_TRUE is returned.
505 */
506Eina_Bool
507eina_strbuf_common_insert_n(size_t csize,
508 Eina_Strbuf *buf,
509 const void *str,
510 size_t len,
511 size_t maxlen,
512 size_t pos)
513{
514 EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
515
516 if (pos >= buf->len)
517 return eina_strbuf_common_append_n(csize, buf, str, len, maxlen);
518 if (len > maxlen) len = maxlen;
519 return _eina_strbuf_common_insert_length(csize, buf, str, len, pos);
520}
521
522/**
523 * @internal
524 * @brief Insert a string of exact length to a buffer, reallocating as necessary.
525 *
526 * @param csize the character size
527 * @param buf The string buffer to insert to.
528 * @param str The string to insert.
529 * @param length The exact length to use.
530 * @param pos The position to insert the string.
531 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
532 *
533 * This function inserts @p str to @p buf. @p str must be of size at
534 * most @p length. It is slightly faster than eina_strbuf_common_insert() as
535 * it does not compute the size of @p str. It is useful when dealing
536 * with strings of known size, such as eina_strngshare. If @p buf
537 * can't insert it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
538 * returned.
539 *
540 * @see eina_stringshare_length()
541 * @see eina_strbuf_common_insert()
542 * @see eina_strbuf_common_insert_n()
543 */
544Eina_Bool
545eina_strbuf_common_insert_length(size_t csize,
546 Eina_Strbuf *buf,
547 const void *str,
548 size_t length,
549 size_t pos)
550{
551 EINA_SAFETY_ON_NULL_RETURN_VAL(str, EINA_FALSE);
552
553 if (pos >= buf->len)
554 return eina_strbuf_common_append_length(csize, buf, str, length);
555 return _eina_strbuf_common_insert_length(csize, buf, str, length, pos);
556}
557
558/**
559 * @internal
560 * @brief Append a character to a string buffer, reallocating as
561 * necessary.
562 *
563 * @param csize the character size
564 * @param buf The string buffer to append to.
565 * @param c The char to append.
566 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
567 *
568 * This function inserts @p c to @p buf. If it can not insert it,
569 * #EINA_FALSE is returned, otherwise #EINA_TRUE is returned.
570 */
571Eina_Bool
572eina_strbuf_common_append_char(size_t csize, Eina_Strbuf *buf, const void *c)
573{
574 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(csize, buf, buf->len + 1)))
575 return EINA_FALSE;
576
577 memcpy(((unsigned char *)(buf->buf)) + ((buf->len)++ *csize), c, csize);
578 memset(((unsigned char *)(buf->buf)) + (buf->len * csize), 0, csize);
579 return EINA_TRUE;
580}
581
582/**
583 * @internal
584 * @brief Insert a character to a string buffer, reallocating as
585 * necessary.
586 *
587 * @param csize the character size
588 * @param buf The string buffer to insert to.
589 * @param c The char to insert.
590 * @param pos The position to insert the char.
591 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
592 *
593 * This function inserts @p c to @p buf at position @p pos. If @p buf
594 * can't append it, #EINA_FALSE is returned, otherwise #EINA_TRUE is
595 * returned.
596 */
597Eina_Bool
598eina_strbuf_common_insert_char(size_t csize,
599 Eina_Strbuf *buf,
600 const void *c,
601 size_t pos)
602{
603 if (pos >= buf->len)
604 return eina_strbuf_common_append_char(csize, buf, c);
605 return _eina_strbuf_common_insert_length(csize, buf, c, 1, pos);
606}
607
608/**
609 * @internal
610 * @brief Remove a slice of the given string buffer.
611 *
612 * @param csize the character size
613 * @param buf The string buffer to remove a slice.
614 * @param start The initial (inclusive) slice position to start
615 * removing, in bytes.
616 * @param end The final (non-inclusive) slice position to finish
617 * removing, in bytes.
618 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
619 *
620 * This function removes a slice of @p buf, starting at @p start
621 * (inclusive) and ending at @p end (non-inclusive). Both values are
622 * in bytes. It returns #EINA_FALSE on failure, #EINA_TRUE otherwise.
623 */
624Eina_Bool
625eina_strbuf_common_remove(size_t csize,
626 Eina_Strbuf *buf,
627 size_t start,
628 size_t end)
629{
630 size_t remove_len, tail_len;
631
632 if (end >= buf->len) end = buf->len;
633 if (end <= start) return EINA_TRUE;
634
635 remove_len = end - start;
636 if (remove_len == buf->len)
637 {
638 free(buf->buf);
639 return _eina_strbuf_common_init(csize, buf);
640 }
641
642 tail_len = buf->len - end + 1; /* includes '\0' */
643 memmove(((unsigned char *)(buf->buf)) + (start * csize),
644 ((unsigned char *)(buf->buf)) + (end * csize),
645 tail_len * csize);
646 buf->len -= remove_len;
647 return _eina_strbuf_common_resize(csize, buf, buf->len);
648}
649
650/**
651 * @internal
652 * @brief Retrieve a pointer to the contents of a string buffer
653 *
654 * @param buf The string buffer.
655 * @return The current string in the string buffer.
656 *
657 * This function returns the string contained in @p buf. The returned
658 * value must not be modified and will no longer be valid if @p buf is
659 * modified. In other words, any eina_strbuf_common_append() or similar will
660 * make that pointer invalid.
661 *
662 * @see eina_strbuf_common_string_steal()
663 */
664const void *
665eina_strbuf_common_string_get(const Eina_Strbuf *buf)
666{
667 return buf->buf;
668}
669
670/**
671 * @internal
672 * @brief Steal the contents of a string buffer.
673 *
674 * @param csize the character size
675 * @param buf The string buffer to steal.
676 * @return The current string in the string buffer.
677 *
678 * This function returns the string contained in @p buf. @p buf is
679 * then initialized and does not own the returned string anymore. The
680 * caller must release the memory of the returned string by calling
681 * free().
682 *
683 * @see eina_strbuf_common_string_get()
684 */
685void *
686eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf *buf)
687{
688 void *ret;
689
690 ret = buf->buf;
691 // TODO: Check return value and do something clever
692 _eina_strbuf_common_init(csize, buf);
693 return ret;
694}
695
696/**
697 * @internal
698 * @brief Free the contents of a string buffer but not the buffer.
699 *
700 * @param csize the character size
701 * @param buf The string buffer to free the string of.
702 *
703 * This function frees the string contained in @p buf without freeing
704 * @p buf.
705 */
706void
707eina_strbuf_common_string_free(size_t csize, Eina_Strbuf *buf)
708{
709 free(buf->buf);
710 _eina_strbuf_common_init(csize, buf);
711}
712
713/**
714 * @internal
715 * @brief Retrieve the length of the string buffer content.
716 *
717 * @param buf The string buffer.
718 * @return The current length of the string, in bytes.
719 *
720 * This function returns the length of @p buf.
721 */
722size_t
723eina_strbuf_common_length_get(const Eina_Strbuf *buf)
724{
725 return buf->len;
726}
727
728/**
729 * @cond LOCAL
730 */
731
732/*FIXME: Implementing them here is a hack! */
733
734#ifdef _STRBUF_CSIZE
735# undef _STRBUF_CSIZE
736#endif
737
738#ifdef _STRBUF_MAGIC
739# undef _STRBUF_MAGIC
740#endif
741
742#ifdef _STRBUF_MAGIC_STR
743# undef _STRBUF_MAGIC_STR
744#endif
745
746#define _STRBUF_CSIZE 1
747#define _STRBUF_MAGIC EINA_MAGIC_STRBUF
748#define _STRBUF_MAGIC_STR __STRBUF_STR_MAGIC_STR
749static const char __STRBUF_STR_MAGIC_STR[] = "Eina Strbuf";
750
751
752/**
753 * @endcond
754 */
755
756
757EAPI Eina_Bool
758eina_strbuf_replace(Eina_Strbuf *buf,
759 const char *str,
760 const char *with,
761 unsigned int n)
762{
763 size_t len1, len2;
764 char *spos;
765 size_t pos;
766
767 EINA_SAFETY_ON_NULL_RETURN_VAL( str, EINA_FALSE);
768 EINA_SAFETY_ON_NULL_RETURN_VAL(with, EINA_FALSE);
769 EINA_MAGIC_CHECK_STRBUF(buf, 0);
770 if (n == 0) return EINA_FALSE;
771
772 spos = buf->buf;
773 while (n--)
774 {
775 spos = strstr(spos, str);
776 if (!spos || *spos == '\0') return EINA_FALSE;
777 if (n) spos++;
778 }
779
780 pos = spos - (const char *)buf->buf;
781 len1 = strlen(str);
782 len2 = strlen(with);
783 if (len1 != len2)
784 {
785 /* resize the buffer if necessary */
786 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf,
787 buf->len - len1 + len2)))
788 return EINA_FALSE; /* move the existing text */
789 memmove(((unsigned char *)(buf->buf)) + pos + len2,
790 ((unsigned char *)(buf->buf)) + pos + len1,
791 buf->len - pos - len1);
792 }
793 /* and now insert the given string */
794 memcpy(((unsigned char *)(buf->buf)) + pos, with, len2);
795 buf->len += len2 - len1;
796 memset(((unsigned char *)(buf->buf)) + buf->len, 0, 1);
797 return EINA_TRUE;
798}
799
800EAPI int
801eina_strbuf_replace_all(Eina_Strbuf *buf, const char *str, const char *with)
802{
803 size_t len1, len2, len;
804 char *tmp_buf = NULL;
805 char *spos;
806 size_t pos, start;
807 size_t pos_tmp, start_tmp;
808 int n = 0;
809
810 EINA_SAFETY_ON_NULL_RETURN_VAL( str, 0);
811 EINA_SAFETY_ON_NULL_RETURN_VAL(with, 0);
812 EINA_MAGIC_CHECK_STRBUF(buf, 0);
813
814 spos = strstr(buf->buf, str);
815 if (!spos || *spos == '\0') return 0;
816 len1 = strlen(str);
817 len2 = strlen(with);
818 /* if the size of the two string is equal, it is fairly easy to replace them
819 * we don't need to resize the buffer or doing other calculations */
820 if (len1 == len2)
821 {
822 while (spos)
823 {
824 memcpy(spos, with, len2);
825 spos = strstr(spos + len2, str);
826 n++;
827 }
828 return n;
829 }
830 pos = pos_tmp = spos - (const char *)buf->buf;
831 tmp_buf = buf->buf;
832 buf->buf = malloc(buf->size);
833 if (EINA_UNLIKELY(!buf->buf))
834 {
835 buf->buf = tmp_buf;
836 return 0;
837 }
838 start = start_tmp = 0;
839 len = buf->len;
840 while (spos)
841 {
842 n++;
843 len = (len + len2) - len1;
844 /* resize the buffer if necessary */
845 if (EINA_UNLIKELY(!_eina_strbuf_common_grow(_STRBUF_CSIZE, buf, len)))
846 {
847 /* we have to stop replacing here, because we haven't enough
848 * memory to go on */
849 len = (len + len1) - len2;
850 break;
851 }
852 /* copy the untouched text */
853 memcpy(((unsigned char *)(buf->buf)) + start, tmp_buf + start_tmp,
854 pos - start);
855 /* copy the new string */
856 memcpy(((unsigned char *)(buf->buf)) + pos, with, len2);
857 /* calculate the next positions */
858 start_tmp = pos_tmp + len1;
859 start = pos + len2;
860 spos = strstr(tmp_buf + start_tmp, str);
861 /* this calculations don't make sense if spos == NULL, but the
862 * calculated values won't be used, because the loop will stop
863 * then */
864 pos_tmp = spos - tmp_buf;
865 pos = start + pos_tmp - start_tmp;
866 }
867 /* and now copy the rest of the text */
868 memcpy(((unsigned char *)(buf->buf)) + start, tmp_buf + start_tmp,
869 len - start);
870 buf->len = len;
871 memset(((unsigned char *)(buf->buf)) + buf->len, 0, 1);
872 free(tmp_buf);
873 return n;
874}
diff --git a/libraries/eina/src/lib/eina_strbuf_common.h b/libraries/eina/src/lib/eina_strbuf_common.h
new file mode 100644
index 0000000..06a1353
--- /dev/null
+++ b/libraries/eina/src/lib/eina_strbuf_common.h
@@ -0,0 +1,120 @@
1#ifndef EINA_STRBUF_COMMON_H
2#define EINA_STRBUF_COMMON_H
3
4#include <stdlib.h>
5
6#include "eina_private.h"
7#include "eina_magic.h"
8#include "eina_strbuf.h"
9
10/**
11 * @struct _Eina_Strbuf
12 * String buffer to facilitate string operations.
13 */
14struct _Eina_Strbuf
15{
16 void *buf;
17 size_t len;
18 size_t size;
19 size_t step;
20
21 EINA_MAGIC
22};
23
24#define EINA_MAGIC_CHECK_STRBUF(d, ...) \
25 do { \
26 if (!EINA_MAGIC_CHECK((d), _STRBUF_MAGIC)) \
27 { \
28 EINA_MAGIC_FAIL((d), _STRBUF_MAGIC); \
29 return __VA_ARGS__; \
30 } \
31 } while (0)
32
33Eina_Bool
34eina_strbuf_common_init(void);
35
36Eina_Bool
37eina_strbuf_common_shutdown(void);
38Eina_Strbuf *
39eina_strbuf_common_new(size_t csize);
40Eina_Strbuf *
41eina_strbuf_common_manage_new(size_t csize,
42 void *str,
43 size_t len);
44void
45eina_strbuf_common_free(Eina_Strbuf *buf);
46void
47eina_strbuf_common_reset(size_t csize, Eina_Strbuf *buf);
48Eina_Bool
49eina_strbuf_common_append(size_t csize,
50 Eina_Strbuf *buf,
51 const void *str,
52 size_t len);
53Eina_Bool
54eina_strbuf_common_append_escaped(size_t csize,
55 Eina_Strbuf *buf,
56 const void *str);
57Eina_Bool
58eina_strbuf_common_append_n(size_t csize,
59 Eina_Strbuf *buf,
60 const void *str,
61 size_t len,
62 size_t maxlen);
63Eina_Bool
64eina_strbuf_common_append_length(size_t csize,
65 Eina_Strbuf *buf,
66 const void *str,
67 size_t length);
68Eina_Bool
69eina_strbuf_common_insert(size_t csize,
70 Eina_Strbuf *buf,
71 const void *str,
72 size_t len,
73 size_t pos);
74Eina_Bool
75eina_strbuf_common_insert_escaped(size_t csize,
76 Eina_Strbuf *buf,
77 const void *str,
78 size_t len,
79 size_t pos);
80Eina_Bool
81eina_strbuf_common_insert_n(size_t csize,
82 Eina_Strbuf *buf,
83 const void *str,
84 size_t len,
85 size_t maxlen,
86 size_t pos);
87Eina_Bool
88eina_strbuf_common_insert_length(size_t csize,
89 Eina_Strbuf *buf,
90 const void *str,
91 size_t length,
92 size_t pos);
93Eina_Bool
94eina_strbuf_common_append_char(size_t csize, Eina_Strbuf *buf, const void *c);
95Eina_Bool
96eina_strbuf_common_insert_char(size_t csize,
97 Eina_Strbuf *buf,
98 const void *c,
99 size_t pos);
100Eina_Bool
101eina_strbuf_common_remove(size_t csize,
102 Eina_Strbuf *buf,
103 size_t start,
104 size_t end);
105const void *
106eina_strbuf_common_string_get(const Eina_Strbuf *buf);
107void *
108eina_strbuf_common_string_steal(size_t csize, Eina_Strbuf *buf);
109void
110eina_strbuf_common_string_free(size_t csize, Eina_Strbuf *buf);
111size_t
112eina_strbuf_common_length_get(const Eina_Strbuf *buf);
113
114Eina_Bool
115_eina_strbuf_common_grow(size_t csize, Eina_Strbuf *buf, size_t size);
116/**
117 * @}
118 */
119
120#endif
diff --git a/libraries/eina/src/lib/eina_strbuf_template_c.x b/libraries/eina/src/lib/eina_strbuf_template_c.x
new file mode 100644
index 0000000..e8c3b61
--- /dev/null
+++ b/libraries/eina/src/lib/eina_strbuf_template_c.x
@@ -0,0 +1,97 @@
1/*
2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
3 */
4
5/* This file should be included from files implementing strbuf.
6 The including file should define the following macros:
7 * _STRBUF_DATA_TYPE
8 * _STRBUF_CSIZE
9 * _STRBUF_STRUCT_NAME
10 * _STRBUF_STRLEN_FUNC(x)
11 * _STRBUF_STRESCAPE_FUNC(x)
12 * _STRBUF_STRSTR_FUNC(x, y)
13 * _STRBUF_MAGIC
14 * _STRBUF_MAGIC_STR
15 * See how it's done in eina_ustrbuf.c and eina_strbuf.c. This just makes things
16 * a lot easier since those are essentially the same just with different sizes.
17 */
18
19#include "eina_binbuf_template_c.x"
20
21/*============================================================================*
22 * API *
23 *============================================================================*/
24
25EAPI _STRBUF_STRUCT_NAME *
26_FUNC_EXPAND(manage_new)(_STRBUF_DATA_TYPE *str)
27{
28 _STRBUF_STRUCT_NAME *buf = eina_strbuf_common_manage_new(_STRBUF_CSIZE,
29 (void *) str, _STRBUF_STRLEN_FUNC(str));
30 EINA_MAGIC_SET(buf, _STRBUF_MAGIC);
31 return buf;
32}
33
34EAPI Eina_Bool
35_FUNC_EXPAND(append)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str)
36{
37 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
38 return eina_strbuf_common_append(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str));
39}
40
41EAPI Eina_Bool
42_FUNC_EXPAND(append_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str)
43{
44 _STRBUF_DATA_TYPE *esc;
45 Eina_Bool ret;
46
47 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
48 esc = _STRBUF_STRESCAPE_FUNC(str);
49 if (!esc) {
50 return _FUNC_EXPAND(append)(buf, str);
51 }
52 ret = _FUNC_EXPAND(append)(buf, esc);
53 if (esc)
54 free(esc);
55
56 return ret;
57}
58
59EAPI Eina_Bool
60_FUNC_EXPAND(append_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen)
61{
62 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
63 return eina_strbuf_common_append_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen);
64}
65
66EAPI Eina_Bool
67_FUNC_EXPAND(insert)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos)
68{
69 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
70 return eina_strbuf_common_insert(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), pos);
71}
72
73EAPI Eina_Bool
74_FUNC_EXPAND(insert_escaped)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t pos)
75{
76 _STRBUF_DATA_TYPE *esc;
77 Eina_Bool ret;
78 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
79
80 esc = _STRBUF_STRESCAPE_FUNC(str);
81 if (!esc) {
82 return _FUNC_EXPAND(insert)(buf, str, pos);
83 }
84 ret = _FUNC_EXPAND(insert)(buf, esc, pos);
85 if (esc)
86 free(esc);
87
88 return ret;
89}
90
91EAPI Eina_Bool
92_FUNC_EXPAND(insert_n)(_STRBUF_STRUCT_NAME *buf, const _STRBUF_DATA_TYPE *str, size_t maxlen, size_t pos)
93{
94 EINA_MAGIC_CHECK_STRBUF(buf, EINA_FALSE);
95 return eina_strbuf_common_insert_n(_STRBUF_CSIZE, buf, (const void *) str, _STRBUF_STRLEN_FUNC(str), maxlen, pos);
96}
97
diff --git a/libraries/eina/src/lib/eina_stringshare.c b/libraries/eina/src/lib/eina_stringshare.c
new file mode 100644
index 0000000..478b300
--- /dev/null
+++ b/libraries/eina/src/lib/eina_stringshare.c
@@ -0,0 +1,751 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2010
3 * Carsten Haitzler,
4 * Jorge Luis Zapata Muga,
5 * Cedric Bail,
6 * Gustavo Sverzut Barbieri
7 * Tom Hacohen
8 * Brett Nash
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with this library;
22 * if not, see <http://www.gnu.org/licenses/>.
23 */
24
25#ifdef HAVE_CONFIG_H
26# include "config.h"
27#endif
28
29#ifdef HAVE_ALLOCA_H
30# include <alloca.h>
31#elif defined __GNUC__
32# define alloca __builtin_alloca
33#elif defined _AIX
34# define alloca __alloca
35#elif defined _MSC_VER
36# include <malloc.h>
37# define alloca _alloca
38#else
39# include <stddef.h>
40# ifdef __cplusplus
41extern "C"
42# endif
43void *alloca (size_t);
44#endif
45
46#include <stdlib.h>
47#include <stdio.h>
48#include <string.h>
49
50#ifdef HAVE_EVIL
51# include <Evil.h>
52#endif
53
54#include "eina_config.h"
55#include "eina_private.h"
56#include "eina_error.h"
57#include "eina_log.h"
58#include "eina_stringshare.h"
59#include "eina_lock.h"
60
61/* undefs EINA_ARG_NONULL() so NULL checks are not compiled out! */
62#include "eina_safety_checks.h"
63#include "eina_share_common.h"
64
65/* The actual share */
66static Eina_Share *stringshare_share;
67static const char EINA_MAGIC_STRINGSHARE_NODE_STR[] = "Eina Stringshare Node";
68
69extern Eina_Bool _share_common_threads_activated;
70static Eina_Lock _mutex_small;
71
72/* Stringshare optimizations */
73static const unsigned char _eina_stringshare_single[512] = {
74 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,
75 16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,
76 31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,
77 46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,55,0,56,0,57,0,58,0,59,0,60,0,
78 61,0,62,0,63,0,64,0,65,0,66,0,67,0,68,0,69,0,70,0,71,0,72,0,73,0,74,0,75,0,
79 76,0,77,0,78,0,79,0,80,0,81,0,82,0,83,0,84,0,85,0,86,0,87,0,88,0,89,0,90,0,
80 91,0,92,0,93,0,94,0,95,0,96,0,97,0,98,0,99,0,100,0,101,0,102,0,103,0,104,0,
81 105,0,
82 106,0,107,0,108,0,109,0,110,0,111,0,112,0,113,0,114,0,115,0,116,0,117,0,118,
83 0,119,0,120,0,
84 121,0,122,0,123,0,124,0,125,0,126,0,127,0,128,0,129,0,130,0,131,0,132,0,133,
85 0,134,0,135,0,
86 136,0,137,0,138,0,139,0,140,0,141,0,142,0,143,0,144,0,145,0,146,0,147,0,148,
87 0,149,0,150,0,
88 151,0,152,0,153,0,154,0,155,0,156,0,157,0,158,0,159,0,160,0,161,0,162,0,163,
89 0,164,0,165,0,
90 166,0,167,0,168,0,169,0,170,0,171,0,172,0,173,0,174,0,175,0,176,0,177,0,178,
91 0,179,0,180,0,
92 181,0,182,0,183,0,184,0,185,0,186,0,187,0,188,0,189,0,190,0,191,0,192,0,193,
93 0,194,0,195,0,
94 196,0,197,0,198,0,199,0,200,0,201,0,202,0,203,0,204,0,205,0,206,0,207,0,208,
95 0,209,0,210,0,
96 211,0,212,0,213,0,214,0,215,0,216,0,217,0,218,0,219,0,220,0,221,0,222,0,223,
97 0,224,0,225,0,
98 226,0,227,0,228,0,229,0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,0,238,
99 0,239,0,240,0,
100 241,0,242,0,243,0,244,0,245,0,246,0,247,0,248,0,249,0,250,0,251,0,252,0,253,
101 0,254,0,255,0
102};
103
104typedef struct _Eina_Stringshare_Small Eina_Stringshare_Small;
105typedef struct _Eina_Stringshare_Small_Bucket Eina_Stringshare_Small_Bucket;
106
107struct _Eina_Stringshare_Small_Bucket
108{
109 /* separate arrays for faster lookups */
110 const char **strings;
111 unsigned char *lengths;
112 unsigned short *references;
113 int count;
114 int size;
115};
116
117struct _Eina_Stringshare_Small
118{
119 Eina_Stringshare_Small_Bucket *buckets[256];
120};
121
122#define EINA_STRINGSHARE_SMALL_BUCKET_STEP 8
123static Eina_Stringshare_Small _eina_small_share;
124
125static inline int
126_eina_stringshare_small_cmp(const Eina_Stringshare_Small_Bucket *bucket,
127 int i,
128 const char *pstr,
129 unsigned char plength)
130{
131 /* pstr and plength are from second char and on, since the first is
132 * always the same.
133 *
134 * First string being always the same, size being between 2 and 3
135 * characters (there is a check for special case length==1 and then
136 * small stringshare is applied to strings < 4), we just need to
137 * compare 2 characters of both strings.
138 */
139 const unsigned char cur_plength = bucket->lengths[i] - 1;
140 const char *cur_pstr;
141
142 if (cur_plength > plength)
143 return 1;
144 else if (cur_plength < plength)
145 return -1;
146
147 cur_pstr = bucket->strings[i] + 1;
148
149 if (cur_pstr[0] > pstr[0])
150 return 1;
151 else if (cur_pstr[0] < pstr[0])
152 return -1;
153
154 if (plength == 1)
155 return 0;
156
157 if (cur_pstr[1] > pstr[1])
158 return 1;
159 else if (cur_pstr[1] < pstr[1])
160 return -1;
161
162 return 0;
163}
164
165static const char *
166_eina_stringshare_small_bucket_find(const Eina_Stringshare_Small_Bucket *bucket,
167 const char *str,
168 unsigned char length,
169 int *idx)
170{
171 const char *pstr = str + 1; /* skip first letter, it's always the same */
172 unsigned char plength = length - 1;
173 int i, low, high;
174
175 if (bucket->count == 0)
176 {
177 *idx = 0;
178 return NULL;
179 }
180
181 low = 0;
182 high = bucket->count;
183
184 while (low < high)
185 {
186 int r;
187
188 i = (low + high - 1) / 2;
189
190 r = _eina_stringshare_small_cmp(bucket, i, pstr, plength);
191 if (r > 0)
192 high = i;
193 else if (r < 0)
194 low = i + 1;
195 else
196 {
197 *idx = i;
198 return bucket->strings[i];
199 }
200 }
201
202 *idx = low;
203 return NULL;
204}
205
206static Eina_Bool
207_eina_stringshare_small_bucket_resize(Eina_Stringshare_Small_Bucket *bucket,
208 int size)
209{
210 void *tmp;
211
212 tmp = realloc((void *)bucket->strings, size * sizeof(bucket->strings[0]));
213 if (!tmp)
214 {
215 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
216 return 0;
217 }
218
219 bucket->strings = tmp;
220
221 tmp = realloc(bucket->lengths, size * sizeof(bucket->lengths[0]));
222 if (!tmp)
223 {
224 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
225 return 0;
226 }
227
228 bucket->lengths = tmp;
229
230 tmp = realloc(bucket->references, size * sizeof(bucket->references[0]));
231 if (!tmp)
232 {
233 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
234 return 0;
235 }
236
237 bucket->references = tmp;
238
239 bucket->size = size;
240 return 1;
241}
242
243static const char *
244_eina_stringshare_small_bucket_insert_at(
245 Eina_Stringshare_Small_Bucket **p_bucket,
246 const char *str,
247 unsigned char length,
248 int idx)
249{
250 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
251 int todo, off;
252 char *snew;
253
254 if (!bucket)
255 {
256 *p_bucket = bucket = calloc(1, sizeof(*bucket));
257 if (!bucket)
258 {
259 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
260 return NULL;
261 }
262 }
263
264 if (bucket->count + 1 >= bucket->size)
265 {
266 int size = bucket->size + EINA_STRINGSHARE_SMALL_BUCKET_STEP;
267 if (!_eina_stringshare_small_bucket_resize(bucket, size))
268 return NULL;
269 }
270
271 snew = malloc(length + 1);
272 if (!snew)
273 {
274 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
275 return NULL;
276 }
277
278 memcpy(snew, str, length);
279 snew[length] = '\0';
280
281 off = idx + 1;
282 todo = bucket->count - idx;
283 if (todo > 0)
284 {
285 memmove((void *)(bucket->strings + off), bucket->strings + idx,
286 todo * sizeof(bucket->strings[0]));
287 memmove(bucket->lengths + off, bucket->lengths + idx,
288 todo * sizeof(bucket->lengths[0]));
289 memmove(bucket->references + off, bucket->references + idx,
290 todo * sizeof(bucket->references[0]));
291 }
292
293 bucket->strings[idx] = snew;
294 bucket->lengths[idx] = length;
295 bucket->references[idx] = 1;
296 bucket->count++;
297
298 return snew;
299}
300
301static void
302_eina_stringshare_small_bucket_remove_at(
303 Eina_Stringshare_Small_Bucket **p_bucket,
304 int idx)
305{
306 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
307 int todo, off;
308
309 if (bucket->references[idx] > 1)
310 {
311 bucket->references[idx]--;
312 return;
313 }
314
315 free((char *)bucket->strings[idx]);
316
317 if (bucket->count == 1)
318 {
319 free((void *)bucket->strings);
320 free(bucket->lengths);
321 free(bucket->references);
322 free(bucket);
323 *p_bucket = NULL;
324 return;
325 }
326
327 bucket->count--;
328 if (idx == bucket->count)
329 goto end;
330
331 off = idx + 1;
332 todo = bucket->count - idx;
333
334 memmove((void *)(bucket->strings + idx), bucket->strings + off,
335 todo * sizeof(bucket->strings[0]));
336 memmove(bucket->lengths + idx, bucket->lengths + off,
337 todo * sizeof(bucket->lengths[0]));
338 memmove(bucket->references + idx, bucket->references + off,
339 todo * sizeof(bucket->references[0]));
340
341end:
342 if (bucket->count + EINA_STRINGSHARE_SMALL_BUCKET_STEP < bucket->size)
343 {
344 int size = bucket->size - EINA_STRINGSHARE_SMALL_BUCKET_STEP;
345 _eina_stringshare_small_bucket_resize(bucket, size);
346 }
347}
348
349static const char *
350_eina_stringshare_small_add(const char *str, unsigned char length)
351{
352 Eina_Stringshare_Small_Bucket **bucket;
353 int i;
354
355 bucket = _eina_small_share.buckets + (unsigned char)str[0];
356 if (!*bucket)
357 i = 0;
358 else
359 {
360 const char *ret;
361 ret = _eina_stringshare_small_bucket_find(*bucket, str, length, &i);
362 if (ret)
363 {
364 (*bucket)->references[i]++;
365 return ret;
366 }
367 }
368
369 return _eina_stringshare_small_bucket_insert_at(bucket, str, length, i);
370}
371
372static void
373_eina_stringshare_small_del(const char *str, unsigned char length)
374{
375 Eina_Stringshare_Small_Bucket **bucket;
376 const char *ret;
377 int i;
378
379 bucket = _eina_small_share.buckets + (unsigned char)str[0];
380 if (!*bucket)
381 goto error;
382
383 ret = _eina_stringshare_small_bucket_find(*bucket, str, length, &i);
384 if (!ret)
385 goto error;
386
387 _eina_stringshare_small_bucket_remove_at(bucket, i);
388 return;
389
390error:
391 CRITICAL("EEEK trying to del non-shared stringshare \"%s\"", str);
392}
393
394static void
395_eina_stringshare_small_init(void)
396{
397 eina_lock_new(&_mutex_small);
398 memset(&_eina_small_share, 0, sizeof(_eina_small_share));
399}
400
401static void
402_eina_stringshare_small_shutdown(void)
403{
404 Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end;
405
406 p_bucket = _eina_small_share.buckets;
407 p_bucket_end = p_bucket + 256;
408
409 for (; p_bucket < p_bucket_end; p_bucket++)
410 {
411 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
412 char **s, **s_end;
413
414 if (!bucket)
415 continue;
416
417 s = (char **)bucket->strings;
418 s_end = s + bucket->count;
419 for (; s < s_end; s++)
420 free(*s);
421
422 free((void *)bucket->strings);
423 free(bucket->lengths);
424 free(bucket->references);
425 free(bucket);
426 *p_bucket = NULL;
427 }
428
429 eina_lock_free(&_mutex_small);
430}
431
432static void
433_eina_stringshare_small_bucket_dump(Eina_Stringshare_Small_Bucket *bucket,
434 struct dumpinfo *di)
435{
436 const char **s = bucket->strings;
437 unsigned char *l = bucket->lengths;
438 unsigned short *r = bucket->references;
439 int i;
440
441 di->used += sizeof(*bucket);
442 di->used += bucket->count * sizeof(*s);
443 di->used += bucket->count * sizeof(*l);
444 di->used += bucket->count * sizeof(*r);
445 di->unique += bucket->count;
446
447 for (i = 0; i < bucket->count; i++, s++, l++, r++)
448 {
449 int dups;
450#ifdef _WIN32
451 printf("DDD: %5hu %5hu '%s'\n", *l, *r, *s);
452#else
453 printf("DDD: %5hhu %5hu '%s'\n", *l, *r, *s);
454#endif
455
456 dups = (*r - 1);
457
458 di->used += *l;
459 di->saved += *l * dups;
460 di->dups += dups;
461 }
462}
463
464static void
465_eina_stringshare_small_dump(struct dumpinfo *di)
466{
467 Eina_Stringshare_Small_Bucket **p_bucket, **p_bucket_end;
468
469 p_bucket = _eina_small_share.buckets;
470 p_bucket_end = p_bucket + 256;
471
472 for (; p_bucket < p_bucket_end; p_bucket++)
473 {
474 Eina_Stringshare_Small_Bucket *bucket = *p_bucket;
475
476 if (!bucket)
477 continue;
478
479 _eina_stringshare_small_bucket_dump(bucket, di);
480 }
481}
482
483
484/*============================================================================*
485* Global *
486*============================================================================*/
487
488/**
489 * @internal
490 * @brief Initialize the share_common module.
491 *
492 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
493 *
494 * This function sets up the share_common module of Eina. It is called by
495 * eina_init().
496 *
497 * @see eina_init()
498 */
499Eina_Bool
500eina_stringshare_init(void)
501{
502 Eina_Bool ret;
503 ret = eina_share_common_init(&stringshare_share,
504 EINA_MAGIC_STRINGSHARE_NODE,
505 EINA_MAGIC_STRINGSHARE_NODE_STR);
506 if (ret)
507 _eina_stringshare_small_init();
508
509 return ret;
510}
511
512/**
513 * @internal
514 * @brief Shut down the share_common module.
515 *
516 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
517 *
518 * This function shuts down the share_common module set up by
519 * eina_share_common_init(). It is called by eina_shutdown().
520 *
521 * @see eina_shutdown()
522 */
523Eina_Bool
524eina_stringshare_shutdown(void)
525{
526 Eina_Bool ret;
527 _eina_stringshare_small_shutdown();
528 ret = eina_share_common_shutdown(&stringshare_share);
529 return ret;
530}
531
532/*============================================================================*
533* API *
534*============================================================================*/
535
536EAPI void
537eina_stringshare_del(const char *str)
538{
539 int slen;
540
541 if (!str)
542 return;
543
544 /* special cases */
545 if (str[0] == '\0')
546 slen = 0;
547 else if (str[1] == '\0')
548 slen = 1;
549 else if (str[2] == '\0')
550 slen = 2;
551 else if (str[3] == '\0')
552 slen = 3;
553 else
554 slen = 4; /* handled later */
555
556 if (slen < 2)
557 return;
558 else if (slen < 4)
559 {
560 eina_share_common_population_del(stringshare_share, slen);
561 eina_lock_take(&_mutex_small);
562 _eina_stringshare_small_del(str, slen);
563 eina_lock_release(&_mutex_small);
564 return;
565 }
566
567 eina_share_common_del(stringshare_share, str);
568}
569
570EAPI const char *
571eina_stringshare_add_length(const char *str, unsigned int slen)
572{
573 if ((!str) || (slen <= 0))
574 return "";
575 else if (slen == 1)
576 return (const char *)_eina_stringshare_single + ((*str) << 1);
577 else if (slen < 4)
578 {
579 const char *s;
580
581 eina_lock_take(&_mutex_small);
582 s = _eina_stringshare_small_add(str, slen);
583 eina_lock_release(&_mutex_small);
584 return s;
585 }
586
587 return eina_share_common_add_length(stringshare_share, str, slen *
588 sizeof(char), sizeof(char));
589}
590
591EAPI const char *
592eina_stringshare_add(const char *str)
593{
594 int slen;
595 if (!str)
596 return NULL;
597
598 if (str[0] == '\0')
599 slen = 0;
600 else if (str[1] == '\0')
601 slen = 1;
602 else if (str[2] == '\0')
603 slen = 2;
604 else if (str[3] == '\0')
605 slen = 3;
606 else
607 slen = 3 + (int)strlen(str + 3);
608
609 return eina_stringshare_add_length(str, slen);
610}
611
612EAPI const char *
613eina_stringshare_printf(const char *fmt, ...)
614{
615 va_list args;
616 char *tmp;
617 const char *ret;
618 int len;
619
620 if (!fmt)
621 return NULL;
622
623 va_start(args, fmt);
624 len = vasprintf(&tmp, fmt, args);
625 va_end(args);
626
627 if (len < 1)
628 return NULL;
629
630 ret = eina_stringshare_add_length(tmp, len);
631 free(tmp);
632
633 return ret;
634}
635
636EAPI const char *
637eina_stringshare_vprintf(const char *fmt, va_list args)
638{
639 char *tmp;
640 const char *ret;
641 int len;
642
643 if (!fmt)
644 return NULL;
645
646 len = vasprintf(&tmp, fmt, args);
647
648 if (len < 1)
649 return NULL;
650
651 ret = eina_stringshare_add_length(tmp, len);
652 free(tmp);
653
654 return ret;
655}
656
657EAPI const char *
658eina_stringshare_nprintf(unsigned int len, const char *fmt, ...)
659{
660 va_list args;
661 char *tmp;
662 int size;
663
664 if (!fmt)
665 return NULL;
666
667 if (len < 1)
668 return NULL;
669
670 tmp = alloca(sizeof(char) * len + 1);
671
672 va_start(args, fmt);
673 size = vsnprintf(tmp, len, fmt, args);
674 va_end(args);
675
676 if (size < 1)
677 return NULL;
678
679 return eina_stringshare_add_length(tmp, len);
680}
681
682EAPI const char *
683eina_stringshare_ref(const char *str)
684{
685 int slen;
686
687 if (!str)
688 return eina_share_common_ref(stringshare_share, str);
689
690 /* special cases */
691 if (str[0] == '\0')
692 slen = 0;
693 else if (str[1] == '\0')
694 slen = 1;
695 else if (str[2] == '\0')
696 slen = 2;
697 else if (str[3] == '\0')
698 slen = 3;
699 else
700 slen = 3 + (int)strlen(str + 3);
701
702 if (slen < 2)
703 {
704 eina_share_common_population_add(stringshare_share, slen);
705
706 return str;
707 }
708 else if (slen < 4)
709 {
710 const char *s;
711 eina_share_common_population_add(stringshare_share, slen);
712
713 eina_lock_take(&_mutex_small);
714 s = _eina_stringshare_small_add(str, slen);
715 eina_lock_release(&_mutex_small);
716
717 return s;
718 }
719
720 return eina_share_common_ref(stringshare_share, str);
721}
722
723EAPI int
724eina_stringshare_strlen(const char *str)
725{
726 int len;
727 /* special cases */
728 if (str[0] == '\0')
729 return 0;
730
731 if (str[1] == '\0')
732 return 1;
733
734 if (str[2] == '\0')
735 return 2;
736
737 if (str[3] == '\0')
738 return 3;
739
740 len = eina_share_common_length(stringshare_share, (const char *)str);
741 len = (len > 0) ? len / (int)sizeof(char) : -1;
742 return len;
743}
744
745EAPI void
746eina_stringshare_dump(void)
747{
748 eina_share_common_dump(stringshare_share,
749 _eina_stringshare_small_dump,
750 sizeof(_eina_stringshare_single));
751}
diff --git a/libraries/eina/src/lib/eina_tiler.c b/libraries/eina/src/lib/eina_tiler.c
new file mode 100644
index 0000000..69b944e
--- /dev/null
+++ b/libraries/eina/src/lib/eina_tiler.c
@@ -0,0 +1,1276 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Gustavo Sverzut Barbieri, Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19/* TODO
20 * it is possible to have more than one tiler algorithm, but for now the
21 * version Gustavo did is hardcoded here
22 * http://blog.gustavobarbieri.com.br/2007/06/03/evas-now-using-rectangle-split-and-merge/
23 */
24
25#ifdef HAVE_CONFIG_H
26# include "config.h"
27#endif
28
29#include <stdlib.h>
30#include <stdio.h>
31
32#include "eina_config.h"
33#include "eina_private.h"
34#include "eina_tiler.h"
35#include "eina_error.h"
36
37/*============================================================================*
38* Local *
39*============================================================================*/
40
41/* The splitter data types */
42typedef struct list_node list_node_t;
43typedef struct list list_t;
44typedef struct rect rect_t;
45typedef struct rect_node rect_node_t;
46
47struct list_node
48{
49 struct list_node *next;
50};
51
52struct list
53{
54 struct list_node *head;
55 struct list_node *tail;
56};
57
58struct rect
59{
60 short right;
61 short bottom;
62 short left;
63 short top;
64 short width;
65 short height;
66 int area;
67};
68
69struct rect_node
70{
71 struct list_node _lst;
72 struct rect rect;
73};
74
75typedef struct splitter
76{
77 Eina_Bool need_merge;
78 list_t rects;
79} splitter_t;
80
81typedef struct list_node_pool
82{
83 list_node_t *node;
84 int len;
85 int max;
86} list_node_pool_t;
87
88
89static const list_node_t list_node_zeroed = { NULL };
90static const list_t list_zeroed = { NULL, NULL };
91static list_node_pool_t list_node_pool = { NULL, 0, 1024 };
92
93
94typedef struct _Eina_Iterator_Tiler
95{
96 Eina_Iterator iterator;
97 const Eina_Tiler *tiler;
98 list_node_t *curr;
99 Eina_Rectangle r;
100 EINA_MAGIC
101} Eina_Iterator_Tiler;
102
103struct _Eina_Tiler
104{
105 struct
106 {
107 int w, h;
108 } tile;
109 Eina_Rectangle area;
110 EINA_MAGIC
111 splitter_t splitter;
112};
113
114#define EINA_MAGIC_CHECK_TILER(d, ...) \
115 do { \
116 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_TILER)) \
117 { \
118 EINA_MAGIC_FAIL(d, EINA_MAGIC_TILER); \
119 return __VA_ARGS__; \
120 } \
121 } while(0)
122
123
124#define EINA_MAGIC_CHECK_TILER_ITERATOR(d, ...) \
125 do { \
126 if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_TILER_ITERATOR)) \
127 { \
128 EINA_MAGIC_FAIL(d, EINA_MAGIC_TILER_ITERATOR); \
129 return __VA_ARGS__; \
130 } \
131 } while(0)
132
133/* The Splitter algorithm */
134static inline void rect_init(rect_t *r, int x, int y, int w, int h)
135{
136 r->area = w * h;
137
138 r->left = x;
139 r->top = y;
140
141 r->right = x + w;
142 r->bottom = y + h;
143
144 r->width = w;
145 r->height = h;
146}
147
148static inline list_node_t *
149rect_list_node_pool_get(void)
150{
151 if (list_node_pool.node)
152 {
153 list_node_t *node;
154
155 node = list_node_pool.node;
156 list_node_pool.node = node->next;
157 list_node_pool.len--;
158
159 return node;
160 }
161 else
162 return malloc(sizeof(rect_node_t));
163}
164
165
166static inline void rect_list_concat(list_t *rects, list_t *other)
167{
168 if (!other->head)
169 return;
170
171 if (rects->tail)
172 {
173 rects->tail->next = other->head;
174 rects->tail = other->tail;
175 }
176 else
177 {
178 rects->head = other->head;
179 rects->tail = other->tail;
180 }
181
182 *other = list_zeroed;
183}
184
185static inline void rect_list_append_node(list_t *rects, list_node_t *node)
186{
187 if (rects->tail)
188 {
189 rects->tail->next = node;
190 rects->tail = node;
191 }
192 else
193 {
194 rects->head = node;
195 rects->tail = node;
196 }
197}
198
199static inline void rect_list_append(list_t *rects, const rect_t r)
200{
201 rect_node_t *rect_node;
202
203 rect_node = (rect_node_t *)rect_list_node_pool_get();
204 rect_node->rect = r;
205 rect_node->_lst = list_node_zeroed;
206
207 rect_list_append_node(rects, (list_node_t *)rect_node);
208}
209
210static inline void rect_list_append_xywh(list_t *rects,
211 int x,
212 int y,
213 int w,
214 int h)
215{
216 rect_t r;
217
218 rect_init(&r, x, y, w, h);
219 rect_list_append(rects, r);
220}
221
222static inline void _calc_intra_rect_area(const rect_t a, const rect_t b,
223 int *width, int *height)
224{
225 int max_left, min_right, max_top, min_bottom;
226
227 if (a.left < b.left)
228 max_left = b.left;
229 else
230 max_left = a.left;
231
232 if (a.right < b.right)
233 min_right = a.right;
234 else
235 min_right = b.right;
236
237 *width = min_right - max_left;
238
239 if (a.top < b.top)
240 max_top = b.top;
241 else
242 max_top = a.top;
243
244 if (a.bottom < b.bottom)
245 min_bottom = a.bottom;
246 else
247 min_bottom = b.bottom;
248
249 *height = min_bottom - max_top;
250}
251
252static inline void _split_strict(list_t *dirty, const rect_t current, rect_t r)
253{
254 int h_1, h_2, w_1, w_2;
255
256 h_1 = current.top - r.top;
257 h_2 = r.bottom - current.bottom;
258 w_1 = current.left - r.left;
259 w_2 = r.right - current.right;
260
261 if (h_1 > 0)
262 {
263 /* .--.r (b) .---.r2
264 * | | | |
265 * .-------.cur (a) .---.r '---'
266 * | | | | -> | | +
267 * | `--' | `---'
268 * `-------'
269 */
270 rect_list_append_xywh(dirty, r.left, r.top, r.width, h_1);
271 r.height -= h_1;
272 r.top = current.top;
273 }
274
275 if (h_2 > 0)
276 {
277 /* .-------.cur (a)
278 * | .---. | .---.r
279 * | | | | -> | |
280 * `-------' `---' + .---.r2
281 * | | | |
282 * `---'r (b) `---'
283 */
284 rect_list_append_xywh(dirty, r.left, current.bottom, r.width,
285 h_2);
286 r.height -= h_2;
287 }
288
289 if (w_1 > 0)
290 /* (b) r .----.cur (a)
291 * .--|-. | .--.r2 .-.r
292 * | | | | -> | | + | |
293 * `--|-' | `--' `-'
294 * `----'
295 */
296 rect_list_append_xywh(dirty, r.left, r.top, w_1, r.height); /* not necessary to keep these, r (b) will be destroyed */
297
298 /* r.width -= w_1; */
299 /* r.left = current.left; */
300
301 if (w_2 > 0)
302 /* .----.cur (a)
303 * | |
304 * | .-|--.r (b) .-.r .--.r2
305 * | | | | -> | | + | |
306 * | `-|--' `-' `--'
307 * `----'
308 */
309 rect_list_append_xywh(dirty, current.right, r.top, w_2,
310 r.height); /* not necessary to keep this, r (b) will be destroyed */
311
312 /* r.width -= w_2; */
313}
314
315static inline void _calc_intra_outer_rect_area(const rect_t a, const rect_t b,
316 rect_t *intra, rect_t *outer)
317{
318 int min_left, max_left, min_right, max_right;
319 int min_top, max_top, min_bottom, max_bottom;
320
321 if (a.left < b.left)
322 {
323 max_left = b.left;
324 min_left = a.left;
325 }
326 else
327 {
328 max_left = a.left;
329 min_left = b.left;
330 }
331
332 if (a.right < b.right)
333 {
334 min_right = a.right;
335 max_right = b.right;
336 }
337 else
338 {
339 min_right = b.right;
340 max_right = a.right;
341 }
342
343 intra->left = max_left;
344 intra->right = min_right;
345 intra->width = min_right - max_left;
346
347 outer->left = min_left;
348 outer->right = max_right;
349 outer->width = max_right - min_left;
350
351 if (a.top < b.top)
352 {
353 max_top = b.top;
354 min_top = a.top;
355 }
356 else
357 {
358 max_top = a.top;
359 min_top = b.top;
360 }
361
362 if (a.bottom < b.bottom)
363 {
364 min_bottom = a.bottom;
365 max_bottom = b.bottom;
366 }
367 else
368 {
369 min_bottom = b.bottom;
370 max_bottom = a.bottom;
371 }
372
373 intra->top = max_top;
374 intra->bottom = min_bottom;
375 intra->height = min_bottom - max_top;
376 if ((intra->width > 0) && (intra->height > 0))
377 intra->area = intra->width * intra->height;
378 else
379 intra->area = 0;
380
381 outer->top = min_top;
382 outer->bottom = max_bottom;
383 outer->height = max_bottom - min_top;
384 outer->area = outer->width * outer->height;
385}
386
387enum
388{
389 SPLIT_FUZZY_ACTION_NONE,
390 SPLIT_FUZZY_ACTION_SPLIT,
391 SPLIT_FUZZY_ACTION_MERGE
392};
393
394static inline int _split_fuzzy(list_t *dirty, const rect_t a, rect_t *b)
395{
396 int h_1, h_2, w_1, w_2, action;
397
398 h_1 = a.top - b->top;
399 h_2 = b->bottom - a.bottom;
400 w_1 = a.left - b->left;
401 w_2 = b->right - a.right;
402
403 action = SPLIT_FUZZY_ACTION_NONE;
404
405 if (h_1 > 0)
406 {
407 /* .--.r (b) .---.r2
408 * | | | |
409 * .-------.cur (a) .---.r '---'
410 * | | | | -> | | +
411 * | `--' | `---'
412 * `-------'
413 */
414 rect_list_append_xywh(dirty, b->left, b->top, b->width, h_1);
415 b->height -= h_1;
416 b->top = a.top;
417 action = SPLIT_FUZZY_ACTION_SPLIT;
418 }
419
420 if (h_2 > 0)
421 {
422 /* .-------.cur (a)
423 * | .---. | .---.r
424 * | | | | -> | |
425 * `-------' `---' + .---.r2
426 * | | | |
427 * `---'r (b) `---'
428 */
429 rect_list_append_xywh(dirty, b->left, a.bottom, b->width, h_2);
430 b->height -= h_2;
431 action = SPLIT_FUZZY_ACTION_SPLIT;
432 }
433
434 if (((w_1 > 0) || (w_2 > 0)) && (a.height == b->height))
435 return SPLIT_FUZZY_ACTION_MERGE;
436
437 if (w_1 > 0)
438 {
439 /* (b) r .----.cur (a)
440 * .--|-. | .--.r2 .-.r
441 * | | | | -> | | + | |
442 * `--|-' | `--' `-'
443 * `----'
444 */
445 rect_list_append_xywh(dirty, b->left, b->top, w_1, b->height);
446 /* not necessary to keep these, r (b) will be destroyed */
447 /* b->width -= w_1; */
448 /* b->left = a.left; */
449 action = SPLIT_FUZZY_ACTION_SPLIT;
450 }
451
452 if (w_2 > 0)
453 {
454 /* .----.cur (a)
455 * | |
456 * | .-|--.r (b) .-.r .--.r2
457 * | | | | -> | | + | |
458 * | `-|--' `-' `--'
459 * `----'
460 */
461 rect_list_append_xywh(dirty, a.right, b->top, w_2, b->height);
462 /* not necessary to keep these, r (b) will be destroyed */
463 /* b->width -= w_2; */
464 action = SPLIT_FUZZY_ACTION_SPLIT;
465 }
466
467 return action;
468}
469
470#if 0
471static void rect_list_node_pool_set_max(int max)
472{
473 int diff;
474
475 diff = list_node_pool.len - max;
476 for (; diff > 0 && list_node_pool.node != NULL; diff--)
477 {
478 list_node_t *node;
479
480 node = list_node_pool.node;
481 list_node_pool.node = node->next;
482 list_node_pool.len--;
483
484 free(node);
485 }
486
487 list_node_pool.max = max;
488}
489#endif
490
491static void rect_list_node_pool_flush(void)
492{
493 while (list_node_pool.node)
494 {
495 list_node_t *node;
496
497 node = list_node_pool.node;
498 list_node_pool.node = node->next;
499 list_node_pool.len--;
500
501 free(node);
502 }
503}
504
505
506
507static inline void rect_list_node_pool_put(list_node_t *node)
508{
509 if (list_node_pool.len < list_node_pool.max)
510 {
511 node->next = list_node_pool.node;
512 list_node_pool.node = node;
513 list_node_pool.len++;
514 }
515 else
516 free(node);
517}
518
519#if 0
520static void rect_print(const rect_t r)
521{
522 printf("<rect(%d, %d, %d, %d)>", r.left, r.top, r.width, r.height);
523}
524
525static void rect_list_print(const list_t rects)
526{
527 list_node_t *node;
528 int len;
529
530 len = 0;
531 for (node = rects.head; node != NULL; node = node->next)
532 len++;
533
534 printf("[");
535 for (node = rects.head; node != NULL; node = node->next)
536 {
537 rect_print(((rect_node_t *)node)->rect);
538 if (node->next)
539 {
540 putchar(',');
541 if (len < 4)
542 putchar(' ');
543 else
544 {
545 putchar('\n');
546 putchar(' ');
547 }
548 }
549 }
550 printf("]\n");
551}
552#endif
553
554static inline list_node_t *
555rect_list_unlink_next(list_t *rects, list_node_t *parent_node)
556{
557 list_node_t *node;
558
559 if (parent_node)
560 {
561 node = parent_node->next;
562 parent_node->next = node->next;
563 }
564 else
565 {
566 node = rects->head;
567 rects->head = node->next;
568 }
569
570 if (rects->tail == node)
571 rects->tail = parent_node;
572
573 *node = list_node_zeroed;
574 return node;
575}
576
577static inline void rect_list_del_next(list_t *rects, list_node_t *parent_node)
578{
579 list_node_t *node;
580
581 node = rect_list_unlink_next(rects, parent_node);
582 rect_list_node_pool_put(node);
583}
584
585static void rect_list_clear(list_t *rects)
586{
587 list_node_t *node;
588
589 node = rects->head;
590 while (node)
591 {
592 list_node_t *aux;
593
594 aux = node->next;
595 rect_list_node_pool_put(node);
596 node = aux;
597 }
598 *rects = list_zeroed;
599}
600
601static void rect_list_del_split_strict(list_t *rects, const rect_t del_r)
602{
603 list_t modified = list_zeroed;
604 list_node_t *cur_node, *prev_node;
605
606 prev_node = NULL;
607 cur_node = rects->head;
608 while (cur_node)
609 {
610 int intra_width, intra_height;
611 rect_t current;
612
613 current = ((rect_node_t *)cur_node)->rect;
614
615 _calc_intra_rect_area(del_r, current, &intra_width,
616 &intra_height);
617 if ((intra_width <= 0) || (intra_height <= 0))
618 {
619 /* .---.current .---.del_r
620 * | | | |
621 * `---+---.del_r `---+---.current
622 * | | | |
623 * `---' `---'
624 * no intersection, nothing to do
625 */
626 prev_node = cur_node;
627 cur_node = cur_node->next;
628 }
629 else if ((intra_width == current.width) && (intra_height
630 == current.height))
631 {
632 /* .-------.del_r
633 * | .---. |
634 * | | | |
635 * | `---'current
636 * `-------'
637 * current is contained, remove from rects
638 */
639 cur_node = cur_node->next;
640 rect_list_del_next(rects, prev_node);
641 }
642 else
643 {
644 _split_strict(&modified, del_r, current);
645 cur_node = cur_node->next;
646 rect_list_del_next(rects, prev_node);
647 }
648 }
649
650 rect_list_concat(rects, &modified);
651}
652
653#if 0
654static void rect_list_add_split_strict(list_t *rects, list_node_t *node)
655{
656 list_t dirty = list_zeroed;
657 list_t new_dirty = list_zeroed;
658 list_node_t *cur_node;
659
660 if (!rects->head)
661 {
662 rect_list_append_node(rects, node);
663 return;
664 }
665
666 rect_list_append_node(&dirty, node);
667
668 cur_node = rects->head;
669 while (dirty.head)
670 {
671 rect_t current;
672
673 if (!cur_node)
674 {
675 rect_list_concat(rects, &dirty);
676 break;
677 }
678
679 current = ((rect_node_t *)cur_node)->rect;
680
681 while (dirty.head)
682 {
683 int intra_width, intra_height;
684 rect_t r;
685
686 r = ((rect_node_t *)dirty.head)->rect;
687 _calc_intra_rect_area(r, current, &intra_width,
688 &intra_height);
689 if ((intra_width == r.width) && (intra_height
690 == r.height))
691 /* .-------.cur
692 * | .---.r|
693 * | | | |
694 * | `---' |
695 * `-------'
696 */
697 rect_list_del_next(&dirty, NULL);
698 else if ((intra_width <= 0) || (intra_height <= 0))
699 {
700 /* .---.cur .---.r
701 * | | | |
702 * `---+---.r `---+---.cur
703 * | | | |
704 * `---' `---'
705 */
706 list_node_t *tmp;
707 tmp = rect_list_unlink_next(&dirty, NULL);
708 rect_list_append_node(&new_dirty, tmp);
709 }
710 else
711 {
712 _split_strict(&new_dirty, current, r);
713 rect_list_del_next(&dirty, NULL);
714 }
715 }
716 dirty = new_dirty;
717 new_dirty = list_zeroed;
718
719 cur_node = cur_node->next;
720 }
721}
722#endif
723
724static list_node_t *
725rect_list_add_split_fuzzy(list_t *rects, list_node_t *node, int accepted_error)
726{
727 list_t dirty = list_zeroed;
728 list_node_t *old_last;
729
730 old_last = rects->tail;
731
732 if (!rects->head)
733 {
734 rect_list_append_node(rects, node);
735 return old_last;
736 }
737
738 rect_list_append_node(&dirty, node);
739 while (dirty.head)
740 {
741 list_node_t *d_node, *cur_node, *prev_cur_node;
742 int keep_dirty;
743 rect_t r;
744
745 d_node = rect_list_unlink_next(&dirty, NULL);
746 r = ((rect_node_t *)d_node)->rect;
747
748 prev_cur_node = NULL;
749 cur_node = rects->head;
750 keep_dirty = 1;
751 while (cur_node)
752 {
753 int area, action;
754 rect_t current, intra, outer;
755
756 current = ((rect_node_t *)cur_node)->rect;
757
758 _calc_intra_outer_rect_area(r, current, &intra, &outer);
759 area = current.area + r.area - intra.area;
760
761 if ((intra.width == r.width) && (intra.height
762 == r.height))
763 {
764 /* .-------.cur
765 * | .---.r|
766 * | | | |
767 * | `---' |
768 * `-------'
769 */
770 keep_dirty = 0;
771 break;
772 }
773 else if ((intra.width == current.width)
774 && (intra.height == current.height))
775 {
776 /* .-------.r
777 * | .---.cur
778 * | | | |
779 * | `---' |
780 * `-------'
781 */
782 if (old_last == cur_node)
783 old_last = prev_cur_node;
784
785 cur_node = cur_node->next;
786 rect_list_del_next(rects, prev_cur_node);
787 }
788 else if ((outer.area - area) <= accepted_error)
789 {
790 /* .-----------. bounding box (outer)
791 * |.---. .---.|
792 * ||cur| |r ||
793 * || | | ||
794 * |`---' `---'|
795 * `-----------'
796 * merge them, remove both and add merged
797 */
798 rect_node_t *n;
799
800 if (old_last == cur_node)
801 old_last = prev_cur_node;
802
803 n = (rect_node_t *)rect_list_unlink_next(
804 rects, prev_cur_node);
805 n->rect = outer;
806 rect_list_append_node(&dirty, (list_node_t *)n);
807
808 keep_dirty = 0;
809 break;
810 }
811 else if (intra.area <= accepted_error)
812 {
813 /* .---.cur .---.r
814 * | | | |
815 * `---+---.r `---+---.cur
816 * | | | |
817 * `---' `---'
818 * no split, no merge
819 */
820 prev_cur_node = cur_node;
821 cur_node = cur_node->next;
822 }
823 else
824 {
825 /* split is required */
826 action = _split_fuzzy(&dirty, current, &r);
827 if (action == SPLIT_FUZZY_ACTION_MERGE)
828 {
829/* horizontal merge is possible: remove both, add merged */
830 rect_node_t *n;
831
832 if (old_last == cur_node)
833 old_last = prev_cur_node;
834
835 n
836 = (rect_node_t *)rect_list_unlink_next(
837 rects,
838 prev_cur_node);
839
840 n->rect.left = outer.left;
841 n->rect.width = outer.width;
842 n->rect.right = outer.right;
843 n->rect.area = outer.width * r.height;
844 rect_list_append_node(&dirty,
845 (list_node_t *)n);
846 }
847 else if (action == SPLIT_FUZZY_ACTION_NONE)
848 {
849/*
850 * this rect check was totally useless,
851 * should never happen
852 */
853/* prev_cur_node = cur_node; */
854/* cur_node = cur_node->next; */
855 printf("Should not get here!\n");
856 abort();
857 }
858
859 keep_dirty = 0;
860 break;
861 }
862 }
863 if (EINA_UNLIKELY(keep_dirty))
864 rect_list_append_node(rects, d_node);
865 else
866 rect_list_node_pool_put(d_node);
867 }
868
869 return old_last;
870}
871
872static inline void _calc_outer_rect_area(const rect_t a, const rect_t b,
873 rect_t *outer)
874{
875 int min_left, max_right;
876 int min_top, max_bottom;
877
878 if (a.left < b.left)
879 min_left = a.left;
880 else
881 min_left = b.left;
882
883 if (a.right < b.right)
884 max_right = b.right;
885 else
886 max_right = a.right;
887
888 outer->left = min_left;
889 outer->right = max_right;
890 outer->width = max_right - min_left;
891
892 if (a.top < b.top)
893 min_top = a.top;
894 else
895 min_top = b.top;
896
897 if (a.bottom < b.bottom)
898 max_bottom = b.bottom;
899 else
900 max_bottom = a.bottom;
901
902 outer->top = min_top;
903 outer->bottom = max_bottom;
904 outer->height = max_bottom - min_top;
905
906 outer->area = outer->width * outer->height;
907}
908
909static void rect_list_merge_rects(list_t *rects,
910 list_t *to_merge,
911 int accepted_error)
912{
913 while (to_merge->head)
914 {
915 list_node_t *node, *parent_node;
916 rect_t r1;
917 int merged;
918
919 r1 = ((rect_node_t *)to_merge->head)->rect;
920
921 merged = 0;
922 parent_node = NULL;
923 node = rects->head;
924 while (node)
925 {
926 rect_t r2, outer;
927 int area;
928
929 r2 = ((rect_node_t *)node)->rect;
930
931 _calc_outer_rect_area(r1, r2, &outer);
932 area = r1.area + r2.area; /* intra area is taken as 0 */
933 if (outer.area - area <= accepted_error)
934 {
935 /*
936 * remove both r1 and r2, create r3
937 * actually r3 uses r2 instance, saves memory
938 */
939 rect_node_t *n;
940
941 n = (rect_node_t *)rect_list_unlink_next(
942 rects, parent_node);
943 n->rect = outer;
944 rect_list_append_node(to_merge,
945 (list_node_t *)n);
946 merged = 1;
947 break;
948 }
949
950 parent_node = node;
951 node = node->next;
952 }
953
954 if (!merged)
955 {
956 list_node_t *n;
957 n = rect_list_unlink_next(to_merge, NULL);
958 rect_list_append_node(rects, n);
959 }
960 else
961 rect_list_del_next(to_merge, NULL);
962 }
963}
964
965static void rect_list_add_split_fuzzy_and_merge(list_t *rects,
966 list_node_t *node,
967 int split_accepted_error,
968 int merge_accepted_error)
969{
970 list_node_t *n;
971
972 n = rect_list_add_split_fuzzy(rects, node, split_accepted_error);
973 if (n && n->next)
974 {
975 list_t to_merge;
976
977 /* split list into 2 segments, already merged and to merge */
978 to_merge.head = n->next;
979 to_merge.tail = rects->tail;
980 rects->tail = n;
981 n->next = NULL;
982
983 rect_list_merge_rects(rects, &to_merge, merge_accepted_error);
984 }
985}
986
987static inline void _splitter_new(Eina_Tiler *t)
988{
989 t->splitter.rects = list_zeroed;
990 t->splitter.need_merge = EINA_FALSE;
991}
992
993static inline void _splitter_del(Eina_Tiler *t)
994{
995 rect_list_clear(&t->splitter.rects);
996 rect_list_node_pool_flush();
997}
998
999static inline void _splitter_tile_size_set(Eina_Tiler *t,
1000 int w __UNUSED__,
1001 int h __UNUSED__)
1002{
1003 /* TODO are w and h used for something? */
1004 t->splitter.rects = list_zeroed;
1005}
1006
1007static inline Eina_Bool _splitter_rect_add(Eina_Tiler *t, Eina_Rectangle *rect)
1008{
1009 rect_node_t *rn;
1010
1011 //printf("ACCOUNTING[1]: add_redraw: %4d,%4d %3dx%3d\n", x, y, w, h);
1012 rect->x >>= 1;
1013 rect->y >>= 1;
1014 rect->w += 2;
1015 rect->w >>= 1;
1016 rect->h += 2;
1017 rect->h >>= 1;
1018
1019 rn = (rect_node_t *)rect_list_node_pool_get();
1020 rn->_lst = list_node_zeroed;
1021 rect_init(&rn->rect, rect->x, rect->y, rect->w, rect->h);
1022 //printf("ACCOUNTING[2]: add_redraw: %4d,%4d %3dx%3d\n", x, y, w, h);
1023 //testing on my core2 duo desktop - fuzz of 32 or 48 is best.
1024#define FUZZ 32
1025 rect_list_add_split_fuzzy_and_merge(&t->splitter.rects,
1026 (list_node_t *)rn,
1027 FUZZ * FUZZ,
1028 FUZZ * FUZZ);
1029 return EINA_TRUE;
1030}
1031
1032static inline void _splitter_rect_del(Eina_Tiler *t, Eina_Rectangle *rect)
1033{
1034 rect_t r;
1035
1036 if (!t->splitter.rects.head)
1037 return;
1038
1039 rect->x += 1;
1040 rect->y += 1;
1041 rect->x >>= 1;
1042 rect->y >>= 1;
1043 rect->w -= 1;
1044 rect->w >>= 1;
1045 rect->h -= 1;
1046 rect->h >>= 1;
1047
1048 if ((rect->w <= 0) || (rect->h <= 0))
1049 return;
1050
1051 rect_init(&r, rect->x, rect->y, rect->w, rect->h);
1052 //fprintf(stderr, "ACCOUNTING: del_redraw: %4d,%4d %3dx%3d\n", x, y, w, h);
1053
1054 rect_list_del_split_strict(&t->splitter.rects, r);
1055 t->splitter.need_merge = EINA_TRUE;
1056 return;
1057}
1058
1059static inline void _splitter_clear(Eina_Tiler *t)
1060{
1061 rect_list_clear(&t->splitter.rects);
1062 t->splitter.need_merge = EINA_FALSE;
1063}
1064/* end of splitter algorithm */
1065
1066static Eina_Bool _iterator_next(Eina_Iterator_Tiler *it, void **data)
1067{
1068 list_node_t *n;
1069
1070 for (n = it->curr; n; n = n->next)
1071 {
1072 rect_t cur;
1073
1074 cur = ((rect_node_t *)n)->rect;
1075
1076 it->r.x = cur.left << 1;
1077 it->r.y = cur.top << 1;
1078 it->r.w = cur.width << 1;
1079 it->r.h = cur.height << 1;
1080
1081 if (eina_rectangle_intersection(&it->r, &it->tiler->area) == EINA_FALSE)
1082 continue;
1083
1084 if ((it->r.w <= 0) || (it->r.h <= 0))
1085 continue;
1086
1087 it->curr = n->next;
1088 *(Eina_Rectangle **)data = &it->r;
1089 return EINA_TRUE;
1090 }
1091 return EINA_FALSE;
1092}
1093
1094static void *_iterator_get_container(Eina_Iterator_Tiler *it)
1095{
1096 EINA_MAGIC_CHECK_TILER_ITERATOR(it, NULL);
1097 return (void *)it->tiler;
1098}
1099
1100static void _iterator_free(Eina_Iterator_Tiler *it)
1101{
1102 EINA_MAGIC_CHECK_TILER_ITERATOR(it);
1103 free(it);
1104}
1105
1106/*============================================================================*
1107* Global *
1108*============================================================================*/
1109
1110/*============================================================================*
1111* API *
1112*============================================================================*/
1113
1114EAPI Eina_Tiler *eina_tiler_new(int w, int h)
1115{
1116 Eina_Tiler *t;
1117
1118 t = calloc(1, sizeof(Eina_Tiler));
1119 t->area.w = w;
1120 t->area.h = h;
1121 t->tile.w = w;
1122 t->tile.h = h;
1123 EINA_MAGIC_SET(t, EINA_MAGIC_TILER);
1124 _splitter_new(t);
1125 return t;
1126}
1127
1128EAPI void eina_tiler_free(Eina_Tiler *t)
1129{
1130 EINA_MAGIC_CHECK_TILER(t);
1131 _splitter_del(t);
1132 free(t);
1133}
1134
1135EAPI void eina_tiler_tile_size_set(Eina_Tiler *t, int w, int h)
1136{
1137 EINA_MAGIC_CHECK_TILER(t);
1138 if ((w <= 0) || (h <= 0))
1139 return;
1140
1141 t->tile.w = w;
1142 t->tile.h = h;
1143 _splitter_tile_size_set(t, w, h);
1144}
1145
1146EAPI Eina_Bool eina_tiler_rect_add(Eina_Tiler *t, const Eina_Rectangle *r)
1147{
1148 Eina_Rectangle tmp;
1149
1150 EINA_MAGIC_CHECK_TILER(t, EINA_FALSE);
1151 if ((r->w <= 0) || (r->h <= 0))
1152 return EINA_FALSE;
1153
1154 tmp = *r;
1155 if (eina_rectangle_intersection(&tmp, &t->area) == EINA_FALSE)
1156 return EINA_FALSE;
1157
1158 if ((tmp.w <= 0) || (tmp.h <= 0))
1159 return EINA_FALSE;
1160
1161 return _splitter_rect_add(t, &tmp);
1162}
1163
1164EAPI void eina_tiler_rect_del(Eina_Tiler *t, const Eina_Rectangle *r)
1165{
1166 Eina_Rectangle tmp;
1167
1168 EINA_MAGIC_CHECK_TILER(t);
1169 if ((r->w <= 0) || (r->h <= 0))
1170 return;
1171
1172 tmp = *r;
1173 if (eina_rectangle_intersection(&tmp, &t->area) == EINA_FALSE)
1174 return;
1175
1176 if ((tmp.w <= 0) || (tmp.h <= 0))
1177 return;
1178
1179 _splitter_rect_del(t, &tmp);
1180}
1181
1182EAPI void eina_tiler_clear(Eina_Tiler *t)
1183{
1184 EINA_MAGIC_CHECK_TILER(t);
1185 _splitter_clear(t);
1186}
1187
1188
1189EAPI Eina_Iterator *eina_tiler_iterator_new(const Eina_Tiler *t)
1190{
1191 Eina_Iterator_Tiler *it;
1192
1193 EINA_MAGIC_CHECK_TILER(t, NULL);
1194
1195 it = calloc(1, sizeof (Eina_Iterator_Tiler));
1196 if (!it)
1197 return NULL;
1198
1199 it->tiler = t;
1200
1201 if (t->splitter.need_merge == EINA_TRUE)
1202 {
1203 list_t to_merge;
1204 splitter_t *sp;
1205
1206 sp = (splitter_t *)&(t->splitter);
1207 to_merge = t->splitter.rects;
1208 sp->rects = list_zeroed;
1209 rect_list_merge_rects(&sp->rects, &to_merge, FUZZ * FUZZ);
1210 sp->need_merge = 0;
1211 }
1212
1213 it->curr = it->tiler->splitter.rects.head;
1214
1215 it->iterator.version = EINA_ITERATOR_VERSION;
1216 it->iterator.next = FUNC_ITERATOR_NEXT(_iterator_next);
1217 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(
1218 _iterator_get_container);
1219 it->iterator.free = FUNC_ITERATOR_FREE(_iterator_free);
1220
1221 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1222 EINA_MAGIC_SET(it, EINA_MAGIC_TILER_ITERATOR);
1223
1224 return &it->iterator;
1225}
1226
1227struct _Eina_Tile_Grid_Slicer_Iterator
1228{
1229 Eina_Iterator iterator;
1230 Eina_Tile_Grid_Slicer priv;
1231};
1232
1233typedef struct _Eina_Tile_Grid_Slicer_Iterator Eina_Tile_Grid_Slicer_Iterator;
1234
1235static void
1236eina_tile_grid_slicer_iterator_free(Eina_Tile_Grid_Slicer_Iterator *it)
1237{
1238 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_NONE);
1239 free(it);
1240}
1241
1242static Eina_Bool
1243eina_tile_grid_slicer_iterator_next(Eina_Tile_Grid_Slicer_Iterator *it,
1244 void **data)
1245{
1246 return eina_tile_grid_slicer_next
1247 (&it->priv, (const Eina_Tile_Grid_Info **)data);
1248}
1249
1250EAPI Eina_Iterator *
1251eina_tile_grid_slicer_iterator_new(int x,
1252 int y,
1253 int w,
1254 int h,
1255 int tile_w,
1256 int tile_h)
1257{
1258 Eina_Tile_Grid_Slicer_Iterator *it;
1259
1260 it = calloc(1, sizeof(*it));
1261 if (!it)
1262 {
1263 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
1264 return NULL;
1265 }
1266
1267 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
1268
1269 it->iterator.version = EINA_ITERATOR_VERSION;
1270 it->iterator.next = FUNC_ITERATOR_NEXT(eina_tile_grid_slicer_iterator_next);
1271 it->iterator.free = FUNC_ITERATOR_FREE(eina_tile_grid_slicer_iterator_free);
1272
1273 eina_tile_grid_slicer_setup(&it->priv, x, y, w, h, tile_w, tile_h);
1274
1275 return &it->iterator;
1276}
diff --git a/libraries/eina/src/lib/eina_unicode.c b/libraries/eina/src/lib/eina_unicode.c
new file mode 100644
index 0000000..342e3cb
--- /dev/null
+++ b/libraries/eina/src/lib/eina_unicode.c
@@ -0,0 +1,405 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Tom Hacohen,
3 * Brett Nash
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library;
17 * if not, see <http://www.gnu.org/licenses/>.
18
19 */
20
21#include <Eina.h>
22#include "eina_unicode.h"
23
24/* FIXME: check if sizeof(wchar_t) == sizeof(Eina_Unicode) if so,
25 * probably better to use the standard functions */
26
27/* Maybe I'm too tired, but this is the only thing that actually worked. */
28const Eina_Unicode _EINA_UNICODE_EMPTY_STRING[1] = {0};
29EAPI const Eina_Unicode *EINA_UNICODE_EMPTY_STRING = _EINA_UNICODE_EMPTY_STRING;
30EAPI int
31eina_unicode_strcmp(const Eina_Unicode *a, const Eina_Unicode *b)
32{
33 for (; *a && *a == *b; a++, b++)
34 ;
35 if (*a == *b)
36 return 0;
37 else if (*a < *b)
38 return -1;
39 else
40 return 1;
41}
42
43EAPI Eina_Unicode *
44eina_unicode_strcpy(Eina_Unicode *dest, const Eina_Unicode *source)
45{
46 Eina_Unicode *ret = dest;
47
48 while (*source)
49 *dest++ = *source++;
50 *dest = 0;
51 return ret;
52}
53
54EAPI Eina_Unicode *
55eina_unicode_strncpy(Eina_Unicode *dest, const Eina_Unicode *source, size_t n)
56{
57 Eina_Unicode *ret = dest;
58
59 for ( ; n && *source ; n--)
60 *dest++ = *source++;
61 for (; n; n--)
62 *dest++ = 0;
63 return ret;
64}
65
66EAPI size_t
67eina_unicode_strlen(const Eina_Unicode *ustr)
68{
69 const Eina_Unicode *end;
70 for (end = ustr; *end; end++)
71 ;
72 return end - ustr;
73}
74
75EAPI size_t
76eina_unicode_strnlen(const Eina_Unicode *ustr, int n)
77{
78 const Eina_Unicode *end;
79 const Eina_Unicode *last = ustr + n; /* technically not portable ;-) */
80 for (end = ustr; end < last && *end; end++)
81 ;
82 return end - ustr;
83}
84
85
86
87
88EAPI Eina_Unicode *
89eina_unicode_strndup(const Eina_Unicode *text, size_t n)
90{
91 Eina_Unicode *ustr;
92
93 ustr = (Eina_Unicode *) malloc((n + 1) * sizeof(Eina_Unicode));
94 memcpy(ustr, text, n * sizeof(Eina_Unicode));
95 ustr[n] = 0;
96 return ustr;
97}
98
99EAPI Eina_Unicode *
100eina_unicode_strdup(const Eina_Unicode *text)
101{
102 size_t len;
103
104 len = eina_unicode_strlen(text);
105 return eina_unicode_strndup(text, len);
106}
107
108EAPI Eina_Unicode *
109eina_unicode_strstr(const Eina_Unicode *haystack, const Eina_Unicode *needle)
110{
111 const Eina_Unicode *i, *j;
112
113 for (i = haystack; *i; i++)
114 {
115 haystack = i; /* set this location as the base position */
116 for (j = needle; *j && *i && *j == *i; j++, i++)
117 ;
118
119 if (!*j) /*if we got to the end of j this means we got a full match */
120 {
121 return (Eina_Unicode *)haystack; /* return the new base position */
122 }
123 }
124
125 return NULL;
126}
127
128EAPI Eina_Unicode *
129eina_unicode_escape(const Eina_Unicode *str)
130{
131 Eina_Unicode *s2, *d;
132 const Eina_Unicode *s;
133
134 s2 = malloc((eina_unicode_strlen(str) * 2) + 1);
135 if (!s2)
136 return NULL;
137
138 for (s = str, d = s2; *s != 0; s++, d++)
139 {
140 if ((*s == ' ') || (*s == '\\') || (*s == '\''))
141 {
142 *d = '\\';
143 d++;
144 }
145
146 *d = *s;
147 }
148 *d = 0;
149 return s2;
150}
151
152/* UTF-8 Handling */
153
154#define EINA_UNICODE_UTF8_BYTES_PER_CHAR 6
155/* The replacement range that will be used for bad utf8 chars. */
156#define ERROR_REPLACEMENT_BASE 0xDC80
157#define ERROR_REPLACEMENT_END 0xDCFF
158#define IS_INVALID_BYTE(x) ((x == 192) || (x == 193) || (x >= 245))
159#define IS_CONTINUATION_BYTE(x) ((x & 0xC0) == 0x80)
160
161EAPI Eina_Unicode
162eina_unicode_utf8_get_next(const char *buf, int *iindex)
163{
164 int ind = *iindex;
165 Eina_Unicode r;
166 unsigned char d;
167
168 /* if this char is the null terminator, exit */
169 if ((d = buf[ind++]) == 0) return 0;
170
171 if ((d & 0x80) == 0)
172 { // 1 byte (7bit) - 0xxxxxxx
173 *iindex = ind;
174 return d;
175 }
176 if ((d & 0xe0) == 0xc0)
177 { // 2 byte (11bit) - 110xxxxx 10xxxxxx
178 r = (d & 0x1f) << 6;
179 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
180 !IS_CONTINUATION_BYTE(d)) goto error;
181 r |= (d & 0x3f);
182 if (r <= 0x7F) goto error;
183 *iindex = ind;
184 return r;
185 }
186 if ((d & 0xf0) == 0xe0)
187 { // 3 byte (16bit) - 1110xxxx 10xxxxxx 10xxxxxx
188 r = (d & 0x0f) << 12;
189 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
190 !IS_CONTINUATION_BYTE(d)) goto error;
191 r |= (d & 0x3f) << 6;
192 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
193 !IS_CONTINUATION_BYTE(d)) goto error;
194 r |= (d & 0x3f);
195 if (r <= 0x7FF) goto error;
196 *iindex = ind;
197 return r;
198 }
199 if ((d & 0xf8) == 0xf0)
200 { // 4 byte (21bit) - 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
201 r = (d & 0x07) << 18;
202 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
203 !IS_CONTINUATION_BYTE(d)) goto error;
204 r |= (d & 0x3f) << 12;
205 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
206 !IS_CONTINUATION_BYTE(d)) goto error;
207 r |= (d & 0x3f) << 6;
208 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
209 !IS_CONTINUATION_BYTE(d)) goto error;
210 r |= (d & 0x3f);
211 if (r <= 0xFFFF) goto error;
212 *iindex = ind;
213 return r;
214 }
215 if ((d & 0xfc) == 0xf8)
216 { // 5 byte (26bit) - 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
217 r = (d & 0x03) << 24;
218 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
219 !IS_CONTINUATION_BYTE(d)) goto error;
220 r |= (d & 0x3f) << 18;
221 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
222 !IS_CONTINUATION_BYTE(d)) goto error;
223 r |= (d & 0x3f) << 12;
224 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
225 !IS_CONTINUATION_BYTE(d)) goto error;
226 r |= (d & 0x3f) << 6;
227 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
228 !IS_CONTINUATION_BYTE(d)) goto error;
229 r |= (d & 0x3f);
230 if (r <= 0x1FFFFF) goto error;
231 *iindex = ind;
232 return r;
233 }
234 if ((d & 0xfe) == 0xfc)
235 { // 6 byte (31bit) - 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
236 r = (d & 0x01) << 30;
237 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
238 !IS_CONTINUATION_BYTE(d)) goto error;
239 r |= (d & 0x3f) << 24;
240 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
241 !IS_CONTINUATION_BYTE(d)) goto error;
242 r |= (d & 0x3f) << 18;
243 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
244 !IS_CONTINUATION_BYTE(d)) goto error;
245 r |= (d & 0x3f) << 12;
246 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
247 !IS_CONTINUATION_BYTE(d)) goto error;
248 r |= (d & 0x3f) << 6;
249 if (((d = buf[ind++]) == 0) || IS_INVALID_BYTE(d) ||
250 !IS_CONTINUATION_BYTE(d)) goto error;
251 r |= (d & 0x3f);
252 if (r <= 0x3FFFFFF) goto error;
253 *iindex = ind;
254 return r;
255 }
256
257/* Gets here where there was an error and we want to replace the char
258 * we just use the invalid unicode codepoints 8 lower bits represent
259 * the original char */
260error:
261 d = buf[*iindex];
262 (*iindex)++;
263 return ERROR_REPLACEMENT_BASE | d;
264}
265
266EAPI Eina_Unicode
267eina_unicode_utf8_get_prev(const char *buf, int *iindex)
268{
269 int r;
270 int ind = *iindex;
271 /* First obtain the codepoint at iindex */
272 r = eina_unicode_utf8_get_next(buf, &ind);
273
274 /* although when ind == 0 there's no previous char, we still want to get
275 * the current char */
276 if (*iindex <= 0)
277 return r;
278
279 /* Next advance iindex to previous codepoint */
280 ind = *iindex;
281 ind--;
282 while ((ind > 0) && ((buf[ind] & 0xc0) == 0x80))
283 ind--;
284
285 *iindex = ind;
286 return r;
287}
288
289EAPI int
290eina_unicode_utf8_get_len(const char *buf)
291{
292 /* returns the number of utf8 characters (not bytes) in the string */
293 int i = 0, len = 0;
294
295 while (eina_unicode_utf8_get_next(buf, &i))
296 len++;
297
298 return len;
299}
300
301EAPI Eina_Unicode *
302eina_unicode_utf8_to_unicode(const char *utf, int *_len)
303{
304 /* FIXME: Should optimize! */
305 int len, i;
306 int ind;
307 Eina_Unicode *buf, *uind;
308
309 len = eina_unicode_utf8_get_len(utf);
310 if (_len)
311 *_len = len;
312 buf = (Eina_Unicode *) calloc(sizeof(Eina_Unicode), (len + 1));
313 if (!buf) return buf;
314
315 for (i = 0, ind = 0, uind = buf ; i < len ; i++, uind++)
316 {
317 *uind = eina_unicode_utf8_get_next(utf, &ind);
318 }
319
320 return buf;
321}
322
323EAPI char *
324eina_unicode_unicode_to_utf8(const Eina_Unicode *uni, int *_len)
325{
326 char *buf;
327 const Eina_Unicode *uind;
328 char *ind;
329 int ulen, len;
330
331 ulen = eina_unicode_strlen(uni);
332 buf = (char *) calloc(ulen + 1, EINA_UNICODE_UTF8_BYTES_PER_CHAR);
333
334 len = 0;
335 for (uind = uni, ind = buf ; *uind ; uind++)
336 {
337 if (*uind <= 0x7F) /* 1 byte char */
338 {
339 *ind++ = *uind;
340 len += 1;
341 }
342 else if (*uind <= 0x7FF) /* 2 byte char */
343 {
344 *ind++ = 0xC0 | (unsigned char) (*uind >> 6);
345 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
346 len += 2;
347 }
348 else if (*uind <= 0xFFFF) /* 3 byte char */
349 {
350 /* If it's a special replacement codepoint */
351 if (*uind >= ERROR_REPLACEMENT_BASE &&
352 *uind <= ERROR_REPLACEMENT_END)
353 {
354 *ind++ = *uind & 0xFF;
355 len += 1;
356 }
357 else
358 {
359 *ind++ = 0xE0 | (unsigned char) (*uind >> 12);
360 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
361 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
362 len += 3;
363 }
364 }
365 else if (*uind <= 0x1FFFFF) /* 4 byte char */
366 {
367 *ind++ = 0xF0 | (unsigned char) ((*uind >> 18) & 0x07);
368 *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F);
369 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
370 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
371 len += 4;
372 }
373 else if (*uind <= 0x3FFFFFF) /* 5 byte char */
374 {
375 *ind++ = 0xF8 | (unsigned char) ((*uind >> 24) & 0x03);
376 *ind++ = 0x80 | (unsigned char) ((*uind >> 18) & 0x3F);
377 *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F);
378 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
379 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
380 len += 5;
381 }
382 else if (*uind <= 0x7FFFFFFF) /* 6 byte char */
383 {
384 *ind++ = 0xFC | (unsigned char) ((*uind >> 30) & 0x01);
385 *ind++ = 0x80 | (unsigned char) ((*uind >> 24) & 0x3F);
386 *ind++ = 0x80 | (unsigned char) ((*uind >> 18) & 0x3F);
387 *ind++ = 0x80 | (unsigned char) ((*uind >> 12) & 0x3F);
388 *ind++ = 0x80 | (unsigned char) ((*uind >> 6) & 0x3F);
389 *ind++ = 0x80 | (unsigned char) (*uind & 0x3F);
390 len += 6;
391 }
392 else /* error */
393 {
394 /* Do something */
395 }
396 }
397 buf = realloc(buf, len + 1);
398 buf[len] = '\0';
399 if (_len)
400 *_len = len;
401 return buf;
402}
403
404
405
diff --git a/libraries/eina/src/lib/eina_ustrbuf.c b/libraries/eina/src/lib/eina_ustrbuf.c
new file mode 100644
index 0000000..7c1c2db
--- /dev/null
+++ b/libraries/eina/src/lib/eina_ustrbuf.c
@@ -0,0 +1,74 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include "eina_strbuf_common.h"
6#include "eina_unicode.h"
7#include "eina_ustrbuf.h"
8
9/*============================================================================*
10 * Local *
11 *============================================================================*/
12
13/**
14 * @cond LOCAL
15 */
16
17#ifdef _STRBUF_DATA_TYPE
18# undef _STRBUF_DATA_TYPE
19#endif
20
21#ifdef _STRBUF_CSIZE
22# undef _STRBUF_CSIZE
23#endif
24
25#ifdef _STRBUF_STRUCT_NAME
26# undef _STRBUF_STRUCT_NAME
27#endif
28
29#ifdef _STRBUF_STRLEN_FUNC
30# undef _STRBUF_STRLEN_FUNC
31#endif
32
33#ifdef _STRBUF_STRESCAPE_FUNC
34# undef _STRBUF_STRESCAPE_FUNC
35#endif
36
37#ifdef _STRBUF_MAGIC
38# undef _STRBUF_MAGIC
39#endif
40
41#ifdef _STRBUF_MAGIC_STR
42# undef _STRBUF_MAGIC_STR
43#endif
44
45#ifdef _FUNC_EXPAND
46# undef _FUNC_EXPAND
47#endif
48
49#define _STRBUF_DATA_TYPE Eina_Unicode
50#define _STRBUF_CSIZE sizeof(_STRBUF_DATA_TYPE)
51#define _STRBUF_STRUCT_NAME Eina_UStrbuf
52#define _STRBUF_STRLEN_FUNC(x) eina_unicode_strlen(x)
53#define _STRBUF_STRESCAPE_FUNC(x) eina_unicode_escape(x)
54#define _STRBUF_MAGIC EINA_MAGIC_USTRBUF
55#define _STRBUF_MAGIC_STR __USTRBUF_MAGIC_STR
56static const char __USTRBUF_MAGIC_STR[] = "Eina UStrbuf";
57
58#define _FUNC_EXPAND(y) eina_ustrbuf_ ## y
59
60/**
61 * @endcond
62 */
63
64
65/*============================================================================*
66 * Global *
67 *============================================================================*/
68
69
70/*============================================================================*
71 * API *
72 *============================================================================*/
73
74#include "eina_strbuf_template_c.x"
diff --git a/libraries/eina/src/lib/eina_ustringshare.c b/libraries/eina/src/lib/eina_ustringshare.c
new file mode 100644
index 0000000..3992dc6
--- /dev/null
+++ b/libraries/eina/src/lib/eina_ustringshare.c
@@ -0,0 +1,132 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2002-2008 Carsten Haitzler,
3 * Jorge Luis Zapata Muga,
4 * Cedric Bail,
5 * Gustavo Sverzut Barbieri
6 * Tom Hacohen
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library;
20 * if not, see <http://www.gnu.org/licenses/>.
21
22 */
23/**
24 * @page tutorial_ustringshare_page UStringshare Tutorial
25 *
26 * to be written...
27 *
28 */
29
30#include "eina_share_common.h"
31#include "eina_unicode.h"
32#include "eina_private.h"
33#include "eina_ustringshare.h"
34
35/* The actual share */
36static Eina_Share *ustringshare_share;
37static const char EINA_MAGIC_USTRINGSHARE_NODE_STR[] = "Eina UStringshare Node";
38
39/*============================================================================*
40* Global *
41*============================================================================*/
42
43/**
44 * @internal
45 * @brief Initialize the share_common module.
46 *
47 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
48 *
49 * This function sets up the share_common module of Eina. It is called by
50 * eina_init().
51 *
52 * @see eina_init()
53 */
54Eina_Bool
55eina_ustringshare_init(void)
56{
57 return eina_share_common_init(&ustringshare_share,
58 EINA_MAGIC_USTRINGSHARE_NODE,
59 EINA_MAGIC_USTRINGSHARE_NODE_STR);
60}
61
62/**
63 * @internal
64 * @brief Shut down the share_common module.
65 *
66 * @return #EINA_TRUE on success, #EINA_FALSE on failure.
67 *
68 * This function shuts down the share_common module set up by
69 * eina_share_common_init(). It is called by eina_shutdown().
70 *
71 * @see eina_shutdown()
72 */
73Eina_Bool
74eina_ustringshare_shutdown(void)
75{
76 Eina_Bool ret;
77 ret = eina_share_common_shutdown(&ustringshare_share);
78 return ret;
79}
80
81/*============================================================================*
82* API *
83*============================================================================*/
84
85EAPI void
86eina_ustringshare_del(const Eina_Unicode *str)
87{
88 if (!str)
89 return;
90
91 eina_share_common_del(ustringshare_share,(const char *)str);
92}
93
94EAPI const Eina_Unicode *
95eina_ustringshare_add_length(const Eina_Unicode *str, unsigned int slen)
96{
97 return (const Eina_Unicode *)eina_share_common_add_length(ustringshare_share,
98 (const char *)str,
99 slen *
100 sizeof(
101 Eina_Unicode),
102 sizeof(
103 Eina_Unicode));
104}
105
106EAPI const Eina_Unicode *
107eina_ustringshare_add(const Eina_Unicode *str)
108{
109 int slen = (str) ? (int)eina_unicode_strlen(str) : -1;
110 return eina_ustringshare_add_length(str, slen);
111}
112
113EAPI const Eina_Unicode *
114eina_ustringshare_ref(const Eina_Unicode *str)
115{
116 return (const Eina_Unicode *)eina_share_common_ref(ustringshare_share,
117 (const char *)str);
118}
119
120EAPI int
121eina_ustringshare_strlen(const Eina_Unicode *str)
122{
123 int len = eina_share_common_length(ustringshare_share, (const char *)str);
124 len = (len > 0) ? len / (int)sizeof(Eina_Unicode) : -1;
125 return len;
126}
127
128EAPI void
129eina_ustringshare_dump(void)
130{
131 eina_share_common_dump(ustringshare_share, NULL, 0);
132}
diff --git a/libraries/eina/src/lib/eina_value.c b/libraries/eina/src/lib/eina_value.c
new file mode 100644
index 0000000..554f907
--- /dev/null
+++ b/libraries/eina/src/lib/eina_value.c
@@ -0,0 +1,47 @@
1/* eina_value.c
2
3 Copyright (C) 2001 Christopher Rosendahl <smugg@fatelabs.com>
4 Nathan Ingersoll <ningerso@d.umn.edu>
5
6 Permission is hereby granted, free of charge, to any person obtaining a copy
7 of this software and associated documentation files (the "Software"), to
8 deal in the Software without restriction, including without limitation the
9 rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 sell copies of the Software, and to permit persons to whom the Software is
11 furnished to do so, subject to the following conditions:
12
13 The above copyright notice and this permission notice shall be included in
14 all copies of the Software and its documentation and acknowledgment shall be
15 given in the documentation and software packages that this Software was
16 used.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
22 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
23 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
25 */
26
27#ifdef HAVE_CONFIG_H
28# include "config.h"
29#endif
30
31#include "eina_config.h"
32#include "eina_private.h"
33
34/*============================================================================*
35* Global *
36*============================================================================*/
37
38/*============================================================================*
39* API *
40*============================================================================*/
41
42EAPI const unsigned int eina_prime_table[] =
43{
44 17, 31, 61, 127, 257, 509, 1021,
45 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573,
46 2097143, 4194301, 8388617, 16777213
47};
diff --git a/libraries/eina/src/lib/eina_xattr.c b/libraries/eina/src/lib/eina_xattr.c
new file mode 100644
index 0000000..bd5b98e
--- /dev/null
+++ b/libraries/eina/src/lib/eina_xattr.c
@@ -0,0 +1,292 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2011 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <sys/types.h>
24#include <string.h>
25#include <math.h>
26
27#ifdef HAVE_XATTR
28# include <sys/xattr.h>
29#endif
30
31#include "eina_config.h"
32#include "eina_private.h"
33
34#include "eina_safety_checks.h"
35#include "eina_xattr.h"
36#include "eina_convert.h"
37
38/*============================================================================*
39 * Local *
40 *============================================================================*/
41
42/**
43 * @cond LOCAL
44 */
45
46typedef struct _Eina_Xattr_Iterator Eina_Xattr_Iterator;
47
48struct _Eina_Xattr_Iterator
49{
50 Eina_Iterator iterator;
51
52 ssize_t length;
53 ssize_t offset;
54
55 char xattr[1];
56};
57
58#ifdef HAVE_XATTR
59static Eina_Bool
60_eina_xattr_ls_iterator_next(Eina_Xattr_Iterator *it, void **data)
61{
62 if (it->offset >= it->length)
63 return EINA_FALSE;
64
65 *data = it->xattr + it->offset;
66 it->offset += strlen(it->xattr + it->offset) + 1;
67
68 return EINA_TRUE;
69}
70
71static void *
72_eina_xattr_ls_iterator_container(Eina_Xattr_Iterator *it __UNUSED__)
73{
74 return NULL;
75}
76
77static void
78_eina_xattr_ls_iterator_free(Eina_Xattr_Iterator *it)
79{
80 EINA_MAGIC_SET(&it->iterator, 0);
81 free(it);
82}
83#endif
84
85/**
86 * @endcond
87 */
88
89
90/*============================================================================*
91 * Global *
92 *============================================================================*/
93
94
95/*============================================================================*
96 * API *
97 *============================================================================*/
98
99
100EAPI Eina_Iterator *
101eina_xattr_ls(const char *file)
102{
103#ifdef HAVE_XATTR
104 Eina_Xattr_Iterator *it;
105 ssize_t length;
106
107 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
108
109 length = listxattr(file, NULL, 0);
110 if (length <= 0) return NULL;
111
112 it = calloc(1, sizeof (Eina_Xattr_Iterator) + length - 1);
113 if (!it) return NULL;
114
115 EINA_MAGIC_SET(&it->iterator, EINA_MAGIC_ITERATOR);
116
117 it->length = listxattr(file, it->xattr, length);
118 if (it->length != length)
119 {
120 free(it);
121 return NULL;
122 }
123
124 it->iterator.version = EINA_ITERATOR_VERSION;
125 it->iterator.next = FUNC_ITERATOR_NEXT(_eina_xattr_ls_iterator_next);
126 it->iterator.get_container = FUNC_ITERATOR_GET_CONTAINER(_eina_xattr_ls_iterator_container);
127 it->iterator.free = FUNC_ITERATOR_FREE(_eina_xattr_ls_iterator_free);
128
129 return &it->iterator;
130#else
131 return NULL;
132 (void)file;
133#endif
134}
135
136EAPI void *
137eina_xattr_get(const char *file, const char *attribute, ssize_t *size)
138{
139#ifdef HAVE_XATTR
140 void *ret = NULL;
141 ssize_t tmp;
142
143 EINA_SAFETY_ON_NULL_RETURN_VAL(file, NULL);
144 EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, NULL);
145 EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL);
146
147 *size = getxattr(file, attribute, NULL, 0);
148 /* Size should be less than 2MB (already huge in my opinion) */
149 if (!(*size > 0 && *size < 2 * 1024 * 1024))
150 goto on_error;
151
152 ret = malloc(*size);
153 if (!ret) return NULL;
154
155 tmp = getxattr(file, attribute, ret, *size);
156 if (tmp != *size)
157 goto on_error;
158
159 return ret;
160
161 on_error:
162 free(ret);
163 *size = 0;
164 return NULL;
165#else
166 EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, NULL);
167 *size = 0;
168 return NULL;
169 (void)file;
170 (void)attribute;
171#endif
172}
173
174EAPI Eina_Bool
175eina_xattr_set(const char *file, const char *attribute, const void *data, ssize_t length, Eina_Xattr_Flags flags)
176{
177#ifdef HAVE_XATTR
178 int iflags;
179
180 EINA_SAFETY_ON_NULL_RETURN_VAL(file, EINA_FALSE);
181 EINA_SAFETY_ON_NULL_RETURN_VAL(attribute, EINA_FALSE);
182 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
183 EINA_SAFETY_ON_TRUE_RETURN_VAL(!(length > 0 && length < 2 * 1024 * 1024), EINA_FALSE);
184
185 switch (flags)
186 {
187 case EINA_XATTR_INSERT: iflags = 0; break;
188 case EINA_XATTR_REPLACE: iflags = XATTR_REPLACE; break;
189 case EINA_XATTR_CREATED: iflags = XATTR_CREATE; break;
190 default:
191 return EINA_FALSE;
192 }
193
194 if (setxattr(file, attribute, data, length, iflags))
195 return EINA_FALSE;
196 return EINA_TRUE;
197#else
198 return EINA_FALSE;
199 (void)file;
200 (void)attribute;
201 (void)data;
202 (void)length;
203 (void)flags;
204#endif
205}
206
207EAPI Eina_Bool
208eina_xattr_string_set(const char *file, const char *attribute, const char *data, Eina_Xattr_Flags flags)
209{
210 EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
211
212 return eina_xattr_set(file, attribute, data, strlen(data) + 1, flags);
213}
214
215EAPI char *
216eina_xattr_string_get(const char *file, const char *attribute)
217{
218 char *tmp;
219 ssize_t size;
220
221 tmp = eina_xattr_get(file, attribute, &size);
222 if (!tmp) return NULL;
223
224 if (tmp[size - 1] != '\0')
225 {
226 free(tmp);
227 return NULL;
228 }
229
230 return tmp;
231}
232
233EAPI Eina_Bool
234eina_xattr_double_set(const char *file, const char *attribute, double value, Eina_Xattr_Flags flags)
235{
236 char buffer[128];
237
238 eina_convert_dtoa(value, buffer);
239 return eina_xattr_string_set(file, attribute, buffer, flags);
240}
241
242EAPI Eina_Bool
243eina_xattr_double_get(const char *file, const char *attribute, double *value)
244{
245 char *tmp;
246 long long int m = 0;
247 long int e = 0;
248
249 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
250
251 tmp = eina_xattr_string_get(file, attribute);
252 if (!tmp) return EINA_FALSE;
253
254 if (!eina_convert_atod(tmp, strlen(tmp), &m, &e))
255 {
256 free(tmp);
257 return EINA_FALSE;
258 }
259
260 *value = ldexp((double)m, e);
261 free(tmp);
262
263 return EINA_TRUE;
264}
265
266EAPI Eina_Bool
267eina_xattr_int_set(const char *file, const char *attribute, int value, Eina_Xattr_Flags flags)
268{
269 char buffer[10];
270
271 eina_convert_itoa(value, buffer);
272 return eina_xattr_string_set(file, attribute, buffer, flags);
273}
274
275EAPI Eina_Bool
276eina_xattr_int_get(const char *file, const char *attribute, int *value)
277{
278 char *tmp;
279 char *eos;
280 Eina_Bool result;
281
282 EINA_SAFETY_ON_NULL_RETURN_VAL(value, EINA_FALSE);
283
284 tmp = eina_xattr_string_get(file, attribute);
285 if (!tmp) return EINA_FALSE;
286
287 *value = (int) strtol(tmp, &eos, 10);
288 result = (*eos == '\0');
289 free(tmp);
290
291 return result;
292}
diff --git a/libraries/eina/src/modules/Makefile.am b/libraries/eina/src/modules/Makefile.am
new file mode 100644
index 0000000..53e28b7
--- /dev/null
+++ b/libraries/eina/src/modules/Makefile.am
@@ -0,0 +1,4 @@
1SUBDIRS = mp
2
3MAINTAINERCLEANFILES = \
4Makefile.in \ No newline at end of file
diff --git a/libraries/eina/src/modules/Makefile.in b/libraries/eina/src/modules/Makefile.in
new file mode 100644
index 0000000..f3385f1
--- /dev/null
+++ b/libraries/eina/src/modules/Makefile.in
@@ -0,0 +1,631 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17VPATH = @srcdir@
18pkgdatadir = $(datadir)/@PACKAGE@
19pkgincludedir = $(includedir)/@PACKAGE@
20pkglibdir = $(libdir)/@PACKAGE@
21pkglibexecdir = $(libexecdir)/@PACKAGE@
22am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
23install_sh_DATA = $(install_sh) -c -m 644
24install_sh_PROGRAM = $(install_sh) -c
25install_sh_SCRIPT = $(install_sh) -c
26INSTALL_HEADER = $(INSTALL_DATA)
27transform = $(program_transform_name)
28NORMAL_INSTALL = :
29PRE_INSTALL = :
30POST_INSTALL = :
31NORMAL_UNINSTALL = :
32PRE_UNINSTALL = :
33POST_UNINSTALL = :
34build_triplet = @build@
35host_triplet = @host@
36subdir = src/modules
37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
39am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
40 $(top_srcdir)/m4/efl_benchmark.m4 \
41 $(top_srcdir)/m4/efl_compiler_flag.m4 \
42 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
43 $(top_srcdir)/m4/efl_doxygen.m4 \
44 $(top_srcdir)/m4/efl_examples.m4 \
45 $(top_srcdir)/m4/efl_fnmatch.m4 \
46 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
47 $(top_srcdir)/m4/efl_threads.m4 \
48 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
49 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59AM_V_GEN = $(am__v_GEN_$(V))
60am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
61am__v_GEN_0 = @echo " GEN " $@;
62AM_V_at = $(am__v_at_$(V))
63am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
64am__v_at_0 = @
65SOURCES =
66DIST_SOURCES =
67RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
68 html-recursive info-recursive install-data-recursive \
69 install-dvi-recursive install-exec-recursive \
70 install-html-recursive install-info-recursive \
71 install-pdf-recursive install-ps-recursive install-recursive \
72 installcheck-recursive installdirs-recursive pdf-recursive \
73 ps-recursive uninstall-recursive
74RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
75 distclean-recursive maintainer-clean-recursive
76AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
77 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
78 distdir
79ETAGS = etags
80CTAGS = ctags
81DIST_SUBDIRS = $(SUBDIRS)
82DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
83am__relativize = \
84 dir0=`pwd`; \
85 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
86 sed_rest='s,^[^/]*/*,,'; \
87 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
88 sed_butlast='s,/*[^/]*$$,,'; \
89 while test -n "$$dir1"; do \
90 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
91 if test "$$first" != "."; then \
92 if test "$$first" = ".."; then \
93 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
94 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
95 else \
96 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
97 if test "$$first2" = "$$first"; then \
98 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
99 else \
100 dir2="../$$dir2"; \
101 fi; \
102 dir0="$$dir0"/"$$first"; \
103 fi; \
104 fi; \
105 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
106 done; \
107 reldir="$$dir2"
108ACLOCAL = @ACLOCAL@
109ALLOCA = @ALLOCA@
110AMTAR = @AMTAR@
111AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
112AR = @AR@
113AS = @AS@
114AUTOCONF = @AUTOCONF@
115AUTOHEADER = @AUTOHEADER@
116AUTOMAKE = @AUTOMAKE@
117AWK = @AWK@
118CC = @CC@
119CCDEPMODE = @CCDEPMODE@
120CFLAGS = @CFLAGS@
121CHECK_CFLAGS = @CHECK_CFLAGS@
122CHECK_LIBS = @CHECK_LIBS@
123CPP = @CPP@
124CPPFLAGS = @CPPFLAGS@
125CXX = @CXX@
126CXXCPP = @CXXCPP@
127CXXDEPMODE = @CXXDEPMODE@
128CXXFLAGS = @CXXFLAGS@
129CYGPATH_W = @CYGPATH_W@
130DEFS = @DEFS@
131DEPDIR = @DEPDIR@
132DLLTOOL = @DLLTOOL@
133DSYMUTIL = @DSYMUTIL@
134DUMPBIN = @DUMPBIN@
135ECHO_C = @ECHO_C@
136ECHO_N = @ECHO_N@
137ECHO_T = @ECHO_T@
138ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
139ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
140EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
141EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
142EFL_EINA_BUILD = @EFL_EINA_BUILD@
143EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
144EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
145EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
146EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
147EGREP = @EGREP@
148EINA_CFLAGS = @EINA_CFLAGS@
149EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
150EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
151EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
152EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
153EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
154EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
155EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
156EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
157EINA_CPPFLAGS = @EINA_CPPFLAGS@
158EINA_LIBS = @EINA_LIBS@
159EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
160EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
161EMEMOA_LIBS = @EMEMOA_LIBS@
162ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
163ESCAPE_LIBS = @ESCAPE_LIBS@
164EVIL_CFLAGS = @EVIL_CFLAGS@
165EVIL_LIBS = @EVIL_LIBS@
166EXEEXT = @EXEEXT@
167FGREP = @FGREP@
168GLIB_CFLAGS = @GLIB_CFLAGS@
169GLIB_LIBS = @GLIB_LIBS@
170GREP = @GREP@
171INSTALL = @INSTALL@
172INSTALL_DATA = @INSTALL_DATA@
173INSTALL_PROGRAM = @INSTALL_PROGRAM@
174INSTALL_SCRIPT = @INSTALL_SCRIPT@
175INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
176LD = @LD@
177LDFLAGS = @LDFLAGS@
178LIBOBJS = @LIBOBJS@
179LIBS = @LIBS@
180LIBTOOL = @LIBTOOL@
181LIPO = @LIPO@
182LN_S = @LN_S@
183LTLIBOBJS = @LTLIBOBJS@
184MAKEINFO = @MAKEINFO@
185MKDIR_P = @MKDIR_P@
186MODULE_ARCH = @MODULE_ARCH@
187NM = @NM@
188NMEDIT = @NMEDIT@
189OBJDUMP = @OBJDUMP@
190OBJEXT = @OBJEXT@
191OTOOL = @OTOOL@
192OTOOL64 = @OTOOL64@
193PACKAGE = @PACKAGE@
194PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
195PACKAGE_NAME = @PACKAGE_NAME@
196PACKAGE_STRING = @PACKAGE_STRING@
197PACKAGE_TARNAME = @PACKAGE_TARNAME@
198PACKAGE_URL = @PACKAGE_URL@
199PACKAGE_VERSION = @PACKAGE_VERSION@
200PATH_SEPARATOR = @PATH_SEPARATOR@
201PKG_CONFIG = @PKG_CONFIG@
202PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
203PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
204RANLIB = @RANLIB@
205SED = @SED@
206SET_MAKE = @SET_MAKE@
207SHELL = @SHELL@
208STRIP = @STRIP@
209VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
210VALGRIND_LIBS = @VALGRIND_LIBS@
211VERSION = @VERSION@
212VMAJ = @VMAJ@
213abs_builddir = @abs_builddir@
214abs_srcdir = @abs_srcdir@
215abs_top_builddir = @abs_top_builddir@
216abs_top_srcdir = @abs_top_srcdir@
217ac_ct_CC = @ac_ct_CC@
218ac_ct_CXX = @ac_ct_CXX@
219ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
220am__include = @am__include@
221am__leading_dot = @am__leading_dot@
222am__quote = @am__quote@
223am__tar = @am__tar@
224am__untar = @am__untar@
225bindir = @bindir@
226build = @build@
227build_alias = @build_alias@
228build_cpu = @build_cpu@
229build_os = @build_os@
230build_vendor = @build_vendor@
231builddir = @builddir@
232datadir = @datadir@
233datarootdir = @datarootdir@
234dlopen_libs = @dlopen_libs@
235docdir = @docdir@
236dvidir = @dvidir@
237efl_doxygen = @efl_doxygen@
238efl_have_doxygen = @efl_have_doxygen@
239exec_prefix = @exec_prefix@
240have_lcov = @have_lcov@
241host = @host@
242host_alias = @host_alias@
243host_cpu = @host_cpu@
244host_os = @host_os@
245host_vendor = @host_vendor@
246htmldir = @htmldir@
247iconv_libs = @iconv_libs@
248includedir = @includedir@
249infodir = @infodir@
250install_sh = @install_sh@
251libdir = @libdir@
252libexecdir = @libexecdir@
253localedir = @localedir@
254localstatedir = @localstatedir@
255lt_ECHO = @lt_ECHO@
256lt_enable_auto_import = @lt_enable_auto_import@
257mandir = @mandir@
258mkdir_p = @mkdir_p@
259oldincludedir = @oldincludedir@
260pdfdir = @pdfdir@
261pkgconfig_requires_private = @pkgconfig_requires_private@
262prefix = @prefix@
263program_transform_name = @program_transform_name@
264psdir = @psdir@
265release_info = @release_info@
266requirement_eina = @requirement_eina@
267rt_libs = @rt_libs@
268sbindir = @sbindir@
269sharedstatedir = @sharedstatedir@
270srcdir = @srcdir@
271sysconfdir = @sysconfdir@
272target_alias = @target_alias@
273top_build_prefix = @top_build_prefix@
274top_builddir = @top_builddir@
275top_srcdir = @top_srcdir@
276version_info = @version_info@
277SUBDIRS = mp
278MAINTAINERCLEANFILES = \
279Makefile.in
280
281all: all-recursive
282
283.SUFFIXES:
284$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
285 @for dep in $?; do \
286 case '$(am__configure_deps)' in \
287 *$$dep*) \
288 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
289 && { if test -f $@; then exit 0; else break; fi; }; \
290 exit 1;; \
291 esac; \
292 done; \
293 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/Makefile'; \
294 $(am__cd) $(top_srcdir) && \
295 $(AUTOMAKE) --gnu src/modules/Makefile
296.PRECIOUS: Makefile
297Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
298 @case '$?' in \
299 *config.status*) \
300 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
301 *) \
302 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
303 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
304 esac;
305
306$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
307 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
308
309$(top_srcdir)/configure: $(am__configure_deps)
310 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
311$(ACLOCAL_M4): $(am__aclocal_m4_deps)
312 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
313$(am__aclocal_m4_deps):
314
315mostlyclean-libtool:
316 -rm -f *.lo
317
318clean-libtool:
319 -rm -rf .libs _libs
320
321# This directory's subdirectories are mostly independent; you can cd
322# into them and run `make' without going through this Makefile.
323# To change the values of `make' variables: instead of editing Makefiles,
324# (1) if the variable is set in `config.status', edit `config.status'
325# (which will cause the Makefiles to be regenerated when you run `make');
326# (2) otherwise, pass the desired values on the `make' command line.
327$(RECURSIVE_TARGETS):
328 @fail= failcom='exit 1'; \
329 for f in x $$MAKEFLAGS; do \
330 case $$f in \
331 *=* | --[!k]*);; \
332 *k*) failcom='fail=yes';; \
333 esac; \
334 done; \
335 dot_seen=no; \
336 target=`echo $@ | sed s/-recursive//`; \
337 list='$(SUBDIRS)'; for subdir in $$list; do \
338 echo "Making $$target in $$subdir"; \
339 if test "$$subdir" = "."; then \
340 dot_seen=yes; \
341 local_target="$$target-am"; \
342 else \
343 local_target="$$target"; \
344 fi; \
345 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
346 || eval $$failcom; \
347 done; \
348 if test "$$dot_seen" = "no"; then \
349 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
350 fi; test -z "$$fail"
351
352$(RECURSIVE_CLEAN_TARGETS):
353 @fail= failcom='exit 1'; \
354 for f in x $$MAKEFLAGS; do \
355 case $$f in \
356 *=* | --[!k]*);; \
357 *k*) failcom='fail=yes';; \
358 esac; \
359 done; \
360 dot_seen=no; \
361 case "$@" in \
362 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
363 *) list='$(SUBDIRS)' ;; \
364 esac; \
365 rev=''; for subdir in $$list; do \
366 if test "$$subdir" = "."; then :; else \
367 rev="$$subdir $$rev"; \
368 fi; \
369 done; \
370 rev="$$rev ."; \
371 target=`echo $@ | sed s/-recursive//`; \
372 for subdir in $$rev; do \
373 echo "Making $$target in $$subdir"; \
374 if test "$$subdir" = "."; then \
375 local_target="$$target-am"; \
376 else \
377 local_target="$$target"; \
378 fi; \
379 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
380 || eval $$failcom; \
381 done && test -z "$$fail"
382tags-recursive:
383 list='$(SUBDIRS)'; for subdir in $$list; do \
384 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
385 done
386ctags-recursive:
387 list='$(SUBDIRS)'; for subdir in $$list; do \
388 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
389 done
390
391ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
392 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
393 unique=`for i in $$list; do \
394 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
395 done | \
396 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
397 END { if (nonempty) { for (i in files) print i; }; }'`; \
398 mkid -fID $$unique
399tags: TAGS
400
401TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
402 $(TAGS_FILES) $(LISP)
403 set x; \
404 here=`pwd`; \
405 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
406 include_option=--etags-include; \
407 empty_fix=.; \
408 else \
409 include_option=--include; \
410 empty_fix=; \
411 fi; \
412 list='$(SUBDIRS)'; for subdir in $$list; do \
413 if test "$$subdir" = .; then :; else \
414 test ! -f $$subdir/TAGS || \
415 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
416 fi; \
417 done; \
418 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
419 unique=`for i in $$list; do \
420 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
421 done | \
422 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
423 END { if (nonempty) { for (i in files) print i; }; }'`; \
424 shift; \
425 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
426 test -n "$$unique" || unique=$$empty_fix; \
427 if test $$# -gt 0; then \
428 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
429 "$$@" $$unique; \
430 else \
431 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
432 $$unique; \
433 fi; \
434 fi
435ctags: CTAGS
436CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
437 $(TAGS_FILES) $(LISP)
438 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
439 unique=`for i in $$list; do \
440 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
441 done | \
442 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
443 END { if (nonempty) { for (i in files) print i; }; }'`; \
444 test -z "$(CTAGS_ARGS)$$unique" \
445 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
446 $$unique
447
448GTAGS:
449 here=`$(am__cd) $(top_builddir) && pwd` \
450 && $(am__cd) $(top_srcdir) \
451 && gtags -i $(GTAGS_ARGS) "$$here"
452
453distclean-tags:
454 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
455
456distdir: $(DISTFILES)
457 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
458 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
459 list='$(DISTFILES)'; \
460 dist_files=`for file in $$list; do echo $$file; done | \
461 sed -e "s|^$$srcdirstrip/||;t" \
462 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
463 case $$dist_files in \
464 */*) $(MKDIR_P) `echo "$$dist_files" | \
465 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
466 sort -u` ;; \
467 esac; \
468 for file in $$dist_files; do \
469 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
470 if test -d $$d/$$file; then \
471 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
472 if test -d "$(distdir)/$$file"; then \
473 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
474 fi; \
475 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
476 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
477 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
478 fi; \
479 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
480 else \
481 test -f "$(distdir)/$$file" \
482 || cp -p $$d/$$file "$(distdir)/$$file" \
483 || exit 1; \
484 fi; \
485 done
486 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
487 if test "$$subdir" = .; then :; else \
488 test -d "$(distdir)/$$subdir" \
489 || $(MKDIR_P) "$(distdir)/$$subdir" \
490 || exit 1; \
491 fi; \
492 done
493 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
494 if test "$$subdir" = .; then :; else \
495 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
496 $(am__relativize); \
497 new_distdir=$$reldir; \
498 dir1=$$subdir; dir2="$(top_distdir)"; \
499 $(am__relativize); \
500 new_top_distdir=$$reldir; \
501 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
502 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
503 ($(am__cd) $$subdir && \
504 $(MAKE) $(AM_MAKEFLAGS) \
505 top_distdir="$$new_top_distdir" \
506 distdir="$$new_distdir" \
507 am__remove_distdir=: \
508 am__skip_length_check=: \
509 am__skip_mode_fix=: \
510 distdir) \
511 || exit 1; \
512 fi; \
513 done
514check-am: all-am
515check: check-recursive
516all-am: Makefile
517installdirs: installdirs-recursive
518installdirs-am:
519install: install-recursive
520install-exec: install-exec-recursive
521install-data: install-data-recursive
522uninstall: uninstall-recursive
523
524install-am: all-am
525 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
526
527installcheck: installcheck-recursive
528install-strip:
529 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
530 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
531 `test -z '$(STRIP)' || \
532 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
533mostlyclean-generic:
534
535clean-generic:
536
537distclean-generic:
538 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
539 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
540
541maintainer-clean-generic:
542 @echo "This command is intended for maintainers to use"
543 @echo "it deletes files that may require special tools to rebuild."
544 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
545clean: clean-recursive
546
547clean-am: clean-generic clean-libtool mostlyclean-am
548
549distclean: distclean-recursive
550 -rm -f Makefile
551distclean-am: clean-am distclean-generic distclean-tags
552
553dvi: dvi-recursive
554
555dvi-am:
556
557html: html-recursive
558
559html-am:
560
561info: info-recursive
562
563info-am:
564
565install-data-am:
566
567install-dvi: install-dvi-recursive
568
569install-dvi-am:
570
571install-exec-am:
572
573install-html: install-html-recursive
574
575install-html-am:
576
577install-info: install-info-recursive
578
579install-info-am:
580
581install-man:
582
583install-pdf: install-pdf-recursive
584
585install-pdf-am:
586
587install-ps: install-ps-recursive
588
589install-ps-am:
590
591installcheck-am:
592
593maintainer-clean: maintainer-clean-recursive
594 -rm -f Makefile
595maintainer-clean-am: distclean-am maintainer-clean-generic
596
597mostlyclean: mostlyclean-recursive
598
599mostlyclean-am: mostlyclean-generic mostlyclean-libtool
600
601pdf: pdf-recursive
602
603pdf-am:
604
605ps: ps-recursive
606
607ps-am:
608
609uninstall-am:
610
611.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
612 install-am install-strip tags-recursive
613
614.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
615 all all-am check check-am clean clean-generic clean-libtool \
616 ctags ctags-recursive distclean distclean-generic \
617 distclean-libtool distclean-tags distdir dvi dvi-am html \
618 html-am info info-am install install-am install-data \
619 install-data-am install-dvi install-dvi-am install-exec \
620 install-exec-am install-html install-html-am install-info \
621 install-info-am install-man install-pdf install-pdf-am \
622 install-ps install-ps-am install-strip installcheck \
623 installcheck-am installdirs installdirs-am maintainer-clean \
624 maintainer-clean-generic mostlyclean mostlyclean-generic \
625 mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
626 uninstall uninstall-am
627
628
629# Tell versions [3.59,3.63) of GNU make to not export all variables.
630# Otherwise a system limit (for SysV at least) may be exceeded.
631.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/Makefile.am b/libraries/eina/src/modules/mp/Makefile.am
new file mode 100644
index 0000000..435d57a
--- /dev/null
+++ b/libraries/eina/src/modules/mp/Makefile.am
@@ -0,0 +1,45 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3SUBDIRS =
4
5if EINA_BUILD_BUDDY
6if !EINA_STATIC_BUILD_BUDDY
7SUBDIRS += buddy
8endif
9endif
10
11if EINA_BUILD_CHAINED_POOL
12if !EINA_STATIC_BUILD_CHAINED_POOL
13SUBDIRS += chained_pool
14endif
15endif
16
17if EINA_BUILD_EMEMOA_FIXED
18if !EINA_STATIC_BUILD_EMEMOA_FIXED
19SUBDIRS += ememoa_fixed
20endif
21endif
22
23if EINA_BUILD_EMEMOA_UNKNOWN
24if !EINA_STATIC_BUILD_EMEMOA_UNKNOWN
25SUBDIRS += ememoa_unknown
26endif
27endif
28
29if EINA_BUILD_FIXED_BITMAP
30if !EINA_STATIC_BUILD_FIXED_BITMAP
31SUBDIRS += fixed_bitmap
32endif
33endif
34
35if EINA_BUILD_ONE_BIG
36if !EINA_STATIC_BUILD_ONE_BIG
37SUBDIRS += one_big
38endif
39endif
40
41if EINA_BUILD_PASS_THROUGH
42if !EINA_STATIC_BUILD_PASS_THROUGH
43SUBDIRS += pass_through
44endif
45endif
diff --git a/libraries/eina/src/modules/mp/Makefile.in b/libraries/eina/src/modules/mp/Makefile.in
new file mode 100644
index 0000000..d7e67ad
--- /dev/null
+++ b/libraries/eina/src/modules/mp/Makefile.in
@@ -0,0 +1,639 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17VPATH = @srcdir@
18pkgdatadir = $(datadir)/@PACKAGE@
19pkgincludedir = $(includedir)/@PACKAGE@
20pkglibdir = $(libdir)/@PACKAGE@
21pkglibexecdir = $(libexecdir)/@PACKAGE@
22am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
23install_sh_DATA = $(install_sh) -c -m 644
24install_sh_PROGRAM = $(install_sh) -c
25install_sh_SCRIPT = $(install_sh) -c
26INSTALL_HEADER = $(INSTALL_DATA)
27transform = $(program_transform_name)
28NORMAL_INSTALL = :
29PRE_INSTALL = :
30POST_INSTALL = :
31NORMAL_UNINSTALL = :
32PRE_UNINSTALL = :
33POST_UNINSTALL = :
34build_triplet = @build@
35host_triplet = @host@
36@EINA_BUILD_BUDDY_TRUE@@EINA_STATIC_BUILD_BUDDY_FALSE@am__append_1 = buddy
37@EINA_BUILD_CHAINED_POOL_TRUE@@EINA_STATIC_BUILD_CHAINED_POOL_FALSE@am__append_2 = chained_pool
38@EINA_BUILD_EMEMOA_FIXED_TRUE@@EINA_STATIC_BUILD_EMEMOA_FIXED_FALSE@am__append_3 = ememoa_fixed
39@EINA_BUILD_EMEMOA_UNKNOWN_TRUE@@EINA_STATIC_BUILD_EMEMOA_UNKNOWN_FALSE@am__append_4 = ememoa_unknown
40@EINA_BUILD_FIXED_BITMAP_TRUE@@EINA_STATIC_BUILD_FIXED_BITMAP_FALSE@am__append_5 = fixed_bitmap
41@EINA_BUILD_ONE_BIG_TRUE@@EINA_STATIC_BUILD_ONE_BIG_FALSE@am__append_6 = one_big
42@EINA_BUILD_PASS_THROUGH_TRUE@@EINA_STATIC_BUILD_PASS_THROUGH_FALSE@am__append_7 = pass_through
43subdir = src/modules/mp
44DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
45ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
46am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
47 $(top_srcdir)/m4/efl_benchmark.m4 \
48 $(top_srcdir)/m4/efl_compiler_flag.m4 \
49 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
50 $(top_srcdir)/m4/efl_doxygen.m4 \
51 $(top_srcdir)/m4/efl_examples.m4 \
52 $(top_srcdir)/m4/efl_fnmatch.m4 \
53 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
54 $(top_srcdir)/m4/efl_threads.m4 \
55 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
56 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
57 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
58 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
59 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
60am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
61 $(ACLOCAL_M4)
62mkinstalldirs = $(install_sh) -d
63CONFIG_HEADER = $(top_builddir)/config.h
64CONFIG_CLEAN_FILES =
65CONFIG_CLEAN_VPATH_FILES =
66AM_V_GEN = $(am__v_GEN_$(V))
67am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
68am__v_GEN_0 = @echo " GEN " $@;
69AM_V_at = $(am__v_at_$(V))
70am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
71am__v_at_0 = @
72SOURCES =
73DIST_SOURCES =
74RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
75 html-recursive info-recursive install-data-recursive \
76 install-dvi-recursive install-exec-recursive \
77 install-html-recursive install-info-recursive \
78 install-pdf-recursive install-ps-recursive install-recursive \
79 installcheck-recursive installdirs-recursive pdf-recursive \
80 ps-recursive uninstall-recursive
81RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
82 distclean-recursive maintainer-clean-recursive
83AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
84 $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
85 distdir
86ETAGS = etags
87CTAGS = ctags
88DIST_SUBDIRS = buddy chained_pool ememoa_fixed ememoa_unknown \
89 fixed_bitmap one_big pass_through
90DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
91am__relativize = \
92 dir0=`pwd`; \
93 sed_first='s,^\([^/]*\)/.*$$,\1,'; \
94 sed_rest='s,^[^/]*/*,,'; \
95 sed_last='s,^.*/\([^/]*\)$$,\1,'; \
96 sed_butlast='s,/*[^/]*$$,,'; \
97 while test -n "$$dir1"; do \
98 first=`echo "$$dir1" | sed -e "$$sed_first"`; \
99 if test "$$first" != "."; then \
100 if test "$$first" = ".."; then \
101 dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
102 dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
103 else \
104 first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
105 if test "$$first2" = "$$first"; then \
106 dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
107 else \
108 dir2="../$$dir2"; \
109 fi; \
110 dir0="$$dir0"/"$$first"; \
111 fi; \
112 fi; \
113 dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
114 done; \
115 reldir="$$dir2"
116ACLOCAL = @ACLOCAL@
117ALLOCA = @ALLOCA@
118AMTAR = @AMTAR@
119AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
120AR = @AR@
121AS = @AS@
122AUTOCONF = @AUTOCONF@
123AUTOHEADER = @AUTOHEADER@
124AUTOMAKE = @AUTOMAKE@
125AWK = @AWK@
126CC = @CC@
127CCDEPMODE = @CCDEPMODE@
128CFLAGS = @CFLAGS@
129CHECK_CFLAGS = @CHECK_CFLAGS@
130CHECK_LIBS = @CHECK_LIBS@
131CPP = @CPP@
132CPPFLAGS = @CPPFLAGS@
133CXX = @CXX@
134CXXCPP = @CXXCPP@
135CXXDEPMODE = @CXXDEPMODE@
136CXXFLAGS = @CXXFLAGS@
137CYGPATH_W = @CYGPATH_W@
138DEFS = @DEFS@
139DEPDIR = @DEPDIR@
140DLLTOOL = @DLLTOOL@
141DSYMUTIL = @DSYMUTIL@
142DUMPBIN = @DUMPBIN@
143ECHO_C = @ECHO_C@
144ECHO_N = @ECHO_N@
145ECHO_T = @ECHO_T@
146ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
147ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
148EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
149EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
150EFL_EINA_BUILD = @EFL_EINA_BUILD@
151EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
152EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
153EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
154EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
155EGREP = @EGREP@
156EINA_CFLAGS = @EINA_CFLAGS@
157EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
158EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
159EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
160EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
161EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
162EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
163EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
164EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
165EINA_CPPFLAGS = @EINA_CPPFLAGS@
166EINA_LIBS = @EINA_LIBS@
167EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
168EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
169EMEMOA_LIBS = @EMEMOA_LIBS@
170ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
171ESCAPE_LIBS = @ESCAPE_LIBS@
172EVIL_CFLAGS = @EVIL_CFLAGS@
173EVIL_LIBS = @EVIL_LIBS@
174EXEEXT = @EXEEXT@
175FGREP = @FGREP@
176GLIB_CFLAGS = @GLIB_CFLAGS@
177GLIB_LIBS = @GLIB_LIBS@
178GREP = @GREP@
179INSTALL = @INSTALL@
180INSTALL_DATA = @INSTALL_DATA@
181INSTALL_PROGRAM = @INSTALL_PROGRAM@
182INSTALL_SCRIPT = @INSTALL_SCRIPT@
183INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
184LD = @LD@
185LDFLAGS = @LDFLAGS@
186LIBOBJS = @LIBOBJS@
187LIBS = @LIBS@
188LIBTOOL = @LIBTOOL@
189LIPO = @LIPO@
190LN_S = @LN_S@
191LTLIBOBJS = @LTLIBOBJS@
192MAKEINFO = @MAKEINFO@
193MKDIR_P = @MKDIR_P@
194MODULE_ARCH = @MODULE_ARCH@
195NM = @NM@
196NMEDIT = @NMEDIT@
197OBJDUMP = @OBJDUMP@
198OBJEXT = @OBJEXT@
199OTOOL = @OTOOL@
200OTOOL64 = @OTOOL64@
201PACKAGE = @PACKAGE@
202PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
203PACKAGE_NAME = @PACKAGE_NAME@
204PACKAGE_STRING = @PACKAGE_STRING@
205PACKAGE_TARNAME = @PACKAGE_TARNAME@
206PACKAGE_URL = @PACKAGE_URL@
207PACKAGE_VERSION = @PACKAGE_VERSION@
208PATH_SEPARATOR = @PATH_SEPARATOR@
209PKG_CONFIG = @PKG_CONFIG@
210PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
211PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
212RANLIB = @RANLIB@
213SED = @SED@
214SET_MAKE = @SET_MAKE@
215SHELL = @SHELL@
216STRIP = @STRIP@
217VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
218VALGRIND_LIBS = @VALGRIND_LIBS@
219VERSION = @VERSION@
220VMAJ = @VMAJ@
221abs_builddir = @abs_builddir@
222abs_srcdir = @abs_srcdir@
223abs_top_builddir = @abs_top_builddir@
224abs_top_srcdir = @abs_top_srcdir@
225ac_ct_CC = @ac_ct_CC@
226ac_ct_CXX = @ac_ct_CXX@
227ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
228am__include = @am__include@
229am__leading_dot = @am__leading_dot@
230am__quote = @am__quote@
231am__tar = @am__tar@
232am__untar = @am__untar@
233bindir = @bindir@
234build = @build@
235build_alias = @build_alias@
236build_cpu = @build_cpu@
237build_os = @build_os@
238build_vendor = @build_vendor@
239builddir = @builddir@
240datadir = @datadir@
241datarootdir = @datarootdir@
242dlopen_libs = @dlopen_libs@
243docdir = @docdir@
244dvidir = @dvidir@
245efl_doxygen = @efl_doxygen@
246efl_have_doxygen = @efl_have_doxygen@
247exec_prefix = @exec_prefix@
248have_lcov = @have_lcov@
249host = @host@
250host_alias = @host_alias@
251host_cpu = @host_cpu@
252host_os = @host_os@
253host_vendor = @host_vendor@
254htmldir = @htmldir@
255iconv_libs = @iconv_libs@
256includedir = @includedir@
257infodir = @infodir@
258install_sh = @install_sh@
259libdir = @libdir@
260libexecdir = @libexecdir@
261localedir = @localedir@
262localstatedir = @localstatedir@
263lt_ECHO = @lt_ECHO@
264lt_enable_auto_import = @lt_enable_auto_import@
265mandir = @mandir@
266mkdir_p = @mkdir_p@
267oldincludedir = @oldincludedir@
268pdfdir = @pdfdir@
269pkgconfig_requires_private = @pkgconfig_requires_private@
270prefix = @prefix@
271program_transform_name = @program_transform_name@
272psdir = @psdir@
273release_info = @release_info@
274requirement_eina = @requirement_eina@
275rt_libs = @rt_libs@
276sbindir = @sbindir@
277sharedstatedir = @sharedstatedir@
278srcdir = @srcdir@
279sysconfdir = @sysconfdir@
280target_alias = @target_alias@
281top_build_prefix = @top_build_prefix@
282top_builddir = @top_builddir@
283top_srcdir = @top_srcdir@
284version_info = @version_info@
285MAINTAINERCLEANFILES = Makefile.in
286SUBDIRS = $(am__append_1) $(am__append_2) $(am__append_3) \
287 $(am__append_4) $(am__append_5) $(am__append_6) \
288 $(am__append_7)
289all: all-recursive
290
291.SUFFIXES:
292$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
293 @for dep in $?; do \
294 case '$(am__configure_deps)' in \
295 *$$dep*) \
296 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
297 && { if test -f $@; then exit 0; else break; fi; }; \
298 exit 1;; \
299 esac; \
300 done; \
301 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/Makefile'; \
302 $(am__cd) $(top_srcdir) && \
303 $(AUTOMAKE) --gnu src/modules/mp/Makefile
304.PRECIOUS: Makefile
305Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
306 @case '$?' in \
307 *config.status*) \
308 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
309 *) \
310 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
311 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
312 esac;
313
314$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
315 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
316
317$(top_srcdir)/configure: $(am__configure_deps)
318 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
319$(ACLOCAL_M4): $(am__aclocal_m4_deps)
320 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
321$(am__aclocal_m4_deps):
322
323mostlyclean-libtool:
324 -rm -f *.lo
325
326clean-libtool:
327 -rm -rf .libs _libs
328
329# This directory's subdirectories are mostly independent; you can cd
330# into them and run `make' without going through this Makefile.
331# To change the values of `make' variables: instead of editing Makefiles,
332# (1) if the variable is set in `config.status', edit `config.status'
333# (which will cause the Makefiles to be regenerated when you run `make');
334# (2) otherwise, pass the desired values on the `make' command line.
335$(RECURSIVE_TARGETS):
336 @fail= failcom='exit 1'; \
337 for f in x $$MAKEFLAGS; do \
338 case $$f in \
339 *=* | --[!k]*);; \
340 *k*) failcom='fail=yes';; \
341 esac; \
342 done; \
343 dot_seen=no; \
344 target=`echo $@ | sed s/-recursive//`; \
345 list='$(SUBDIRS)'; for subdir in $$list; do \
346 echo "Making $$target in $$subdir"; \
347 if test "$$subdir" = "."; then \
348 dot_seen=yes; \
349 local_target="$$target-am"; \
350 else \
351 local_target="$$target"; \
352 fi; \
353 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
354 || eval $$failcom; \
355 done; \
356 if test "$$dot_seen" = "no"; then \
357 $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
358 fi; test -z "$$fail"
359
360$(RECURSIVE_CLEAN_TARGETS):
361 @fail= failcom='exit 1'; \
362 for f in x $$MAKEFLAGS; do \
363 case $$f in \
364 *=* | --[!k]*);; \
365 *k*) failcom='fail=yes';; \
366 esac; \
367 done; \
368 dot_seen=no; \
369 case "$@" in \
370 distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
371 *) list='$(SUBDIRS)' ;; \
372 esac; \
373 rev=''; for subdir in $$list; do \
374 if test "$$subdir" = "."; then :; else \
375 rev="$$subdir $$rev"; \
376 fi; \
377 done; \
378 rev="$$rev ."; \
379 target=`echo $@ | sed s/-recursive//`; \
380 for subdir in $$rev; do \
381 echo "Making $$target in $$subdir"; \
382 if test "$$subdir" = "."; then \
383 local_target="$$target-am"; \
384 else \
385 local_target="$$target"; \
386 fi; \
387 ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
388 || eval $$failcom; \
389 done && test -z "$$fail"
390tags-recursive:
391 list='$(SUBDIRS)'; for subdir in $$list; do \
392 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
393 done
394ctags-recursive:
395 list='$(SUBDIRS)'; for subdir in $$list; do \
396 test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
397 done
398
399ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
400 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
401 unique=`for i in $$list; do \
402 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
403 done | \
404 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
405 END { if (nonempty) { for (i in files) print i; }; }'`; \
406 mkid -fID $$unique
407tags: TAGS
408
409TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
410 $(TAGS_FILES) $(LISP)
411 set x; \
412 here=`pwd`; \
413 if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
414 include_option=--etags-include; \
415 empty_fix=.; \
416 else \
417 include_option=--include; \
418 empty_fix=; \
419 fi; \
420 list='$(SUBDIRS)'; for subdir in $$list; do \
421 if test "$$subdir" = .; then :; else \
422 test ! -f $$subdir/TAGS || \
423 set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
424 fi; \
425 done; \
426 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
427 unique=`for i in $$list; do \
428 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
429 done | \
430 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
431 END { if (nonempty) { for (i in files) print i; }; }'`; \
432 shift; \
433 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
434 test -n "$$unique" || unique=$$empty_fix; \
435 if test $$# -gt 0; then \
436 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
437 "$$@" $$unique; \
438 else \
439 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
440 $$unique; \
441 fi; \
442 fi
443ctags: CTAGS
444CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
445 $(TAGS_FILES) $(LISP)
446 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
447 unique=`for i in $$list; do \
448 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
449 done | \
450 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
451 END { if (nonempty) { for (i in files) print i; }; }'`; \
452 test -z "$(CTAGS_ARGS)$$unique" \
453 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
454 $$unique
455
456GTAGS:
457 here=`$(am__cd) $(top_builddir) && pwd` \
458 && $(am__cd) $(top_srcdir) \
459 && gtags -i $(GTAGS_ARGS) "$$here"
460
461distclean-tags:
462 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
463
464distdir: $(DISTFILES)
465 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
466 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
467 list='$(DISTFILES)'; \
468 dist_files=`for file in $$list; do echo $$file; done | \
469 sed -e "s|^$$srcdirstrip/||;t" \
470 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
471 case $$dist_files in \
472 */*) $(MKDIR_P) `echo "$$dist_files" | \
473 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
474 sort -u` ;; \
475 esac; \
476 for file in $$dist_files; do \
477 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
478 if test -d $$d/$$file; then \
479 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
480 if test -d "$(distdir)/$$file"; then \
481 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
482 fi; \
483 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
484 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
485 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
486 fi; \
487 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
488 else \
489 test -f "$(distdir)/$$file" \
490 || cp -p $$d/$$file "$(distdir)/$$file" \
491 || exit 1; \
492 fi; \
493 done
494 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
495 if test "$$subdir" = .; then :; else \
496 test -d "$(distdir)/$$subdir" \
497 || $(MKDIR_P) "$(distdir)/$$subdir" \
498 || exit 1; \
499 fi; \
500 done
501 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
502 if test "$$subdir" = .; then :; else \
503 dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
504 $(am__relativize); \
505 new_distdir=$$reldir; \
506 dir1=$$subdir; dir2="$(top_distdir)"; \
507 $(am__relativize); \
508 new_top_distdir=$$reldir; \
509 echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
510 echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
511 ($(am__cd) $$subdir && \
512 $(MAKE) $(AM_MAKEFLAGS) \
513 top_distdir="$$new_top_distdir" \
514 distdir="$$new_distdir" \
515 am__remove_distdir=: \
516 am__skip_length_check=: \
517 am__skip_mode_fix=: \
518 distdir) \
519 || exit 1; \
520 fi; \
521 done
522check-am: all-am
523check: check-recursive
524all-am: Makefile
525installdirs: installdirs-recursive
526installdirs-am:
527install: install-recursive
528install-exec: install-exec-recursive
529install-data: install-data-recursive
530uninstall: uninstall-recursive
531
532install-am: all-am
533 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
534
535installcheck: installcheck-recursive
536install-strip:
537 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
538 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
539 `test -z '$(STRIP)' || \
540 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
541mostlyclean-generic:
542
543clean-generic:
544
545distclean-generic:
546 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
547 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
548
549maintainer-clean-generic:
550 @echo "This command is intended for maintainers to use"
551 @echo "it deletes files that may require special tools to rebuild."
552 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
553clean: clean-recursive
554
555clean-am: clean-generic clean-libtool mostlyclean-am
556
557distclean: distclean-recursive
558 -rm -f Makefile
559distclean-am: clean-am distclean-generic distclean-tags
560
561dvi: dvi-recursive
562
563dvi-am:
564
565html: html-recursive
566
567html-am:
568
569info: info-recursive
570
571info-am:
572
573install-data-am:
574
575install-dvi: install-dvi-recursive
576
577install-dvi-am:
578
579install-exec-am:
580
581install-html: install-html-recursive
582
583install-html-am:
584
585install-info: install-info-recursive
586
587install-info-am:
588
589install-man:
590
591install-pdf: install-pdf-recursive
592
593install-pdf-am:
594
595install-ps: install-ps-recursive
596
597install-ps-am:
598
599installcheck-am:
600
601maintainer-clean: maintainer-clean-recursive
602 -rm -f Makefile
603maintainer-clean-am: distclean-am maintainer-clean-generic
604
605mostlyclean: mostlyclean-recursive
606
607mostlyclean-am: mostlyclean-generic mostlyclean-libtool
608
609pdf: pdf-recursive
610
611pdf-am:
612
613ps: ps-recursive
614
615ps-am:
616
617uninstall-am:
618
619.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
620 install-am install-strip tags-recursive
621
622.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
623 all all-am check check-am clean clean-generic clean-libtool \
624 ctags ctags-recursive distclean distclean-generic \
625 distclean-libtool distclean-tags distdir dvi dvi-am html \
626 html-am info info-am install install-am install-data \
627 install-data-am install-dvi install-dvi-am install-exec \
628 install-exec-am install-html install-html-am install-info \
629 install-info-am install-man install-pdf install-pdf-am \
630 install-ps install-ps-am install-strip installcheck \
631 installcheck-am installdirs installdirs-am maintainer-clean \
632 maintainer-clean-generic mostlyclean mostlyclean-generic \
633 mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
634 uninstall uninstall-am
635
636
637# Tell versions [3.59,3.63) of GNU make to not export all variables.
638# Otherwise a system limit (for SysV at least) may be exceeded.
639.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.am b/libraries/eina/src/modules/mp/buddy/Makefile.am
new file mode 100644
index 0000000..c699c9d
--- /dev/null
+++ b/libraries/eina/src/modules/mp/buddy/Makefile.am
@@ -0,0 +1,29 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EFL_EINA_BUILD@
11
12controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_buddy.c
17
18module_la_CFLAGS = @EINA_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
20module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
21module_la_LIBTOOLFLAGS = --tag=disable-static
22
23install-data-hook:
24 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
25uninstall-hook:
26 rm -f $(DESTDIR)$(controllerdir)/module.*
27
28clean-local:
29 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/buddy/Makefile.in b/libraries/eina/src/modules/mp/buddy/Makefile.in
new file mode 100644
index 0000000..64d7fc7
--- /dev/null
+++ b/libraries/eina/src/modules/mp/buddy/Makefile.in
@@ -0,0 +1,643 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/buddy
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_buddy.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EFL_EINA_BUILD@
302
303controllerdir = $(libdir)/eina/modules/mp/buddy/$(MODULE_ARCH)
304controller_LTLIBRARIES = module.la
305module_la_SOURCES = \
306eina_buddy.c
307
308module_la_CFLAGS = @EINA_CFLAGS@
309module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
310module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
311module_la_LIBTOOLFLAGS = --tag=disable-static
312all: all-am
313
314.SUFFIXES:
315.SUFFIXES: .c .lo .o .obj
316$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
317 @for dep in $?; do \
318 case '$(am__configure_deps)' in \
319 *$$dep*) \
320 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
321 && { if test -f $@; then exit 0; else break; fi; }; \
322 exit 1;; \
323 esac; \
324 done; \
325 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/buddy/Makefile'; \
326 $(am__cd) $(top_srcdir) && \
327 $(AUTOMAKE) --gnu src/modules/mp/buddy/Makefile
328.PRECIOUS: Makefile
329Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
330 @case '$?' in \
331 *config.status*) \
332 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
333 *) \
334 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
335 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
336 esac;
337
338$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
339 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
340
341$(top_srcdir)/configure: $(am__configure_deps)
342 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
343$(ACLOCAL_M4): $(am__aclocal_m4_deps)
344 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
345$(am__aclocal_m4_deps):
346install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
347 @$(NORMAL_INSTALL)
348 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
349 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
350 list2=; for p in $$list; do \
351 if test -f $$p; then \
352 list2="$$list2 $$p"; \
353 else :; fi; \
354 done; \
355 test -z "$$list2" || { \
356 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
357 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
358 }
359
360uninstall-controllerLTLIBRARIES:
361 @$(NORMAL_UNINSTALL)
362 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
363 for p in $$list; do \
364 $(am__strip_dir) \
365 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
366 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
367 done
368
369clean-controllerLTLIBRARIES:
370 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
371 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
372 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
373 test "$$dir" != "$$p" || dir=.; \
374 echo "rm -f \"$${dir}/so_locations\""; \
375 rm -f "$${dir}/so_locations"; \
376 done
377module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
378 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
379
380mostlyclean-compile:
381 -rm -f *.$(OBJEXT)
382
383distclean-compile:
384 -rm -f *.tab.c
385
386@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_buddy.Plo@am__quote@
387
388.c.o:
389@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
390@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
391@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
392@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
394@am__fastdepCC_FALSE@ $(COMPILE) -c $<
395
396.c.obj:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
398@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
399@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
400@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
402@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
403
404.c.lo:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
411
412module_la-eina_buddy.lo: eina_buddy.c
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_buddy.lo -MD -MP -MF $(DEPDIR)/module_la-eina_buddy.Tpo -c -o module_la-eina_buddy.lo `test -f 'eina_buddy.c' || echo '$(srcdir)/'`eina_buddy.c
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_buddy.Tpo $(DEPDIR)/module_la-eina_buddy.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_buddy.c' object='module_la-eina_buddy.lo' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_buddy.lo `test -f 'eina_buddy.c' || echo '$(srcdir)/'`eina_buddy.c
419
420mostlyclean-libtool:
421 -rm -f *.lo
422
423clean-libtool:
424 -rm -rf .libs _libs
425
426ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
427 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
428 unique=`for i in $$list; do \
429 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
430 done | \
431 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
432 END { if (nonempty) { for (i in files) print i; }; }'`; \
433 mkid -fID $$unique
434tags: TAGS
435
436TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
437 $(TAGS_FILES) $(LISP)
438 set x; \
439 here=`pwd`; \
440 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
441 unique=`for i in $$list; do \
442 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
443 done | \
444 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
445 END { if (nonempty) { for (i in files) print i; }; }'`; \
446 shift; \
447 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
448 test -n "$$unique" || unique=$$empty_fix; \
449 if test $$# -gt 0; then \
450 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
451 "$$@" $$unique; \
452 else \
453 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
454 $$unique; \
455 fi; \
456 fi
457ctags: CTAGS
458CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
459 $(TAGS_FILES) $(LISP)
460 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
461 unique=`for i in $$list; do \
462 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
463 done | \
464 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
465 END { if (nonempty) { for (i in files) print i; }; }'`; \
466 test -z "$(CTAGS_ARGS)$$unique" \
467 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
468 $$unique
469
470GTAGS:
471 here=`$(am__cd) $(top_builddir) && pwd` \
472 && $(am__cd) $(top_srcdir) \
473 && gtags -i $(GTAGS_ARGS) "$$here"
474
475distclean-tags:
476 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
477
478distdir: $(DISTFILES)
479 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
480 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 list='$(DISTFILES)'; \
482 dist_files=`for file in $$list; do echo $$file; done | \
483 sed -e "s|^$$srcdirstrip/||;t" \
484 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
485 case $$dist_files in \
486 */*) $(MKDIR_P) `echo "$$dist_files" | \
487 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
488 sort -u` ;; \
489 esac; \
490 for file in $$dist_files; do \
491 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
492 if test -d $$d/$$file; then \
493 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
494 if test -d "$(distdir)/$$file"; then \
495 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
496 fi; \
497 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
498 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
499 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
500 fi; \
501 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
502 else \
503 test -f "$(distdir)/$$file" \
504 || cp -p $$d/$$file "$(distdir)/$$file" \
505 || exit 1; \
506 fi; \
507 done
508check-am: all-am
509check: check-am
510all-am: Makefile $(LTLIBRARIES)
511installdirs:
512 for dir in "$(DESTDIR)$(controllerdir)"; do \
513 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
514 done
515install: install-am
516install-exec: install-exec-am
517install-data: install-data-am
518uninstall: uninstall-am
519
520install-am: all-am
521 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
522
523installcheck: installcheck-am
524install-strip:
525 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
526 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
527 `test -z '$(STRIP)' || \
528 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
529mostlyclean-generic:
530
531clean-generic:
532
533distclean-generic:
534 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
535 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
536
537maintainer-clean-generic:
538 @echo "This command is intended for maintainers to use"
539 @echo "it deletes files that may require special tools to rebuild."
540 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
541clean: clean-am
542
543clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
544 clean-local mostlyclean-am
545
546distclean: distclean-am
547 -rm -rf ./$(DEPDIR)
548 -rm -f Makefile
549distclean-am: clean-am distclean-compile distclean-generic \
550 distclean-tags
551
552dvi: dvi-am
553
554dvi-am:
555
556html: html-am
557
558html-am:
559
560info: info-am
561
562info-am:
563
564install-data-am: install-controllerLTLIBRARIES
565 @$(NORMAL_INSTALL)
566 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
567install-dvi: install-dvi-am
568
569install-dvi-am:
570
571install-exec-am:
572
573install-html: install-html-am
574
575install-html-am:
576
577install-info: install-info-am
578
579install-info-am:
580
581install-man:
582
583install-pdf: install-pdf-am
584
585install-pdf-am:
586
587install-ps: install-ps-am
588
589install-ps-am:
590
591installcheck-am:
592
593maintainer-clean: maintainer-clean-am
594 -rm -rf ./$(DEPDIR)
595 -rm -f Makefile
596maintainer-clean-am: distclean-am maintainer-clean-generic
597
598mostlyclean: mostlyclean-am
599
600mostlyclean-am: mostlyclean-compile mostlyclean-generic \
601 mostlyclean-libtool
602
603pdf: pdf-am
604
605pdf-am:
606
607ps: ps-am
608
609ps-am:
610
611uninstall-am: uninstall-controllerLTLIBRARIES
612 @$(NORMAL_INSTALL)
613 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
614.MAKE: install-am install-data-am install-strip uninstall-am
615
616.PHONY: CTAGS GTAGS all all-am check check-am clean \
617 clean-controllerLTLIBRARIES clean-generic clean-libtool \
618 clean-local ctags distclean distclean-compile \
619 distclean-generic distclean-libtool distclean-tags distdir dvi \
620 dvi-am html html-am info info-am install install-am \
621 install-controllerLTLIBRARIES install-data install-data-am \
622 install-data-hook install-dvi install-dvi-am install-exec \
623 install-exec-am install-html install-html-am install-info \
624 install-info-am install-man install-pdf install-pdf-am \
625 install-ps install-ps-am install-strip installcheck \
626 installcheck-am installdirs maintainer-clean \
627 maintainer-clean-generic mostlyclean mostlyclean-compile \
628 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
629 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
630 uninstall-hook
631
632
633install-data-hook:
634 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
635uninstall-hook:
636 rm -f $(DESTDIR)$(controllerdir)/module.*
637
638clean-local:
639 rm -rf *.gcno
640
641# Tell versions [3.59,3.63) of GNU make to not export all variables.
642# Otherwise a system limit (for SysV at least) may be exceeded.
643.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/buddy/eina_buddy.c b/libraries/eina/src/modules/mp/buddy/eina_buddy.c
new file mode 100644
index 0000000..f402c6f
--- /dev/null
+++ b/libraries/eina/src/modules/mp/buddy/eina_buddy.c
@@ -0,0 +1,292 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2009 Jorge Luis Zapata Muga
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19/*
20 * This is a naive 'buddy' allocator following Knuth's documentation.
21 * The main difference is that we dont store the block information
22 * on the block memory itself but on another malloc'd area.
23 * This is useful for managing memory which isn't as fast as the main
24 * memory like the video memory
25 * The algorithm uses an area to store the linked list of blocks.
26 * Each block size is equal to the minimum allocatable block size for
27 * the memory pool and the number of blocks is equal to the size of the
28 * memory pool divided by the block size.
29 */
30#ifdef HAVE_CONFIG_H
31# include "config.h"
32#endif
33
34#include <stdio.h>
35
36#include "eina_types.h"
37#include "eina_inlist.h"
38#include "eina_module.h"
39#include "eina_mempool.h"
40#include "eina_private.h"
41
42typedef struct _Block
43{
44 EINA_INLIST;
45 Eina_Bool available : 1;
46 unsigned short int order : 7; /* final order is order + min_order */
47} Block;
48
49typedef struct _Buddy
50{
51 void *heap; /* start address of the heap */
52 size_t size; /* total size in bytes of the heap */
53 unsigned int min_order; /* minimum size is 1 << min_order */
54 unsigned int max_order; /* maximum size is 1 << max_order */
55 unsigned int num_order; /* number of orders */
56 Eina_Inlist **areas; /* one area per order */
57 Block *blocks; /* the allocated block information */
58} Buddy;
59
60/* get the minimum order greater or equal to size */
61static inline unsigned int _get_order(Buddy *b, size_t size)
62{
63 unsigned int i;
64 size_t bytes;
65
66 bytes = 1 << b->min_order;
67 for (i = 0; bytes < size && i < b->num_order; i++)
68 {
69 bytes += bytes;
70 }
71 //printf("order for size %d is %d\n", size, i + b->min_order);
72 return i;
73}
74
75static inline void *_get_offset(Buddy *b, Block *block)
76{
77 void *ret;
78
79 ret = (char *)b->heap + ((block - &b->blocks[0]) << b->min_order);
80 return ret;
81}
82
83static void *_init(__UNUSED__ const char *context,
84 __UNUSED__ const char *options,
85 va_list args)
86{
87 Buddy *b;
88 int i;
89 size_t bytes;
90 size_t size;
91 size_t min_order;
92 void *heap;
93
94 heap = va_arg(args, void *);
95 size = va_arg(args, size_t);
96 min_order = va_arg(args, int);
97 /* the minimum order we support is 15 (32K) */
98 min_order = min_order < 15 ? 15 : min_order;
99 bytes = 1 << min_order;
100 for (i = 0; bytes <= size; i++)
101 {
102 bytes += bytes;
103 }
104 if (!i)
105 return NULL;
106
107 b = malloc(sizeof(Buddy));
108 b->heap = heap;
109 b->size = size;
110 b->min_order = min_order;
111 b->max_order = min_order + i - 1;
112 b->num_order = i;
113 b->areas = calloc(b->num_order, sizeof(Eina_Inlist *));
114 b->blocks = calloc(1 << (b->num_order - 1), sizeof(Block));
115 /* setup the initial free area */
116 b->blocks[0].available = EINA_TRUE;
117 b->areas[b->num_order - 1] = EINA_INLIST_GET(&(b->blocks[0]));
118
119 return b;
120}
121
122static void _shutdown(void *data)
123{
124 Buddy *b = data;
125
126 free(b->blocks);
127 free(b->areas);
128 free(b);
129}
130
131static void _free(void *data, void *element)
132{
133 Buddy *b = data;
134 Block *block, *buddy;
135 size_t offset;
136 size_t index;
137
138 offset = (unsigned char *)element - (unsigned char *)b->heap;
139 if (offset > b->size)
140 return;
141
142 index = offset >> b->min_order;
143 block = &b->blocks[index];
144
145 //printf("free %x index = %d order = %d buddy = %d\n", offset, index, block->order, index ^ (1 << block->order));
146 /* we should always work with the buddy at right */
147 if (index & (1 << block->order))
148 {
149 Block *left;
150
151 index = index ^ (1 << block->order);
152 left = &b->blocks[index];
153 if (!left->available)
154 goto end;
155 else
156 {
157 buddy = block;
158 block = left;
159 b->areas[block->order] = eina_inlist_remove(b->areas[block->order],
160 EINA_INLIST_GET(block));
161 block->order++;
162 }
163 }
164
165check:
166 /* already on the last order */
167 if (block->order + b->min_order == b->max_order)
168 {
169 goto end; /* get the buddy */
170
171 }
172
173 buddy = &b->blocks[index ^ (1 << block->order)];
174 if (!buddy->available)
175 {
176 goto end; /* merge two blocks */
177
178 }
179
180 b->areas[block->order] = eina_inlist_remove(b->areas[block->order],
181 EINA_INLIST_GET(buddy));
182 block->order++;
183 goto check;
184end:
185 /* add the block to the free list */
186 block->available = EINA_TRUE;
187 b->areas[block->order] = eina_inlist_append(b->areas[block->order],
188 EINA_INLIST_GET(block));
189}
190
191static void *_alloc(void *data, unsigned int size)
192{
193 Buddy *b = data;
194 Block *block, *buddy;
195 unsigned int k, j;
196
197 k = j = _get_order(b, size);
198 /* get a free list of order k where k <= j <= max_order */
199 while ((j < b->num_order) && !b->areas[j])
200 j++;
201 /* check that the order is on our range */
202 if (j + b->min_order > b->max_order)
203 return NULL;
204
205 /* get a free element on this order, if not, go splitting until we find one */
206 //printf("getting order %d (%d) for size %d\n", j, k, size);
207found:
208 if (j == k)
209 {
210 void *ret;
211
212 block = EINA_INLIST_CONTAINER_GET(b->areas[j], Block);
213 block->available = EINA_FALSE;
214 block->order = j;
215 /* remove the block from the list */
216 b->areas[j] = eina_inlist_remove(b->areas[j], EINA_INLIST_GET(block));
217 ret = _get_offset(b, block);
218
219 return ret;
220 }
221
222 block = EINA_INLIST_CONTAINER_GET(b->areas[j], Block);
223 /* split */
224 b->areas[j] = eina_inlist_remove(b->areas[j], EINA_INLIST_GET(block));
225 j--;
226 b->areas[j] = eina_inlist_append(b->areas[j], EINA_INLIST_GET(block));
227 buddy = block + (1 << j);
228 buddy->order = j;
229 buddy->available = EINA_TRUE;
230 b->areas[j] = eina_inlist_append(b->areas[j], EINA_INLIST_GET(buddy));
231
232 goto found;
233}
234
235static void _statistics(void *data)
236{
237 Buddy *b = data;
238 unsigned int i;
239
240 printf("Information:\n");
241 printf(
242 "size = %li, min_order = %d, max_order = %d, num_order = %d, num_blocks = %d (%luKB)\n",
243 b->size,
244 b->min_order,
245 b->max_order,
246 b->num_order,
247 1 << b->num_order,
248 ((1 << (b->num_order)) * sizeof(Block)) / 1024);
249 printf("Area dumping:");
250 /* iterate over the free lists and dump the maps */
251 for (i = 0; i < b->num_order; i++)
252 {
253 Block *block;
254
255 printf("\n2^%d:", b->min_order + i);
256 EINA_INLIST_FOREACH(b->areas[i], block)
257 {
258 printf(" %li", (block - &b->blocks[0]));
259 }
260 }
261 printf("\nBlocks dumping:\n");
262}
263
264static Eina_Mempool_Backend _backend = {
265 "buddy",
266 &_init,
267 &_free,
268 &_alloc,
269 NULL, /* realloc */
270 NULL, /* garbage collect */
271 &_statistics,
272 &_shutdown,
273 NULL /* repack */
274};
275
276Eina_Bool buddy_init(void)
277{
278 return eina_mempool_register(&_backend);
279}
280
281void buddy_shutdown(void)
282{
283 eina_mempool_unregister(&_backend);
284}
285
286
287#ifndef EINA_STATIC_BUILD_BUDDY
288
289EINA_MODULE_INIT(buddy_init);
290EINA_MODULE_SHUTDOWN(buddy_shutdown);
291
292#endif /* ! EINA_STATIC_BUILD_BUDDY */
diff --git a/libraries/eina/src/modules/mp/chained_pool/Makefile.am b/libraries/eina/src/modules/mp/chained_pool/Makefile.am
new file mode 100644
index 0000000..815bab7
--- /dev/null
+++ b/libraries/eina/src/modules/mp/chained_pool/Makefile.am
@@ -0,0 +1,30 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EFL_EINA_BUILD@ \
11@VALGRIND_CFLAGS@
12
13controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH)
14controller_LTLIBRARIES = module.la
15
16module_la_SOURCES = \
17eina_chained_mempool.c
18
19module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
20module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
21module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
22module_la_LIBTOOLFLAGS = --tag=disable-static
23
24install-data-hook:
25 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
26uninstall-hook:
27 rm -f $(DESTDIR)$(controllerdir)/module.*
28
29clean-local:
30 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/chained_pool/Makefile.in b/libraries/eina/src/modules/mp/chained_pool/Makefile.in
new file mode 100644
index 0000000..b728672
--- /dev/null
+++ b/libraries/eina/src/modules/mp/chained_pool/Makefile.in
@@ -0,0 +1,644 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/chained_pool
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_chained_mempool.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EFL_EINA_BUILD@ \
302@VALGRIND_CFLAGS@
303
304controllerdir = $(libdir)/eina/modules/mp/chained_pool/$(MODULE_ARCH)
305controller_LTLIBRARIES = module.la
306module_la_SOURCES = \
307eina_chained_mempool.c
308
309module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
310module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
311module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
312module_la_LIBTOOLFLAGS = --tag=disable-static
313all: all-am
314
315.SUFFIXES:
316.SUFFIXES: .c .lo .o .obj
317$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
318 @for dep in $?; do \
319 case '$(am__configure_deps)' in \
320 *$$dep*) \
321 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
322 && { if test -f $@; then exit 0; else break; fi; }; \
323 exit 1;; \
324 esac; \
325 done; \
326 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/chained_pool/Makefile'; \
327 $(am__cd) $(top_srcdir) && \
328 $(AUTOMAKE) --gnu src/modules/mp/chained_pool/Makefile
329.PRECIOUS: Makefile
330Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
331 @case '$?' in \
332 *config.status*) \
333 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
334 *) \
335 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
336 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
337 esac;
338
339$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
340 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
341
342$(top_srcdir)/configure: $(am__configure_deps)
343 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
344$(ACLOCAL_M4): $(am__aclocal_m4_deps)
345 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
346$(am__aclocal_m4_deps):
347install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
348 @$(NORMAL_INSTALL)
349 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
350 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
351 list2=; for p in $$list; do \
352 if test -f $$p; then \
353 list2="$$list2 $$p"; \
354 else :; fi; \
355 done; \
356 test -z "$$list2" || { \
357 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
358 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
359 }
360
361uninstall-controllerLTLIBRARIES:
362 @$(NORMAL_UNINSTALL)
363 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
364 for p in $$list; do \
365 $(am__strip_dir) \
366 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
367 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
368 done
369
370clean-controllerLTLIBRARIES:
371 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
372 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
373 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
374 test "$$dir" != "$$p" || dir=.; \
375 echo "rm -f \"$${dir}/so_locations\""; \
376 rm -f "$${dir}/so_locations"; \
377 done
378module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
379 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
380
381mostlyclean-compile:
382 -rm -f *.$(OBJEXT)
383
384distclean-compile:
385 -rm -f *.tab.c
386
387@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_chained_mempool.Plo@am__quote@
388
389.c.o:
390@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
391@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
392@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
394@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
395@am__fastdepCC_FALSE@ $(COMPILE) -c $<
396
397.c.obj:
398@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
399@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
400@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
402@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
403@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
404
405.c.lo:
406@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
407@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
408@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
410@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
411@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
412
413module_la-eina_chained_mempool.lo: eina_chained_mempool.c
414@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_chained_mempool.lo -MD -MP -MF $(DEPDIR)/module_la-eina_chained_mempool.Tpo -c -o module_la-eina_chained_mempool.lo `test -f 'eina_chained_mempool.c' || echo '$(srcdir)/'`eina_chained_mempool.c
415@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_chained_mempool.Tpo $(DEPDIR)/module_la-eina_chained_mempool.Plo
416@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_chained_mempool.c' object='module_la-eina_chained_mempool.lo' libtool=yes @AMDEPBACKSLASH@
418@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
419@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_chained_mempool.lo `test -f 'eina_chained_mempool.c' || echo '$(srcdir)/'`eina_chained_mempool.c
420
421mostlyclean-libtool:
422 -rm -f *.lo
423
424clean-libtool:
425 -rm -rf .libs _libs
426
427ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
428 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
429 unique=`for i in $$list; do \
430 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
431 done | \
432 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
433 END { if (nonempty) { for (i in files) print i; }; }'`; \
434 mkid -fID $$unique
435tags: TAGS
436
437TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
438 $(TAGS_FILES) $(LISP)
439 set x; \
440 here=`pwd`; \
441 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
442 unique=`for i in $$list; do \
443 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
444 done | \
445 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
446 END { if (nonempty) { for (i in files) print i; }; }'`; \
447 shift; \
448 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
449 test -n "$$unique" || unique=$$empty_fix; \
450 if test $$# -gt 0; then \
451 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
452 "$$@" $$unique; \
453 else \
454 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
455 $$unique; \
456 fi; \
457 fi
458ctags: CTAGS
459CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
460 $(TAGS_FILES) $(LISP)
461 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
462 unique=`for i in $$list; do \
463 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
464 done | \
465 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
466 END { if (nonempty) { for (i in files) print i; }; }'`; \
467 test -z "$(CTAGS_ARGS)$$unique" \
468 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
469 $$unique
470
471GTAGS:
472 here=`$(am__cd) $(top_builddir) && pwd` \
473 && $(am__cd) $(top_srcdir) \
474 && gtags -i $(GTAGS_ARGS) "$$here"
475
476distclean-tags:
477 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
478
479distdir: $(DISTFILES)
480 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
482 list='$(DISTFILES)'; \
483 dist_files=`for file in $$list; do echo $$file; done | \
484 sed -e "s|^$$srcdirstrip/||;t" \
485 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
486 case $$dist_files in \
487 */*) $(MKDIR_P) `echo "$$dist_files" | \
488 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
489 sort -u` ;; \
490 esac; \
491 for file in $$dist_files; do \
492 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
493 if test -d $$d/$$file; then \
494 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
495 if test -d "$(distdir)/$$file"; then \
496 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
497 fi; \
498 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
499 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
500 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
501 fi; \
502 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
503 else \
504 test -f "$(distdir)/$$file" \
505 || cp -p $$d/$$file "$(distdir)/$$file" \
506 || exit 1; \
507 fi; \
508 done
509check-am: all-am
510check: check-am
511all-am: Makefile $(LTLIBRARIES)
512installdirs:
513 for dir in "$(DESTDIR)$(controllerdir)"; do \
514 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
515 done
516install: install-am
517install-exec: install-exec-am
518install-data: install-data-am
519uninstall: uninstall-am
520
521install-am: all-am
522 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
523
524installcheck: installcheck-am
525install-strip:
526 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
527 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
528 `test -z '$(STRIP)' || \
529 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
530mostlyclean-generic:
531
532clean-generic:
533
534distclean-generic:
535 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
536 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
537
538maintainer-clean-generic:
539 @echo "This command is intended for maintainers to use"
540 @echo "it deletes files that may require special tools to rebuild."
541 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
542clean: clean-am
543
544clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
545 clean-local mostlyclean-am
546
547distclean: distclean-am
548 -rm -rf ./$(DEPDIR)
549 -rm -f Makefile
550distclean-am: clean-am distclean-compile distclean-generic \
551 distclean-tags
552
553dvi: dvi-am
554
555dvi-am:
556
557html: html-am
558
559html-am:
560
561info: info-am
562
563info-am:
564
565install-data-am: install-controllerLTLIBRARIES
566 @$(NORMAL_INSTALL)
567 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
568install-dvi: install-dvi-am
569
570install-dvi-am:
571
572install-exec-am:
573
574install-html: install-html-am
575
576install-html-am:
577
578install-info: install-info-am
579
580install-info-am:
581
582install-man:
583
584install-pdf: install-pdf-am
585
586install-pdf-am:
587
588install-ps: install-ps-am
589
590install-ps-am:
591
592installcheck-am:
593
594maintainer-clean: maintainer-clean-am
595 -rm -rf ./$(DEPDIR)
596 -rm -f Makefile
597maintainer-clean-am: distclean-am maintainer-clean-generic
598
599mostlyclean: mostlyclean-am
600
601mostlyclean-am: mostlyclean-compile mostlyclean-generic \
602 mostlyclean-libtool
603
604pdf: pdf-am
605
606pdf-am:
607
608ps: ps-am
609
610ps-am:
611
612uninstall-am: uninstall-controllerLTLIBRARIES
613 @$(NORMAL_INSTALL)
614 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
615.MAKE: install-am install-data-am install-strip uninstall-am
616
617.PHONY: CTAGS GTAGS all all-am check check-am clean \
618 clean-controllerLTLIBRARIES clean-generic clean-libtool \
619 clean-local ctags distclean distclean-compile \
620 distclean-generic distclean-libtool distclean-tags distdir dvi \
621 dvi-am html html-am info info-am install install-am \
622 install-controllerLTLIBRARIES install-data install-data-am \
623 install-data-hook install-dvi install-dvi-am install-exec \
624 install-exec-am install-html install-html-am install-info \
625 install-info-am install-man install-pdf install-pdf-am \
626 install-ps install-ps-am install-strip installcheck \
627 installcheck-am installdirs maintainer-clean \
628 maintainer-clean-generic mostlyclean mostlyclean-compile \
629 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
630 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
631 uninstall-hook
632
633
634install-data-hook:
635 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
636uninstall-hook:
637 rm -f $(DESTDIR)$(controllerdir)/module.*
638
639clean-local:
640 rm -rf *.gcno
641
642# Tell versions [3.59,3.63) of GNU make to not export all variables.
643# Otherwise a system limit (for SysV at least) may be exceeded.
644.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c b/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c
new file mode 100644
index 0000000..009b62b
--- /dev/null
+++ b/libraries/eina/src/modules/mp/chained_pool/eina_chained_mempool.c
@@ -0,0 +1,547 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008-2010 Cedric BAIL, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <string.h>
25
26#ifdef EFL_HAVE_POSIX_THREADS
27#include <pthread.h>
28
29# ifdef EFL_DEBUG_THREADS
30# include <assert.h>
31# endif
32#endif
33
34#ifdef EFL_HAVE_WIN32_THREADS
35# define WIN32_LEAN_AND_MEAN
36# include <windows.h>
37# undef WIN32_LEAN_AND_MEAN
38#endif
39
40#include "eina_inlist.h"
41#include "eina_error.h"
42#include "eina_module.h"
43#include "eina_mempool.h"
44#include "eina_trash.h"
45#include "eina_rbtree.h"
46#include "eina_lock.h"
47
48#include "eina_private.h"
49
50#ifndef NVALGRIND
51# include <valgrind/memcheck.h>
52#endif
53
54#ifdef DEBUG
55#include <assert.h>
56#include "eina_log.h"
57
58static int _eina_chained_mp_log_dom = -1;
59
60#ifdef INF
61#undef INF
62#endif
63#define INF(...) EINA_LOG_DOM_INFO(_eina_chained_mp_log_dom, __VA_ARGS__)
64#endif
65
66typedef struct _Chained_Mempool Chained_Mempool;
67struct _Chained_Mempool
68{
69 Eina_Inlist *first;
70 Eina_Rbtree *root;
71 const char *name;
72 int item_alloc;
73 int pool_size;
74 int alloc_size;
75 int group_size;
76 int usage;
77#ifdef EFL_DEBUG_THREADS
78 pthread_t self;
79#endif
80 Eina_Lock mutex;
81};
82
83typedef struct _Chained_Pool Chained_Pool;
84struct _Chained_Pool
85{
86 EINA_INLIST;
87 EINA_RBTREE;
88 Eina_Trash *base;
89 int usage;
90
91 unsigned char *last;
92 unsigned char *limit;
93};
94
95static inline Eina_Rbtree_Direction
96_eina_chained_mp_pool_cmp(const Eina_Rbtree *left, const Eina_Rbtree *right, __UNUSED__ void *data)
97{
98 if (left < right) return EINA_RBTREE_LEFT;
99 return EINA_RBTREE_RIGHT;
100}
101
102static inline int
103_eina_chained_mp_pool_key_cmp(const Eina_Rbtree *node, const void *key,
104 __UNUSED__ int length, __UNUSED__ void *data)
105{
106 const Chained_Pool *r = EINA_RBTREE_CONTAINER_GET(node, const Chained_Pool);
107
108 if (key > (void *) r->limit) return -1;
109 if (key < (void *) r) return 1;
110 return 0;
111}
112
113static inline Chained_Pool *
114_eina_chained_mp_pool_new(Chained_Mempool *pool)
115{
116 Chained_Pool *p;
117 unsigned char *ptr;
118 unsigned int alignof;
119
120 eina_error_set(0);
121 p = malloc(pool->alloc_size);
122 if (!p)
123 {
124 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
125 return NULL;
126 }
127
128 alignof = eina_mempool_alignof(sizeof(Chained_Pool));
129 ptr = (unsigned char *)p + alignof;
130 p->usage = 0;
131 p->base = NULL;
132
133 p->last = ptr;
134 p->limit = ptr + pool->item_alloc * pool->pool_size;
135
136#ifndef NVALGRIND
137 VALGRIND_MAKE_MEM_NOACCESS(ptr, pool->alloc_size - alignof);
138#endif
139
140 return p;
141}
142
143static inline void
144_eina_chained_mp_pool_free(Chained_Pool *p)
145{
146 free(p);
147}
148
149static int
150_eina_chained_mempool_usage_cmp(const Eina_Inlist *l1, const Eina_Inlist *l2)
151{
152 const Chained_Pool *p1;
153 const Chained_Pool *p2;
154
155 p1 = EINA_INLIST_CONTAINER_GET(l1, const Chained_Pool);
156 p2 = EINA_INLIST_CONTAINER_GET(l2, const Chained_Pool);
157
158 return p2->usage - p1->usage;
159}
160
161static void *
162_eina_chained_mempool_alloc_in(Chained_Mempool *pool, Chained_Pool *p)
163{
164 void *mem;
165
166 if (p->last)
167 {
168 mem = p->last;
169 p->last += pool->item_alloc;
170 if (p->last >= p->limit)
171 p->last = NULL;
172 }
173 else
174 {
175#ifndef NVALGRIND
176 VALGRIND_MAKE_MEM_DEFINED(p->base, pool->item_alloc);
177#endif
178 // Request a free pointer
179 mem = eina_trash_pop(&p->base);
180 }
181
182 // move to end - it just filled up
183 if (!p->base && !p->last)
184 pool->first = eina_inlist_demote(pool->first, EINA_INLIST_GET(p));
185
186 p->usage++;
187 pool->usage++;
188
189#ifndef NVALGRIND
190 VALGRIND_MEMPOOL_ALLOC(pool, mem, pool->item_alloc);
191#endif
192
193 return mem;
194}
195
196static Eina_Bool
197_eina_chained_mempool_free_in(Chained_Mempool *pool, Chained_Pool *p, void *ptr)
198{
199 void *pmem;
200
201 // pool mem base
202 pmem = (void *)(((unsigned char *)p) + sizeof(Chained_Pool));
203
204 // is it in pool mem?
205 if (ptr < pmem)
206 {
207#ifdef DEBUG
208 INF("%p is inside the private part of %p pool from %p Chained_Mempool (could be the sign of a buffer underrun).", ptr, p, pool);
209#endif
210 return EINA_FALSE;
211 }
212
213 // freed node points to prev free node
214 eina_trash_push(&p->base, ptr);
215 // next free node is now the one we freed
216 p->usage--;
217 pool->usage--;
218 if (p->usage == 0)
219 {
220 // free bucket
221 pool->first = eina_inlist_remove(pool->first, EINA_INLIST_GET(p));
222 pool->root = eina_rbtree_inline_remove(pool->root, EINA_RBTREE_GET(p),
223 _eina_chained_mp_pool_cmp, NULL);
224 _eina_chained_mp_pool_free(p);
225
226 return EINA_TRUE;
227 }
228 else
229 {
230 // move to front
231 pool->first = eina_inlist_promote(pool->first, EINA_INLIST_GET(p));
232 }
233
234 return EINA_FALSE;
235}
236
237static void *
238eina_chained_mempool_malloc(void *data, __UNUSED__ unsigned int size)
239{
240 Chained_Mempool *pool = data;
241 Chained_Pool *p = NULL;
242 void *mem;
243
244 if (!eina_lock_take(&pool->mutex))
245 {
246#ifdef EFL_DEBUG_THREADS
247 assert(pthread_equal(pool->self, pthread_self()));
248#endif
249 }
250
251 // Either we have some free space in the first one, or there is no free space.
252 if (pool->first) p = EINA_INLIST_CONTAINER_GET(pool->first, Chained_Pool);
253
254 // base is not NULL - has a free slot
255 if (p && !p->base && !p->last)
256 p = NULL;
257
258#ifdef DEBUG
259 if (p == NULL)
260 EINA_INLIST_FOREACH(pool->first, p)
261 assert(!p->base && !p->last);
262#endif
263
264 // we have reached the end of the list - no free pools
265 if (!p)
266 {
267 p = _eina_chained_mp_pool_new(pool);
268 if (!p)
269 {
270 eina_lock_release(&pool->mutex);
271 return NULL;
272 }
273
274 pool->first = eina_inlist_prepend(pool->first, EINA_INLIST_GET(p));
275 pool->root = eina_rbtree_inline_insert(pool->root, EINA_RBTREE_GET(p),
276 _eina_chained_mp_pool_cmp, NULL);
277 }
278
279 mem = _eina_chained_mempool_alloc_in(pool, p);
280
281 eina_lock_release(&pool->mutex);
282
283 return mem;
284}
285
286static void
287eina_chained_mempool_free(void *data, void *ptr)
288{
289 Chained_Mempool *pool = data;
290 Eina_Rbtree *r;
291 Chained_Pool *p;
292
293 // look 4 pool
294 if (!eina_lock_take(&pool->mutex))
295 {
296#ifdef EFL_DEBUG_THREADS
297 assert(pthread_equal(pool->self, pthread_self()));
298#endif
299 }
300
301 // searching for the right mempool
302 r = eina_rbtree_inline_lookup(pool->root, ptr, 0, _eina_chained_mp_pool_key_cmp, NULL);
303
304 // related mempool not found
305 if (!r)
306 {
307#ifdef DEBUG
308 INF("%p is not the property of %p Chained_Mempool", ptr, pool);
309#endif
310 goto on_error;
311 }
312
313 p = EINA_RBTREE_CONTAINER_GET(r, Chained_Pool);
314
315 _eina_chained_mempool_free_in(pool, p, ptr);
316
317 on_error:
318#ifndef NVALGRIND
319 if (ptr)
320 {
321 VALGRIND_MEMPOOL_FREE(pool, ptr);
322 }
323#endif
324
325 eina_lock_release(&pool->mutex);
326 return;
327}
328
329static void
330eina_chained_mempool_repack(void *data,
331 Eina_Mempool_Repack_Cb cb,
332 void *cb_data)
333{
334 Chained_Mempool *pool = data;
335 Chained_Pool *start;
336 Chained_Pool *tail;
337
338 /* FIXME: Improvement - per Chained_Pool lock */
339 if (!eina_lock_take(&pool->mutex))
340 {
341#ifdef EFL_DEBUG_THREADS
342 assert(pthread_equal(pool->self, pthread_self()));
343#endif
344 }
345
346 pool->first = eina_inlist_sort(pool->first,
347 (Eina_Compare_Cb) _eina_chained_mempool_usage_cmp);
348
349 /*
350 idea : remove the almost empty pool at the beginning of the list by
351 moving data in the last pool with empty slot
352 */
353 tail = EINA_INLIST_CONTAINER_GET(pool->first->last, Chained_Pool);
354 while (tail && tail->usage == pool->pool_size)
355 tail = EINA_INLIST_CONTAINER_GET((EINA_INLIST_GET(tail)->prev), Chained_Pool);
356
357 while (tail)
358 {
359 unsigned char *src;
360 unsigned char *dst;
361
362 start = EINA_INLIST_CONTAINER_GET(pool->first, Chained_Pool);
363
364 if (start == tail || start->usage == pool->pool_size)
365 break;
366
367 for (src = start->limit - pool->group_size;
368 src != start->limit;
369 src += pool->item_alloc)
370 {
371 Eina_Bool is_free = EINA_FALSE;
372 Eina_Bool is_dead;
373
374 /* Do we have something inside that piece of memory */
375 if (start->last != NULL && src >= start->last)
376 {
377 is_free = EINA_TRUE;
378 }
379 else
380 {
381 Eina_Trash *over = start->base;
382
383 while (over != NULL && (unsigned char*) over != src)
384 over = over->next;
385
386 if (over == NULL)
387 is_free = EINA_TRUE;
388 }
389
390 if (is_free) continue ;
391
392 /* get a new memory pointer from the latest most occuped pool */
393 dst = _eina_chained_mempool_alloc_in(pool, tail);
394 /* move data from one to another */
395 memcpy(dst, src, pool->item_alloc);
396 /* notify caller */
397 cb(dst, src, cb_data);
398 /* destroy old pointer */
399 is_dead = _eina_chained_mempool_free_in(pool, start, src);
400
401 /* search last tail with empty slot */
402 while (tail && tail->usage == pool->pool_size)
403 tail = EINA_INLIST_CONTAINER_GET((EINA_INLIST_GET(tail)->prev),
404 Chained_Pool);
405 /* no more free space */
406 if (!tail || tail == start) break;
407 if (is_dead) break;
408 }
409 }
410
411 /* FIXME: improvement - reorder pool so that the most used one get in front */
412 eina_lock_release(&pool->mutex);
413}
414
415static void *
416eina_chained_mempool_realloc(__UNUSED__ void *data,
417 __UNUSED__ void *element,
418 __UNUSED__ unsigned int size)
419{
420 return NULL;
421}
422
423static void *
424eina_chained_mempool_init(const char *context,
425 __UNUSED__ const char *option,
426 va_list args)
427{
428 Chained_Mempool *mp;
429 int item_size;
430 size_t length;
431
432 length = context ? strlen(context) + 1 : 0;
433
434 mp = calloc(1, sizeof(Chained_Mempool) + length);
435 if (!mp)
436 return NULL;
437
438 item_size = va_arg(args, int);
439 mp->pool_size = va_arg(args, int);
440
441 if (length)
442 {
443 mp->name = (const char *)(mp + 1);
444 memcpy((char *)mp->name, context, length);
445 }
446
447 mp->item_alloc = eina_mempool_alignof(item_size);
448 mp->group_size = mp->item_alloc * mp->pool_size;
449 mp->alloc_size = mp->group_size + eina_mempool_alignof(sizeof(Chained_Pool));
450
451#ifndef NVALGRIND
452 VALGRIND_CREATE_MEMPOOL(mp, 0, 1);
453#endif
454
455#ifdef EFL_DEBUG_THREADS
456 mp->self = pthread_self();
457#endif
458
459 eina_lock_new(&mp->mutex);
460
461 return mp;
462}
463
464static void
465eina_chained_mempool_shutdown(void *data)
466{
467 Chained_Mempool *mp;
468
469 mp = (Chained_Mempool *)data;
470
471 while (mp->first)
472 {
473 Chained_Pool *p = (Chained_Pool *)mp->first;
474
475#ifdef DEBUG
476 if (p->usage > 0)
477 INF("Bad news we are destroying not an empty mempool [%s]\n",
478 mp->name);
479
480#endif
481
482 mp->first = eina_inlist_remove(mp->first, mp->first);
483 mp->root = eina_rbtree_inline_remove(mp->root, EINA_RBTREE_GET(p),
484 _eina_chained_mp_pool_cmp, NULL);
485 _eina_chained_mp_pool_free(p);
486 }
487
488#ifdef DEBUG
489 if (mp->root)
490 INF("Bad news, list of pool and rbtree are out of sync for %p !", mp);
491#endif
492
493#ifndef NVALGRIND
494 VALGRIND_DESTROY_MEMPOOL(mp);
495#endif
496
497 eina_lock_free(&mp->mutex);
498
499#ifdef EFL_DEBUG_THREADS
500 assert(pthread_equal(mp->self, pthread_self()));
501#endif
502
503 free(mp);
504}
505
506static Eina_Mempool_Backend _eina_chained_mp_backend = {
507 "chained_mempool",
508 &eina_chained_mempool_init,
509 &eina_chained_mempool_free,
510 &eina_chained_mempool_malloc,
511 &eina_chained_mempool_realloc,
512 NULL,
513 NULL,
514 &eina_chained_mempool_shutdown,
515 &eina_chained_mempool_repack
516};
517
518Eina_Bool chained_init(void)
519{
520#ifdef DEBUG
521 _eina_chained_mp_log_dom = eina_log_domain_register("eina_mempool",
522 EINA_LOG_COLOR_DEFAULT);
523 if (_eina_chained_mp_log_dom < 0)
524 {
525 EINA_LOG_ERR("Could not register log domain: eina_mempool");
526 return EINA_FALSE;
527 }
528
529#endif
530 return eina_mempool_register(&_eina_chained_mp_backend);
531}
532
533void chained_shutdown(void)
534{
535 eina_mempool_unregister(&_eina_chained_mp_backend);
536#ifdef DEBUG
537 eina_log_domain_unregister(_eina_chained_mp_log_dom);
538 _eina_chained_mp_log_dom = -1;
539#endif
540}
541
542#ifndef EINA_STATIC_BUILD_CHAINED_POOL
543
544EINA_MODULE_INIT(chained_init);
545EINA_MODULE_SHUTDOWN(chained_shutdown);
546
547#endif /* ! EINA_STATIC_BUILD_CHAINED_POOL */
diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am
new file mode 100644
index 0000000..4a27b3e
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.am
@@ -0,0 +1,30 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EMEMOA_CFLAGS@ \
11@EFL_EINA_BUILD@
12
13controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH)
14controller_LTLIBRARIES = module.la
15
16module_la_SOURCES = \
17eina_ememoa_fixed.c
18
19module_la_CFLAGS = @EINA_CFLAGS@
20module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
21module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
22module_la_LIBTOOLFLAGS = --tag=disable-static
23
24install-data-hook:
25 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
26uninstall-hook:
27 rm -f $(DESTDIR)$(controllerdir)/module.*
28
29clean-local:
30 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in
new file mode 100644
index 0000000..ec97bb1
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_fixed/Makefile.in
@@ -0,0 +1,644 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/ememoa_fixed
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_ememoa_fixed.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EMEMOA_CFLAGS@ \
302@EFL_EINA_BUILD@
303
304controllerdir = $(libdir)/eina/modules/mp/ememoa_fixed/$(MODULE_ARCH)
305controller_LTLIBRARIES = module.la
306module_la_SOURCES = \
307eina_ememoa_fixed.c
308
309module_la_CFLAGS = @EINA_CFLAGS@
310module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
311module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
312module_la_LIBTOOLFLAGS = --tag=disable-static
313all: all-am
314
315.SUFFIXES:
316.SUFFIXES: .c .lo .o .obj
317$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
318 @for dep in $?; do \
319 case '$(am__configure_deps)' in \
320 *$$dep*) \
321 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
322 && { if test -f $@; then exit 0; else break; fi; }; \
323 exit 1;; \
324 esac; \
325 done; \
326 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/ememoa_fixed/Makefile'; \
327 $(am__cd) $(top_srcdir) && \
328 $(AUTOMAKE) --gnu src/modules/mp/ememoa_fixed/Makefile
329.PRECIOUS: Makefile
330Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
331 @case '$?' in \
332 *config.status*) \
333 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
334 *) \
335 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
336 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
337 esac;
338
339$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
340 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
341
342$(top_srcdir)/configure: $(am__configure_deps)
343 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
344$(ACLOCAL_M4): $(am__aclocal_m4_deps)
345 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
346$(am__aclocal_m4_deps):
347install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
348 @$(NORMAL_INSTALL)
349 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
350 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
351 list2=; for p in $$list; do \
352 if test -f $$p; then \
353 list2="$$list2 $$p"; \
354 else :; fi; \
355 done; \
356 test -z "$$list2" || { \
357 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
358 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
359 }
360
361uninstall-controllerLTLIBRARIES:
362 @$(NORMAL_UNINSTALL)
363 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
364 for p in $$list; do \
365 $(am__strip_dir) \
366 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
367 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
368 done
369
370clean-controllerLTLIBRARIES:
371 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
372 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
373 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
374 test "$$dir" != "$$p" || dir=.; \
375 echo "rm -f \"$${dir}/so_locations\""; \
376 rm -f "$${dir}/so_locations"; \
377 done
378module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
379 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
380
381mostlyclean-compile:
382 -rm -f *.$(OBJEXT)
383
384distclean-compile:
385 -rm -f *.tab.c
386
387@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_ememoa_fixed.Plo@am__quote@
388
389.c.o:
390@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
391@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
392@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
394@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
395@am__fastdepCC_FALSE@ $(COMPILE) -c $<
396
397.c.obj:
398@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
399@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
400@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
402@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
403@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
404
405.c.lo:
406@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
407@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
408@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
410@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
411@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
412
413module_la-eina_ememoa_fixed.lo: eina_ememoa_fixed.c
414@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_ememoa_fixed.lo -MD -MP -MF $(DEPDIR)/module_la-eina_ememoa_fixed.Tpo -c -o module_la-eina_ememoa_fixed.lo `test -f 'eina_ememoa_fixed.c' || echo '$(srcdir)/'`eina_ememoa_fixed.c
415@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_ememoa_fixed.Tpo $(DEPDIR)/module_la-eina_ememoa_fixed.Plo
416@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ememoa_fixed.c' object='module_la-eina_ememoa_fixed.lo' libtool=yes @AMDEPBACKSLASH@
418@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
419@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_ememoa_fixed.lo `test -f 'eina_ememoa_fixed.c' || echo '$(srcdir)/'`eina_ememoa_fixed.c
420
421mostlyclean-libtool:
422 -rm -f *.lo
423
424clean-libtool:
425 -rm -rf .libs _libs
426
427ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
428 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
429 unique=`for i in $$list; do \
430 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
431 done | \
432 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
433 END { if (nonempty) { for (i in files) print i; }; }'`; \
434 mkid -fID $$unique
435tags: TAGS
436
437TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
438 $(TAGS_FILES) $(LISP)
439 set x; \
440 here=`pwd`; \
441 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
442 unique=`for i in $$list; do \
443 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
444 done | \
445 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
446 END { if (nonempty) { for (i in files) print i; }; }'`; \
447 shift; \
448 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
449 test -n "$$unique" || unique=$$empty_fix; \
450 if test $$# -gt 0; then \
451 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
452 "$$@" $$unique; \
453 else \
454 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
455 $$unique; \
456 fi; \
457 fi
458ctags: CTAGS
459CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
460 $(TAGS_FILES) $(LISP)
461 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
462 unique=`for i in $$list; do \
463 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
464 done | \
465 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
466 END { if (nonempty) { for (i in files) print i; }; }'`; \
467 test -z "$(CTAGS_ARGS)$$unique" \
468 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
469 $$unique
470
471GTAGS:
472 here=`$(am__cd) $(top_builddir) && pwd` \
473 && $(am__cd) $(top_srcdir) \
474 && gtags -i $(GTAGS_ARGS) "$$here"
475
476distclean-tags:
477 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
478
479distdir: $(DISTFILES)
480 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
482 list='$(DISTFILES)'; \
483 dist_files=`for file in $$list; do echo $$file; done | \
484 sed -e "s|^$$srcdirstrip/||;t" \
485 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
486 case $$dist_files in \
487 */*) $(MKDIR_P) `echo "$$dist_files" | \
488 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
489 sort -u` ;; \
490 esac; \
491 for file in $$dist_files; do \
492 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
493 if test -d $$d/$$file; then \
494 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
495 if test -d "$(distdir)/$$file"; then \
496 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
497 fi; \
498 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
499 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
500 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
501 fi; \
502 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
503 else \
504 test -f "$(distdir)/$$file" \
505 || cp -p $$d/$$file "$(distdir)/$$file" \
506 || exit 1; \
507 fi; \
508 done
509check-am: all-am
510check: check-am
511all-am: Makefile $(LTLIBRARIES)
512installdirs:
513 for dir in "$(DESTDIR)$(controllerdir)"; do \
514 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
515 done
516install: install-am
517install-exec: install-exec-am
518install-data: install-data-am
519uninstall: uninstall-am
520
521install-am: all-am
522 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
523
524installcheck: installcheck-am
525install-strip:
526 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
527 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
528 `test -z '$(STRIP)' || \
529 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
530mostlyclean-generic:
531
532clean-generic:
533
534distclean-generic:
535 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
536 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
537
538maintainer-clean-generic:
539 @echo "This command is intended for maintainers to use"
540 @echo "it deletes files that may require special tools to rebuild."
541 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
542clean: clean-am
543
544clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
545 clean-local mostlyclean-am
546
547distclean: distclean-am
548 -rm -rf ./$(DEPDIR)
549 -rm -f Makefile
550distclean-am: clean-am distclean-compile distclean-generic \
551 distclean-tags
552
553dvi: dvi-am
554
555dvi-am:
556
557html: html-am
558
559html-am:
560
561info: info-am
562
563info-am:
564
565install-data-am: install-controllerLTLIBRARIES
566 @$(NORMAL_INSTALL)
567 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
568install-dvi: install-dvi-am
569
570install-dvi-am:
571
572install-exec-am:
573
574install-html: install-html-am
575
576install-html-am:
577
578install-info: install-info-am
579
580install-info-am:
581
582install-man:
583
584install-pdf: install-pdf-am
585
586install-pdf-am:
587
588install-ps: install-ps-am
589
590install-ps-am:
591
592installcheck-am:
593
594maintainer-clean: maintainer-clean-am
595 -rm -rf ./$(DEPDIR)
596 -rm -f Makefile
597maintainer-clean-am: distclean-am maintainer-clean-generic
598
599mostlyclean: mostlyclean-am
600
601mostlyclean-am: mostlyclean-compile mostlyclean-generic \
602 mostlyclean-libtool
603
604pdf: pdf-am
605
606pdf-am:
607
608ps: ps-am
609
610ps-am:
611
612uninstall-am: uninstall-controllerLTLIBRARIES
613 @$(NORMAL_INSTALL)
614 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
615.MAKE: install-am install-data-am install-strip uninstall-am
616
617.PHONY: CTAGS GTAGS all all-am check check-am clean \
618 clean-controllerLTLIBRARIES clean-generic clean-libtool \
619 clean-local ctags distclean distclean-compile \
620 distclean-generic distclean-libtool distclean-tags distdir dvi \
621 dvi-am html html-am info info-am install install-am \
622 install-controllerLTLIBRARIES install-data install-data-am \
623 install-data-hook install-dvi install-dvi-am install-exec \
624 install-exec-am install-html install-html-am install-info \
625 install-info-am install-man install-pdf install-pdf-am \
626 install-ps install-ps-am install-strip installcheck \
627 installcheck-am installdirs maintainer-clean \
628 maintainer-clean-generic mostlyclean mostlyclean-compile \
629 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
630 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
631 uninstall-hook
632
633
634install-data-hook:
635 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
636uninstall-hook:
637 rm -f $(DESTDIR)$(controllerdir)/module.*
638
639clean-local:
640 rm -rf *.gcno
641
642# Tell versions [3.59,3.63) of GNU make to not export all variables.
643# Otherwise a system limit (for SysV at least) may be exceeded.
644.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c b/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
new file mode 100644
index 0000000..0d02f80
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_fixed/eina_ememoa_fixed.c
@@ -0,0 +1,176 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <string.h>
25#include <ememoa_mempool_fixed.h>
26
27#include "eina_inlist.h"
28#include "eina_error.h"
29#include "eina_module.h"
30#include "eina_mempool.h"
31
32#include "eina_private.h"
33
34typedef struct _Eina_Ememoa_Fixed_Mempool Eina_Ememoa_Fixed_Mempool;
35struct _Eina_Ememoa_Fixed_Mempool
36{
37 struct ememoa_mempool_desc_s *desc;
38 int pool;
39};
40
41static void *
42eina_ememoa_fixed_malloc(void *data, __UNUSED__ unsigned int size)
43{
44 Eina_Ememoa_Fixed_Mempool *efm = data;
45
46 return ememoa_mempool_fixed_pop_object(efm->pool);
47}
48
49static void
50eina_ememoa_fixed_free(void *data, void *ptr)
51{
52 Eina_Ememoa_Fixed_Mempool *efm = data;
53
54 ememoa_mempool_fixed_push_object(efm->pool, ptr);
55}
56
57static void *
58eina_ememoa_fixed_realloc(__UNUSED__ void *data,
59 __UNUSED__ void *element,
60 __UNUSED__ unsigned int size)
61{
62 return NULL;
63}
64
65static void
66eina_ememoa_fixed_gc(void *data)
67{
68 Eina_Ememoa_Fixed_Mempool *efm = data;
69
70 ememoa_mempool_fixed_garbage_collect(efm->pool);
71}
72
73static void
74eina_ememoa_fixed_statistics(void *data)
75{
76 Eina_Ememoa_Fixed_Mempool *efm = data;
77
78 ememoa_mempool_fixed_display_statistic(efm->pool);
79 (void)efm;
80}
81
82static void *
83eina_ememoa_fixed_init(const char *context,
84 __UNUSED__ const char *option,
85 va_list args)
86{
87 struct ememoa_mempool_desc_s *desc = NULL;
88 Eina_Ememoa_Fixed_Mempool *efm = NULL;
89 Eina_Bool thread_protect;
90 int context_length;
91 int item_size;
92 int pool_size;
93
94 if (context)
95 {
96 context_length = strlen(context) + 1;
97
98 desc = calloc(1, sizeof (struct ememoa_mempool_desc_s) + context_length);
99 if (!desc)
100 goto on_error;
101
102 desc->name = (char *)(desc + 1);
103 memcpy((char *)desc->name, context, context_length);
104 }
105
106 item_size = va_arg(args, int);
107 pool_size = va_arg(args, int);
108 thread_protect = va_arg(args, int);
109
110 efm = malloc(sizeof (Eina_Ememoa_Fixed_Mempool));
111 if (!efm)
112 goto on_error;
113
114 efm->desc = desc;
115 efm->pool = ememoa_mempool_fixed_init(
116 item_size,
117 pool_size,
118 thread_protect ?
119 EMEMOA_THREAD_PROTECTION : 0,
120 efm->desc);
121 if (efm->pool < 0)
122 goto on_error;
123
124 return efm;
125
126on_error:
127 if (desc)
128 free(desc);
129
130 if (efm)
131 free(efm);
132
133 return NULL;
134}
135
136static void
137eina_ememoa_fixed_shutdown(void *data)
138{
139 Eina_Ememoa_Fixed_Mempool *efm = data;
140
141 if (efm->desc)
142 free(efm->desc);
143
144 ememoa_mempool_fixed_clean(efm->pool);
145 free(efm);
146}
147
148static Eina_Mempool_Backend _eina_ememoa_mp_backend = {
149 .name = "ememoa_fixed",
150 .init = &eina_ememoa_fixed_init,
151 .shutdown = &eina_ememoa_fixed_shutdown,
152 .realloc = &eina_ememoa_fixed_realloc,
153 .alloc = &eina_ememoa_fixed_malloc,
154 .free = &eina_ememoa_fixed_free,
155 .garbage_collect = &eina_ememoa_fixed_gc,
156 .statistics = &eina_ememoa_fixed_statistics,
157 .repack = NULL
158};
159
160Eina_Bool ememoa_fixed_init(void)
161{
162 return eina_mempool_register(&_eina_ememoa_mp_backend);
163}
164
165void ememoa_fixed_shutdown(void)
166{
167 eina_mempool_unregister(&_eina_ememoa_mp_backend);
168}
169
170
171#ifndef EINA_STATIC_BUILD_EMEMOA_FIXED
172
173EINA_MODULE_INIT(ememoa_fixed_init);
174EINA_MODULE_SHUTDOWN(ememoa_fixed_shutdown);
175
176#endif /* ! EINA_STATIC_BUILD_EMEMOA_FIXED */
diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am
new file mode 100644
index 0000000..2814e31
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.am
@@ -0,0 +1,30 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EMEMOA_CFLAGS@ \
11@EFL_EINA_BUILD@
12
13controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH)
14controller_LTLIBRARIES = module.la
15
16module_la_SOURCES = \
17eina_ememoa_unknown.c
18
19module_la_CFLAGS = @EINA_CFLAGS@
20module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
21module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
22module_la_LIBTOOLFLAGS = --tag=disable-static
23
24install-data-hook:
25 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
26uninstall-hook:
27 rm -f $(DESTDIR)$(controllerdir)/module.*
28
29clean-local:
30 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in
new file mode 100644
index 0000000..b295c64
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_unknown/Makefile.in
@@ -0,0 +1,644 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/ememoa_unknown
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_ememoa_unknown.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EMEMOA_CFLAGS@ \
302@EFL_EINA_BUILD@
303
304controllerdir = $(libdir)/eina/modules/mp/ememoa_unknown/$(MODULE_ARCH)
305controller_LTLIBRARIES = module.la
306module_la_SOURCES = \
307eina_ememoa_unknown.c
308
309module_la_CFLAGS = @EINA_CFLAGS@
310module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EMEMOA_LIBS@ @EINA_LIBS@
311module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
312module_la_LIBTOOLFLAGS = --tag=disable-static
313all: all-am
314
315.SUFFIXES:
316.SUFFIXES: .c .lo .o .obj
317$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
318 @for dep in $?; do \
319 case '$(am__configure_deps)' in \
320 *$$dep*) \
321 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
322 && { if test -f $@; then exit 0; else break; fi; }; \
323 exit 1;; \
324 esac; \
325 done; \
326 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/ememoa_unknown/Makefile'; \
327 $(am__cd) $(top_srcdir) && \
328 $(AUTOMAKE) --gnu src/modules/mp/ememoa_unknown/Makefile
329.PRECIOUS: Makefile
330Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
331 @case '$?' in \
332 *config.status*) \
333 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
334 *) \
335 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
336 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
337 esac;
338
339$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
340 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
341
342$(top_srcdir)/configure: $(am__configure_deps)
343 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
344$(ACLOCAL_M4): $(am__aclocal_m4_deps)
345 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
346$(am__aclocal_m4_deps):
347install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
348 @$(NORMAL_INSTALL)
349 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
350 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
351 list2=; for p in $$list; do \
352 if test -f $$p; then \
353 list2="$$list2 $$p"; \
354 else :; fi; \
355 done; \
356 test -z "$$list2" || { \
357 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
358 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
359 }
360
361uninstall-controllerLTLIBRARIES:
362 @$(NORMAL_UNINSTALL)
363 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
364 for p in $$list; do \
365 $(am__strip_dir) \
366 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
367 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
368 done
369
370clean-controllerLTLIBRARIES:
371 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
372 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
373 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
374 test "$$dir" != "$$p" || dir=.; \
375 echo "rm -f \"$${dir}/so_locations\""; \
376 rm -f "$${dir}/so_locations"; \
377 done
378module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
379 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
380
381mostlyclean-compile:
382 -rm -f *.$(OBJEXT)
383
384distclean-compile:
385 -rm -f *.tab.c
386
387@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_ememoa_unknown.Plo@am__quote@
388
389.c.o:
390@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
391@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
392@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
394@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
395@am__fastdepCC_FALSE@ $(COMPILE) -c $<
396
397.c.obj:
398@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
399@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
400@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
402@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
403@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
404
405.c.lo:
406@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
407@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
408@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
410@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
411@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
412
413module_la-eina_ememoa_unknown.lo: eina_ememoa_unknown.c
414@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_ememoa_unknown.lo -MD -MP -MF $(DEPDIR)/module_la-eina_ememoa_unknown.Tpo -c -o module_la-eina_ememoa_unknown.lo `test -f 'eina_ememoa_unknown.c' || echo '$(srcdir)/'`eina_ememoa_unknown.c
415@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_ememoa_unknown.Tpo $(DEPDIR)/module_la-eina_ememoa_unknown.Plo
416@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_ememoa_unknown.c' object='module_la-eina_ememoa_unknown.lo' libtool=yes @AMDEPBACKSLASH@
418@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
419@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_ememoa_unknown.lo `test -f 'eina_ememoa_unknown.c' || echo '$(srcdir)/'`eina_ememoa_unknown.c
420
421mostlyclean-libtool:
422 -rm -f *.lo
423
424clean-libtool:
425 -rm -rf .libs _libs
426
427ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
428 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
429 unique=`for i in $$list; do \
430 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
431 done | \
432 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
433 END { if (nonempty) { for (i in files) print i; }; }'`; \
434 mkid -fID $$unique
435tags: TAGS
436
437TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
438 $(TAGS_FILES) $(LISP)
439 set x; \
440 here=`pwd`; \
441 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
442 unique=`for i in $$list; do \
443 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
444 done | \
445 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
446 END { if (nonempty) { for (i in files) print i; }; }'`; \
447 shift; \
448 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
449 test -n "$$unique" || unique=$$empty_fix; \
450 if test $$# -gt 0; then \
451 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
452 "$$@" $$unique; \
453 else \
454 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
455 $$unique; \
456 fi; \
457 fi
458ctags: CTAGS
459CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
460 $(TAGS_FILES) $(LISP)
461 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
462 unique=`for i in $$list; do \
463 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
464 done | \
465 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
466 END { if (nonempty) { for (i in files) print i; }; }'`; \
467 test -z "$(CTAGS_ARGS)$$unique" \
468 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
469 $$unique
470
471GTAGS:
472 here=`$(am__cd) $(top_builddir) && pwd` \
473 && $(am__cd) $(top_srcdir) \
474 && gtags -i $(GTAGS_ARGS) "$$here"
475
476distclean-tags:
477 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
478
479distdir: $(DISTFILES)
480 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
482 list='$(DISTFILES)'; \
483 dist_files=`for file in $$list; do echo $$file; done | \
484 sed -e "s|^$$srcdirstrip/||;t" \
485 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
486 case $$dist_files in \
487 */*) $(MKDIR_P) `echo "$$dist_files" | \
488 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
489 sort -u` ;; \
490 esac; \
491 for file in $$dist_files; do \
492 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
493 if test -d $$d/$$file; then \
494 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
495 if test -d "$(distdir)/$$file"; then \
496 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
497 fi; \
498 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
499 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
500 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
501 fi; \
502 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
503 else \
504 test -f "$(distdir)/$$file" \
505 || cp -p $$d/$$file "$(distdir)/$$file" \
506 || exit 1; \
507 fi; \
508 done
509check-am: all-am
510check: check-am
511all-am: Makefile $(LTLIBRARIES)
512installdirs:
513 for dir in "$(DESTDIR)$(controllerdir)"; do \
514 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
515 done
516install: install-am
517install-exec: install-exec-am
518install-data: install-data-am
519uninstall: uninstall-am
520
521install-am: all-am
522 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
523
524installcheck: installcheck-am
525install-strip:
526 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
527 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
528 `test -z '$(STRIP)' || \
529 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
530mostlyclean-generic:
531
532clean-generic:
533
534distclean-generic:
535 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
536 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
537
538maintainer-clean-generic:
539 @echo "This command is intended for maintainers to use"
540 @echo "it deletes files that may require special tools to rebuild."
541 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
542clean: clean-am
543
544clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
545 clean-local mostlyclean-am
546
547distclean: distclean-am
548 -rm -rf ./$(DEPDIR)
549 -rm -f Makefile
550distclean-am: clean-am distclean-compile distclean-generic \
551 distclean-tags
552
553dvi: dvi-am
554
555dvi-am:
556
557html: html-am
558
559html-am:
560
561info: info-am
562
563info-am:
564
565install-data-am: install-controllerLTLIBRARIES
566 @$(NORMAL_INSTALL)
567 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
568install-dvi: install-dvi-am
569
570install-dvi-am:
571
572install-exec-am:
573
574install-html: install-html-am
575
576install-html-am:
577
578install-info: install-info-am
579
580install-info-am:
581
582install-man:
583
584install-pdf: install-pdf-am
585
586install-pdf-am:
587
588install-ps: install-ps-am
589
590install-ps-am:
591
592installcheck-am:
593
594maintainer-clean: maintainer-clean-am
595 -rm -rf ./$(DEPDIR)
596 -rm -f Makefile
597maintainer-clean-am: distclean-am maintainer-clean-generic
598
599mostlyclean: mostlyclean-am
600
601mostlyclean-am: mostlyclean-compile mostlyclean-generic \
602 mostlyclean-libtool
603
604pdf: pdf-am
605
606pdf-am:
607
608ps: ps-am
609
610ps-am:
611
612uninstall-am: uninstall-controllerLTLIBRARIES
613 @$(NORMAL_INSTALL)
614 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
615.MAKE: install-am install-data-am install-strip uninstall-am
616
617.PHONY: CTAGS GTAGS all all-am check check-am clean \
618 clean-controllerLTLIBRARIES clean-generic clean-libtool \
619 clean-local ctags distclean distclean-compile \
620 distclean-generic distclean-libtool distclean-tags distdir dvi \
621 dvi-am html html-am info info-am install install-am \
622 install-controllerLTLIBRARIES install-data install-data-am \
623 install-data-hook install-dvi install-dvi-am install-exec \
624 install-exec-am install-html install-html-am install-info \
625 install-info-am install-man install-pdf install-pdf-am \
626 install-ps install-ps-am install-strip installcheck \
627 installcheck-am installdirs maintainer-clean \
628 maintainer-clean-generic mostlyclean mostlyclean-compile \
629 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
630 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
631 uninstall-hook
632
633
634install-data-hook:
635 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
636uninstall-hook:
637 rm -f $(DESTDIR)$(controllerdir)/module.*
638
639clean-local:
640 rm -rf *.gcno
641
642# Tell versions [3.59,3.63) of GNU make to not export all variables.
643# Otherwise a system limit (for SysV at least) may be exceeded.
644.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c b/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
new file mode 100644
index 0000000..56b99f6
--- /dev/null
+++ b/libraries/eina/src/modules/mp/ememoa_unknown/eina_ememoa_unknown.c
@@ -0,0 +1,182 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <string.h>
25#include <ememoa_mempool_fixed.h>
26#include <ememoa_mempool_unknown_size.h>
27
28#include "eina_types.h"
29#include "eina_module.h"
30#include "eina_private.h"
31#include "eina_mempool.h"
32
33typedef struct _Eina_Ememoa_Unknown_Size_Mempool
34Eina_Ememoa_Unknown_Size_Mempool;
35struct _Eina_Ememoa_Unknown_Size_Mempool
36{
37 struct ememoa_mempool_desc_s *desc;
38 int pool;
39};
40
41static void *
42eina_ememoa_unknown_size_malloc(void *data, unsigned int size)
43{
44 Eina_Ememoa_Unknown_Size_Mempool *efm = data;
45
46 return ememoa_mempool_unknown_size_pop_object(efm->pool, size);
47}
48
49static void
50eina_ememoa_unknown_size_free(void *data, void *ptr)
51{
52 Eina_Ememoa_Unknown_Size_Mempool *efm = data;
53
54 ememoa_mempool_unknown_size_push_object(efm->pool, ptr);
55}
56
57static void *
58eina_ememoa_unknown_size_realloc(void *data, void *element, unsigned int size)
59{
60 Eina_Ememoa_Unknown_Size_Mempool *efm = data;
61
62 return ememoa_mempool_unknown_size_resize_object(efm->pool, element, size);
63}
64
65static void
66eina_ememoa_unknown_size_gc(void *data)
67{
68 Eina_Ememoa_Unknown_Size_Mempool *efm = data;
69
70 ememoa_mempool_unknown_size_garbage_collect(efm->pool);
71}
72
73static void
74eina_ememoa_unknown_size_statistics(void *data)
75{
76 Eina_Ememoa_Unknown_Size_Mempool *efm = data;
77
78 ememoa_mempool_unknown_size_display_statistic(efm->pool);
79}
80
81static void *
82eina_ememoa_unknown_size_init(const char *context,
83 __UNUSED__ const char *option,
84 va_list args)
85{
86 struct ememoa_mempool_desc_s *desc = NULL;
87 Eina_Ememoa_Unknown_Size_Mempool *efm = NULL;
88 Eina_Bool thread_protect;
89 unsigned int *items_map = NULL;
90 unsigned int items_count;
91 unsigned int i;
92 int context_length;
93
94 if (context)
95 {
96 context_length = strlen(context) + 1;
97
98 desc = calloc(1, sizeof (struct ememoa_mempool_desc_s) + context_length);
99 if (!desc)
100 goto on_error;
101
102 desc->name = (char *)(desc + 1);
103 memcpy((char *)desc->name, context, context_length);
104 }
105
106 thread_protect = va_arg(args, int);
107 items_count = va_arg(args, unsigned int);
108
109 items_map = malloc(sizeof (unsigned int) * 2 * items_count);
110
111 for (i = 0; i < (items_count << 1); ++i)
112 items_map[i] = va_arg(args, unsigned int);
113
114 efm = malloc(sizeof (Eina_Ememoa_Unknown_Size_Mempool));
115 if (!efm)
116 goto on_error;
117
118 efm->desc = desc;
119 efm->pool = ememoa_mempool_unknown_size_init(
120 items_count,
121 items_map,
122 thread_protect ?
123 EMEMOA_THREAD_PROTECTION : 0,
124 efm->desc);
125 if (efm->pool < 0)
126 goto on_error;
127
128 return efm;
129
130on_error:
131 if (items_map)
132 free(items_map);
133
134 if (desc)
135 free(desc);
136
137 if (efm)
138 free(efm);
139
140 return NULL;
141}
142
143static void
144eina_ememoa_unknown_size_shutdown(void *data)
145{
146 Eina_Ememoa_Unknown_Size_Mempool *efm = data;
147
148 if (efm->desc)
149 free(efm->desc);
150
151 ememoa_mempool_unknown_size_clean(efm->pool);
152 free(efm);
153}
154
155static Eina_Mempool_Backend _eina_ememoa_unknown_mp_backend = {
156 .name = "ememoa_unknown",
157 .init = &eina_ememoa_unknown_size_init,
158 .shutdown = &eina_ememoa_unknown_size_shutdown,
159 .realloc = &eina_ememoa_unknown_size_realloc,
160 .alloc = &eina_ememoa_unknown_size_malloc,
161 .free = &eina_ememoa_unknown_size_free,
162 .garbage_collect = &eina_ememoa_unknown_size_gc,
163 .statistics = &eina_ememoa_unknown_size_statistics,
164 .repack = NULL
165};
166
167Eina_Bool ememoa_unknown_init(void)
168{
169 return eina_mempool_register(&_eina_ememoa_unknown_mp_backend);
170}
171
172void ememoa_unknown_shutdown(void)
173{
174 eina_mempool_unregister(&_eina_ememoa_unknown_mp_backend);
175}
176
177#ifndef EINA_STATIC_BUILD_EMEMOA_UNKNOWN
178
179EINA_MODULE_INIT(ememoa_unknown_init);
180EINA_MODULE_SHUTDOWN(ememoa_unknown_shutdown);
181
182#endif /* ! EINA_STATIC_BUILD_EMEMOA_UNKNOWN */
diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am
new file mode 100644
index 0000000..caf239e
--- /dev/null
+++ b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.am
@@ -0,0 +1,29 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EFL_EINA_BUILD@
11
12controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_fixed_bitmap.c
17
18module_la_CFLAGS = @EINA_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
20module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
21module_la_LIBTOOLFLAGS = --tag=disable-static
22
23install-data-hook:
24 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
25uninstall-hook:
26 rm -f $(DESTDIR)$(controllerdir)/module.*
27
28clean-local:
29 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in
new file mode 100644
index 0000000..c1541fc
--- /dev/null
+++ b/libraries/eina/src/modules/mp/fixed_bitmap/Makefile.in
@@ -0,0 +1,643 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/fixed_bitmap
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_fixed_bitmap.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EFL_EINA_BUILD@
302
303controllerdir = $(libdir)/eina/modules/mp/fixed_bitmap/$(MODULE_ARCH)
304controller_LTLIBRARIES = module.la
305module_la_SOURCES = \
306eina_fixed_bitmap.c
307
308module_la_CFLAGS = @EINA_CFLAGS@
309module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
310module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
311module_la_LIBTOOLFLAGS = --tag=disable-static
312all: all-am
313
314.SUFFIXES:
315.SUFFIXES: .c .lo .o .obj
316$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
317 @for dep in $?; do \
318 case '$(am__configure_deps)' in \
319 *$$dep*) \
320 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
321 && { if test -f $@; then exit 0; else break; fi; }; \
322 exit 1;; \
323 esac; \
324 done; \
325 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/fixed_bitmap/Makefile'; \
326 $(am__cd) $(top_srcdir) && \
327 $(AUTOMAKE) --gnu src/modules/mp/fixed_bitmap/Makefile
328.PRECIOUS: Makefile
329Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
330 @case '$?' in \
331 *config.status*) \
332 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
333 *) \
334 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
335 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
336 esac;
337
338$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
339 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
340
341$(top_srcdir)/configure: $(am__configure_deps)
342 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
343$(ACLOCAL_M4): $(am__aclocal_m4_deps)
344 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
345$(am__aclocal_m4_deps):
346install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
347 @$(NORMAL_INSTALL)
348 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
349 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
350 list2=; for p in $$list; do \
351 if test -f $$p; then \
352 list2="$$list2 $$p"; \
353 else :; fi; \
354 done; \
355 test -z "$$list2" || { \
356 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
357 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
358 }
359
360uninstall-controllerLTLIBRARIES:
361 @$(NORMAL_UNINSTALL)
362 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
363 for p in $$list; do \
364 $(am__strip_dir) \
365 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
366 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
367 done
368
369clean-controllerLTLIBRARIES:
370 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
371 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
372 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
373 test "$$dir" != "$$p" || dir=.; \
374 echo "rm -f \"$${dir}/so_locations\""; \
375 rm -f "$${dir}/so_locations"; \
376 done
377module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
378 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
379
380mostlyclean-compile:
381 -rm -f *.$(OBJEXT)
382
383distclean-compile:
384 -rm -f *.tab.c
385
386@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_fixed_bitmap.Plo@am__quote@
387
388.c.o:
389@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
390@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
391@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
392@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
394@am__fastdepCC_FALSE@ $(COMPILE) -c $<
395
396.c.obj:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
398@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
399@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
400@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
402@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
403
404.c.lo:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
411
412module_la-eina_fixed_bitmap.lo: eina_fixed_bitmap.c
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_fixed_bitmap.lo -MD -MP -MF $(DEPDIR)/module_la-eina_fixed_bitmap.Tpo -c -o module_la-eina_fixed_bitmap.lo `test -f 'eina_fixed_bitmap.c' || echo '$(srcdir)/'`eina_fixed_bitmap.c
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_fixed_bitmap.Tpo $(DEPDIR)/module_la-eina_fixed_bitmap.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_fixed_bitmap.c' object='module_la-eina_fixed_bitmap.lo' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_fixed_bitmap.lo `test -f 'eina_fixed_bitmap.c' || echo '$(srcdir)/'`eina_fixed_bitmap.c
419
420mostlyclean-libtool:
421 -rm -f *.lo
422
423clean-libtool:
424 -rm -rf .libs _libs
425
426ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
427 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
428 unique=`for i in $$list; do \
429 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
430 done | \
431 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
432 END { if (nonempty) { for (i in files) print i; }; }'`; \
433 mkid -fID $$unique
434tags: TAGS
435
436TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
437 $(TAGS_FILES) $(LISP)
438 set x; \
439 here=`pwd`; \
440 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
441 unique=`for i in $$list; do \
442 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
443 done | \
444 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
445 END { if (nonempty) { for (i in files) print i; }; }'`; \
446 shift; \
447 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
448 test -n "$$unique" || unique=$$empty_fix; \
449 if test $$# -gt 0; then \
450 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
451 "$$@" $$unique; \
452 else \
453 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
454 $$unique; \
455 fi; \
456 fi
457ctags: CTAGS
458CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
459 $(TAGS_FILES) $(LISP)
460 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
461 unique=`for i in $$list; do \
462 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
463 done | \
464 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
465 END { if (nonempty) { for (i in files) print i; }; }'`; \
466 test -z "$(CTAGS_ARGS)$$unique" \
467 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
468 $$unique
469
470GTAGS:
471 here=`$(am__cd) $(top_builddir) && pwd` \
472 && $(am__cd) $(top_srcdir) \
473 && gtags -i $(GTAGS_ARGS) "$$here"
474
475distclean-tags:
476 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
477
478distdir: $(DISTFILES)
479 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
480 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 list='$(DISTFILES)'; \
482 dist_files=`for file in $$list; do echo $$file; done | \
483 sed -e "s|^$$srcdirstrip/||;t" \
484 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
485 case $$dist_files in \
486 */*) $(MKDIR_P) `echo "$$dist_files" | \
487 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
488 sort -u` ;; \
489 esac; \
490 for file in $$dist_files; do \
491 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
492 if test -d $$d/$$file; then \
493 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
494 if test -d "$(distdir)/$$file"; then \
495 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
496 fi; \
497 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
498 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
499 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
500 fi; \
501 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
502 else \
503 test -f "$(distdir)/$$file" \
504 || cp -p $$d/$$file "$(distdir)/$$file" \
505 || exit 1; \
506 fi; \
507 done
508check-am: all-am
509check: check-am
510all-am: Makefile $(LTLIBRARIES)
511installdirs:
512 for dir in "$(DESTDIR)$(controllerdir)"; do \
513 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
514 done
515install: install-am
516install-exec: install-exec-am
517install-data: install-data-am
518uninstall: uninstall-am
519
520install-am: all-am
521 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
522
523installcheck: installcheck-am
524install-strip:
525 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
526 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
527 `test -z '$(STRIP)' || \
528 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
529mostlyclean-generic:
530
531clean-generic:
532
533distclean-generic:
534 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
535 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
536
537maintainer-clean-generic:
538 @echo "This command is intended for maintainers to use"
539 @echo "it deletes files that may require special tools to rebuild."
540 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
541clean: clean-am
542
543clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
544 clean-local mostlyclean-am
545
546distclean: distclean-am
547 -rm -rf ./$(DEPDIR)
548 -rm -f Makefile
549distclean-am: clean-am distclean-compile distclean-generic \
550 distclean-tags
551
552dvi: dvi-am
553
554dvi-am:
555
556html: html-am
557
558html-am:
559
560info: info-am
561
562info-am:
563
564install-data-am: install-controllerLTLIBRARIES
565 @$(NORMAL_INSTALL)
566 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
567install-dvi: install-dvi-am
568
569install-dvi-am:
570
571install-exec-am:
572
573install-html: install-html-am
574
575install-html-am:
576
577install-info: install-info-am
578
579install-info-am:
580
581install-man:
582
583install-pdf: install-pdf-am
584
585install-pdf-am:
586
587install-ps: install-ps-am
588
589install-ps-am:
590
591installcheck-am:
592
593maintainer-clean: maintainer-clean-am
594 -rm -rf ./$(DEPDIR)
595 -rm -f Makefile
596maintainer-clean-am: distclean-am maintainer-clean-generic
597
598mostlyclean: mostlyclean-am
599
600mostlyclean-am: mostlyclean-compile mostlyclean-generic \
601 mostlyclean-libtool
602
603pdf: pdf-am
604
605pdf-am:
606
607ps: ps-am
608
609ps-am:
610
611uninstall-am: uninstall-controllerLTLIBRARIES
612 @$(NORMAL_INSTALL)
613 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
614.MAKE: install-am install-data-am install-strip uninstall-am
615
616.PHONY: CTAGS GTAGS all all-am check check-am clean \
617 clean-controllerLTLIBRARIES clean-generic clean-libtool \
618 clean-local ctags distclean distclean-compile \
619 distclean-generic distclean-libtool distclean-tags distdir dvi \
620 dvi-am html html-am info info-am install install-am \
621 install-controllerLTLIBRARIES install-data install-data-am \
622 install-data-hook install-dvi install-dvi-am install-exec \
623 install-exec-am install-html install-html-am install-info \
624 install-info-am install-man install-pdf install-pdf-am \
625 install-ps install-ps-am install-strip installcheck \
626 installcheck-am installdirs maintainer-clean \
627 maintainer-clean-generic mostlyclean mostlyclean-compile \
628 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
629 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
630 uninstall-hook
631
632
633install-data-hook:
634 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
635uninstall-hook:
636 rm -f $(DESTDIR)$(controllerdir)/module.*
637
638clean-local:
639 rm -rf *.gcno
640
641# Tell versions [3.59,3.63) of GNU make to not export all variables.
642# Otherwise a system limit (for SysV at least) may be exceeded.
643.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c b/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
new file mode 100644
index 0000000..e053e15
--- /dev/null
+++ b/libraries/eina/src/modules/mp/fixed_bitmap/eina_fixed_bitmap.c
@@ -0,0 +1,270 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifndef _MSC_VER
24# include <stdint.h>
25#endif
26#include <string.h>
27#include <assert.h>
28
29#ifdef HAVE_EVIL
30# include <Evil.h>
31#endif
32
33#include "eina_inlist.h"
34#include "eina_rbtree.h"
35#include "eina_error.h"
36
37#include "eina_mempool.h"
38
39#include "eina_private.h"
40
41typedef struct _Eina_Fixed_Bitmap Eina_Fixed_Bitmap;
42typedef struct _Eina_Fixed_Bitmap_Pool Eina_Fixed_Bitmap_Pool;
43
44struct _Eina_Fixed_Bitmap
45{
46 Eina_Rbtree *lookup;
47 Eina_Inlist *head;
48
49 int item_size;
50};
51
52struct _Eina_Fixed_Bitmap_Pool
53{
54 EINA_RBTREE;
55 EINA_INLIST;
56
57 uint32_t bitmask;
58};
59
60static inline size_t
61_eina_rbtree_inlist_delta(void)
62{
63 Eina_Fixed_Bitmap_Pool tmp;
64 void *a = &tmp.__rbtree;
65 void *b = &tmp.__in_list;
66
67 return (char *)a - (char *)b;
68}
69
70static Eina_Rbtree_Direction
71_eina_fixed_cmp(const Eina_Rbtree *left,
72 const Eina_Rbtree *right,
73 __UNUSED__ void *data)
74{
75 if (left - right < 0)
76 return EINA_RBTREE_LEFT;
77
78 return EINA_RBTREE_RIGHT;
79}
80
81static int
82_eina_fixed_cmp_key(const Eina_Rbtree *node,
83 const void *key,
84 __UNUSED__ int length,
85 Eina_Fixed_Bitmap *mp)
86{
87 const void *a = node;
88 const void *b = key;
89 ssize_t delta;
90 ssize_t limit;
91
92 limit = sizeof (Eina_Fixed_Bitmap_Pool) + mp->item_size * 32;
93 delta = (char *)a - (char *)b;
94
95 if (delta > 0)
96 return 1;
97
98 if (delta + limit < 0)
99 return -1;
100
101 return 0;
102}
103
104static void
105_eina_fixed_bitmap_pool_free(Eina_Fixed_Bitmap_Pool *pool,
106 __UNUSED__ void *data)
107{
108 free(pool);
109}
110
111static void *
112eina_fixed_bitmap_malloc(void *data, __UNUSED__ unsigned int size)
113{
114 Eina_Fixed_Bitmap *mp = data;
115 Eina_Fixed_Bitmap_Pool *pool = NULL;
116 void *ptr;
117 int idx;
118
119 if (mp->head)
120 {
121 pool =
122 (Eina_Fixed_Bitmap_Pool *)((unsigned char *)mp->head +
123 _eina_rbtree_inlist_delta());
124
125 if (pool->bitmask == 0)
126 pool = NULL;
127 }
128
129 if (!pool)
130 {
131 eina_error_set(0);
132 pool = malloc(sizeof (Eina_Fixed_Bitmap_Pool) + mp->item_size * 32);
133 if (!pool)
134 {
135 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
136 return NULL;
137 }
138
139 pool->bitmask = 0xFFFFFFFF;
140
141 mp->head = eina_inlist_prepend(mp->head, EINA_INLIST_GET(pool));
142 mp->lookup = eina_rbtree_inline_insert(mp->lookup, EINA_RBTREE_GET(
143 pool),
144 EINA_RBTREE_CMP_NODE_CB(
145 _eina_fixed_cmp), NULL);
146 }
147
148 idx = ffs(pool->bitmask) - 1;
149 pool->bitmask &= ~(1 << idx);
150 ptr = (unsigned char *)(pool + 1) + idx * mp->item_size;
151
152 if (pool->bitmask == 0)
153 mp->head = eina_inlist_demote(mp->head, EINA_INLIST_GET(pool));
154
155 return ptr;
156}
157
158static void
159eina_fixed_bitmap_free(void *data, void *ptr)
160{
161 Eina_Fixed_Bitmap *mp = data;
162 Eina_Fixed_Bitmap_Pool *pool;
163 void *a;
164 Eina_Bool push_front = EINA_FALSE;
165 ssize_t delta;
166
167 pool = (Eina_Fixed_Bitmap_Pool *)eina_rbtree_inline_lookup(
168 mp->lookup,
169 ptr,
170 0,
171 EINA_RBTREE_CMP_KEY_CB(
172 _eina_fixed_cmp_key),
173 mp);
174 if (!pool)
175 return;
176
177 if (pool->bitmask != 0xFFFFFFFF)
178 push_front = EINA_TRUE;
179
180 a = pool;
181 delta =
182 ((char *)ptr - (char *)a -
183 sizeof (Eina_Fixed_Bitmap_Pool)) / mp->item_size;
184
185 assert(delta >= 0 && delta < 32);
186
187 pool->bitmask |= (1 << (delta & 0x1F));
188
189 if (pool->bitmask == 0xFFFFFFFF)
190 {
191 mp->head = eina_inlist_remove(mp->head, EINA_INLIST_GET(pool));
192 mp->lookup = eina_rbtree_inline_remove(mp->lookup, EINA_RBTREE_GET(
193 pool),
194 EINA_RBTREE_CMP_NODE_CB(
195 _eina_fixed_cmp), NULL);
196 free(pool);
197 }
198 else if (push_front)
199 mp->head = eina_inlist_promote(mp->head, EINA_INLIST_GET(pool));
200}
201
202static void *
203eina_fixed_bitmap_realloc(__UNUSED__ void *data,
204 __UNUSED__ void *element,
205 __UNUSED__ unsigned int size)
206{
207 return NULL;
208}
209
210static void *
211eina_fixed_bitmap_init(__UNUSED__ const char *context,
212 __UNUSED__ const char *option,
213 va_list args)
214{
215 Eina_Fixed_Bitmap *mp;
216 int item_size;
217
218 mp = malloc(sizeof (Eina_Fixed_Bitmap));
219 if (!mp)
220 return NULL;
221
222 item_size = va_arg(args, int);
223
224 mp->item_size = eina_mempool_alignof(item_size);
225
226 mp->lookup = NULL;
227 mp->head = NULL;
228
229 return mp;
230}
231
232static void
233eina_fixed_bitmap_shutdown(void *data)
234{
235 Eina_Fixed_Bitmap *mp = data;
236
237 eina_rbtree_delete(mp->lookup,
238 EINA_RBTREE_FREE_CB(_eina_fixed_bitmap_pool_free), NULL);
239 free(mp);
240}
241
242static Eina_Mempool_Backend _eina_fixed_bitmap_mp_backend = {
243 "fixed_bitmap",
244 &eina_fixed_bitmap_init,
245 &eina_fixed_bitmap_free,
246 &eina_fixed_bitmap_malloc,
247 &eina_fixed_bitmap_realloc,
248 NULL,
249 NULL,
250 &eina_fixed_bitmap_shutdown,
251 NULL
252};
253
254Eina_Bool fixed_bitmap_init(void)
255{
256 return eina_mempool_register(&_eina_fixed_bitmap_mp_backend);
257}
258
259void fixed_bitmap_shutdown(void)
260{
261 eina_mempool_unregister(&_eina_fixed_bitmap_mp_backend);
262}
263
264#ifndef EINA_STATIC_BUILD_FIXED_BITMAP
265
266EINA_MODULE_INIT(fixed_bitmap_init);
267EINA_MODULE_SHUTDOWN(fixed_bitmap_shutdown);
268
269#endif /* ! EINA_STATIC_BUILD_FIXED_BITMAP */
270
diff --git a/libraries/eina/src/modules/mp/one_big/Makefile.am b/libraries/eina/src/modules/mp/one_big/Makefile.am
new file mode 100644
index 0000000..8ca1a62
--- /dev/null
+++ b/libraries/eina/src/modules/mp/one_big/Makefile.am
@@ -0,0 +1,30 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EFL_EINA_BUILD@ \
11@VALGRIND_CFLAGS@
12
13controllerdir = $(libdir)/eina/modules/mp/one_big/$(MODULE_ARCH)
14controller_LTLIBRARIES = module.la
15
16module_la_SOURCES = \
17eina_one_big.c
18
19module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
20module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
21module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
22module_la_LIBTOOLFLAGS = --tag=disable-static
23
24install-data-hook:
25 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
26uninstall-hook:
27 rm -f $(DESTDIR)$(controllerdir)/module.*
28
29clean-local:
30 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/one_big/Makefile.in b/libraries/eina/src/modules/mp/one_big/Makefile.in
new file mode 100644
index 0000000..e999b78
--- /dev/null
+++ b/libraries/eina/src/modules/mp/one_big/Makefile.in
@@ -0,0 +1,644 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/one_big
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_one_big.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EFL_EINA_BUILD@ \
302@VALGRIND_CFLAGS@
303
304controllerdir = $(libdir)/eina/modules/mp/one_big/$(MODULE_ARCH)
305controller_LTLIBRARIES = module.la
306module_la_SOURCES = \
307eina_one_big.c
308
309module_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@
310module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
311module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version @EFL_PTHREAD_LIBS@
312module_la_LIBTOOLFLAGS = --tag=disable-static
313all: all-am
314
315.SUFFIXES:
316.SUFFIXES: .c .lo .o .obj
317$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
318 @for dep in $?; do \
319 case '$(am__configure_deps)' in \
320 *$$dep*) \
321 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
322 && { if test -f $@; then exit 0; else break; fi; }; \
323 exit 1;; \
324 esac; \
325 done; \
326 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/one_big/Makefile'; \
327 $(am__cd) $(top_srcdir) && \
328 $(AUTOMAKE) --gnu src/modules/mp/one_big/Makefile
329.PRECIOUS: Makefile
330Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
331 @case '$?' in \
332 *config.status*) \
333 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
334 *) \
335 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
336 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
337 esac;
338
339$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
340 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
341
342$(top_srcdir)/configure: $(am__configure_deps)
343 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
344$(ACLOCAL_M4): $(am__aclocal_m4_deps)
345 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
346$(am__aclocal_m4_deps):
347install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
348 @$(NORMAL_INSTALL)
349 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
350 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
351 list2=; for p in $$list; do \
352 if test -f $$p; then \
353 list2="$$list2 $$p"; \
354 else :; fi; \
355 done; \
356 test -z "$$list2" || { \
357 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
358 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
359 }
360
361uninstall-controllerLTLIBRARIES:
362 @$(NORMAL_UNINSTALL)
363 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
364 for p in $$list; do \
365 $(am__strip_dir) \
366 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
367 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
368 done
369
370clean-controllerLTLIBRARIES:
371 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
372 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
373 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
374 test "$$dir" != "$$p" || dir=.; \
375 echo "rm -f \"$${dir}/so_locations\""; \
376 rm -f "$${dir}/so_locations"; \
377 done
378module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
379 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
380
381mostlyclean-compile:
382 -rm -f *.$(OBJEXT)
383
384distclean-compile:
385 -rm -f *.tab.c
386
387@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_one_big.Plo@am__quote@
388
389.c.o:
390@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
391@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
392@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
394@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
395@am__fastdepCC_FALSE@ $(COMPILE) -c $<
396
397.c.obj:
398@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
399@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
400@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
402@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
403@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
404
405.c.lo:
406@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
407@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
408@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
410@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
411@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
412
413module_la-eina_one_big.lo: eina_one_big.c
414@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_one_big.lo -MD -MP -MF $(DEPDIR)/module_la-eina_one_big.Tpo -c -o module_la-eina_one_big.lo `test -f 'eina_one_big.c' || echo '$(srcdir)/'`eina_one_big.c
415@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_one_big.Tpo $(DEPDIR)/module_la-eina_one_big.Plo
416@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_one_big.c' object='module_la-eina_one_big.lo' libtool=yes @AMDEPBACKSLASH@
418@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
419@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_one_big.lo `test -f 'eina_one_big.c' || echo '$(srcdir)/'`eina_one_big.c
420
421mostlyclean-libtool:
422 -rm -f *.lo
423
424clean-libtool:
425 -rm -rf .libs _libs
426
427ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
428 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
429 unique=`for i in $$list; do \
430 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
431 done | \
432 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
433 END { if (nonempty) { for (i in files) print i; }; }'`; \
434 mkid -fID $$unique
435tags: TAGS
436
437TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
438 $(TAGS_FILES) $(LISP)
439 set x; \
440 here=`pwd`; \
441 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
442 unique=`for i in $$list; do \
443 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
444 done | \
445 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
446 END { if (nonempty) { for (i in files) print i; }; }'`; \
447 shift; \
448 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
449 test -n "$$unique" || unique=$$empty_fix; \
450 if test $$# -gt 0; then \
451 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
452 "$$@" $$unique; \
453 else \
454 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
455 $$unique; \
456 fi; \
457 fi
458ctags: CTAGS
459CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
460 $(TAGS_FILES) $(LISP)
461 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
462 unique=`for i in $$list; do \
463 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
464 done | \
465 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
466 END { if (nonempty) { for (i in files) print i; }; }'`; \
467 test -z "$(CTAGS_ARGS)$$unique" \
468 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
469 $$unique
470
471GTAGS:
472 here=`$(am__cd) $(top_builddir) && pwd` \
473 && $(am__cd) $(top_srcdir) \
474 && gtags -i $(GTAGS_ARGS) "$$here"
475
476distclean-tags:
477 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
478
479distdir: $(DISTFILES)
480 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
482 list='$(DISTFILES)'; \
483 dist_files=`for file in $$list; do echo $$file; done | \
484 sed -e "s|^$$srcdirstrip/||;t" \
485 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
486 case $$dist_files in \
487 */*) $(MKDIR_P) `echo "$$dist_files" | \
488 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
489 sort -u` ;; \
490 esac; \
491 for file in $$dist_files; do \
492 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
493 if test -d $$d/$$file; then \
494 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
495 if test -d "$(distdir)/$$file"; then \
496 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
497 fi; \
498 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
499 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
500 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
501 fi; \
502 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
503 else \
504 test -f "$(distdir)/$$file" \
505 || cp -p $$d/$$file "$(distdir)/$$file" \
506 || exit 1; \
507 fi; \
508 done
509check-am: all-am
510check: check-am
511all-am: Makefile $(LTLIBRARIES)
512installdirs:
513 for dir in "$(DESTDIR)$(controllerdir)"; do \
514 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
515 done
516install: install-am
517install-exec: install-exec-am
518install-data: install-data-am
519uninstall: uninstall-am
520
521install-am: all-am
522 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
523
524installcheck: installcheck-am
525install-strip:
526 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
527 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
528 `test -z '$(STRIP)' || \
529 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
530mostlyclean-generic:
531
532clean-generic:
533
534distclean-generic:
535 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
536 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
537
538maintainer-clean-generic:
539 @echo "This command is intended for maintainers to use"
540 @echo "it deletes files that may require special tools to rebuild."
541 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
542clean: clean-am
543
544clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
545 clean-local mostlyclean-am
546
547distclean: distclean-am
548 -rm -rf ./$(DEPDIR)
549 -rm -f Makefile
550distclean-am: clean-am distclean-compile distclean-generic \
551 distclean-tags
552
553dvi: dvi-am
554
555dvi-am:
556
557html: html-am
558
559html-am:
560
561info: info-am
562
563info-am:
564
565install-data-am: install-controllerLTLIBRARIES
566 @$(NORMAL_INSTALL)
567 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
568install-dvi: install-dvi-am
569
570install-dvi-am:
571
572install-exec-am:
573
574install-html: install-html-am
575
576install-html-am:
577
578install-info: install-info-am
579
580install-info-am:
581
582install-man:
583
584install-pdf: install-pdf-am
585
586install-pdf-am:
587
588install-ps: install-ps-am
589
590install-ps-am:
591
592installcheck-am:
593
594maintainer-clean: maintainer-clean-am
595 -rm -rf ./$(DEPDIR)
596 -rm -f Makefile
597maintainer-clean-am: distclean-am maintainer-clean-generic
598
599mostlyclean: mostlyclean-am
600
601mostlyclean-am: mostlyclean-compile mostlyclean-generic \
602 mostlyclean-libtool
603
604pdf: pdf-am
605
606pdf-am:
607
608ps: ps-am
609
610ps-am:
611
612uninstall-am: uninstall-controllerLTLIBRARIES
613 @$(NORMAL_INSTALL)
614 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
615.MAKE: install-am install-data-am install-strip uninstall-am
616
617.PHONY: CTAGS GTAGS all all-am check check-am clean \
618 clean-controllerLTLIBRARIES clean-generic clean-libtool \
619 clean-local ctags distclean distclean-compile \
620 distclean-generic distclean-libtool distclean-tags distdir dvi \
621 dvi-am html html-am info info-am install install-am \
622 install-controllerLTLIBRARIES install-data install-data-am \
623 install-data-hook install-dvi install-dvi-am install-exec \
624 install-exec-am install-html install-html-am install-info \
625 install-info-am install-man install-pdf install-pdf-am \
626 install-ps install-ps-am install-strip installcheck \
627 installcheck-am installdirs maintainer-clean \
628 maintainer-clean-generic mostlyclean mostlyclean-compile \
629 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
630 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
631 uninstall-hook
632
633
634install-data-hook:
635 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
636uninstall-hook:
637 rm -f $(DESTDIR)$(controllerdir)/module.*
638
639clean-local:
640 rm -rf *.gcno
641
642# Tell versions [3.59,3.63) of GNU make to not export all variables.
643# Otherwise a system limit (for SysV at least) may be exceeded.
644.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/one_big/eina_one_big.c b/libraries/eina/src/modules/mp/one_big/eina_one_big.c
new file mode 100644
index 0000000..dadec65
--- /dev/null
+++ b/libraries/eina/src/modules/mp/one_big/eina_one_big.c
@@ -0,0 +1,336 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Cedric BAIL, Vincent Torri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <string.h>
25
26#ifdef EFL_HAVE_POSIX_THREADS
27# include <pthread.h>
28#endif
29
30#include <assert.h>
31
32#ifdef EFL_HAVE_WIN32_THREADS
33# define WIN32_LEAN_AND_MEAN
34# include <windows.h>
35# undef WIN32_LEAN_AND_MEAN
36#endif
37
38#include "eina_mempool.h"
39#include "eina_trash.h"
40#include "eina_inlist.h"
41#include "eina_log.h"
42#include "eina_lock.h"
43
44#ifndef NVALGRIND
45# include <valgrind/memcheck.h>
46#endif
47
48#include "eina_private.h"
49
50#ifdef INF
51#undef INF
52#endif
53#define INF(...) EINA_LOG_DOM_INFO(_eina_mempool_log_dom, __VA_ARGS__)
54
55#ifdef WRN
56#undef WRN
57#endif
58#define WRN(...) EINA_LOG_DOM_WARN(_eina_one_big_mp_log_dom, __VA_ARGS__)
59
60static int _eina_one_big_mp_log_dom = -1;
61
62typedef struct _One_Big One_Big;
63struct _One_Big
64{
65 const char *name;
66
67 int item_size;
68
69 int usage;
70 int over;
71
72 int served;
73 int max;
74 unsigned char *base;
75
76 Eina_Trash *empty;
77 Eina_Inlist *over_list;
78
79#ifdef EFL_DEBUG_THREADS
80 pthread_t self;
81#endif
82 Eina_Lock mutex;
83};
84
85static void *
86eina_one_big_malloc(void *data, __UNUSED__ unsigned int size)
87{
88 One_Big *pool = data;
89 unsigned char *mem = NULL;
90
91 if (!eina_lock_take(&pool->mutex))
92 {
93#ifdef EFL_DEBUG_THREADS
94 assert(pthread_equal(pool->self, pthread_self()));
95#endif
96 }
97
98 if (pool->empty)
99 {
100#ifndef NVALGRIND
101 VALGRIND_MAKE_MEM_DEFINED(pool->empty, pool->item_size);
102#endif
103 mem = eina_trash_pop(&pool->empty);
104 pool->usage++;
105 goto on_exit;
106 }
107
108 if (!pool->base)
109 {
110 pool->base = malloc(pool->item_size * pool->max);
111 if (!pool->base)
112 {
113 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
114 goto retry_smaller;
115 }
116#ifndef NVALGRIND
117 VALGRIND_MAKE_MEM_NOACCESS(pool->base, pool->item_size * pool->max);
118#endif
119 }
120
121 if (pool->served < pool->max)
122 {
123 mem = pool->base + (pool->served++ *pool->item_size);
124 pool->usage++;
125 goto on_exit;
126 }
127
128 retry_smaller:
129 eina_error_set(0);
130 mem = malloc(sizeof(Eina_Inlist) + pool->item_size);
131 if (!mem)
132 eina_error_set(EINA_ERROR_OUT_OF_MEMORY);
133 else
134 {
135 pool->over++;
136 memset(mem, 0, sizeof(Eina_Inlist));
137 pool->over_list = eina_inlist_append(pool->over_list,
138 (Eina_Inlist *)mem);
139 mem = ((unsigned char *)mem) + sizeof(Eina_Inlist);
140 }
141#ifndef NVALGRIND
142 VALGRIND_MAKE_MEM_NOACCESS(mem, pool->item_size);
143#endif
144
145on_exit:
146 eina_lock_release(&pool->mutex);
147
148#ifndef NVALGRIND
149 VALGRIND_MEMPOOL_ALLOC(pool, mem, pool->item_size);
150#endif
151 return mem;
152}
153
154static void
155eina_one_big_free(void *data, void *ptr)
156{
157 One_Big *pool = data;
158
159 if (!eina_lock_take(&pool->mutex))
160 {
161#ifdef EFL_DEBUG_THREADS
162 assert(pthread_equal(pool->self, pthread_self()));
163#endif
164 }
165
166 if ((void *)pool->base <= ptr
167 && ptr < (void *)(pool->base + (pool->max * pool->item_size)))
168 {
169 eina_trash_push(&pool->empty, ptr);
170 pool->usage--;
171 }
172 else
173 {
174#ifndef NDEBUG
175 Eina_Inlist *it;
176#endif
177 Eina_Inlist *il;
178
179 il = (Eina_Inlist *)(((unsigned char *)ptr) - sizeof(Eina_Inlist));
180
181#ifndef NDEBUG
182 for (it = pool->over_list; it != NULL; it = it->next)
183 if (it == il) break;
184
185 assert(it != NULL);
186#endif
187
188 pool->over_list = eina_inlist_remove(pool->over_list, il);
189 free(il);
190 pool->over--;
191 }
192
193#ifndef NVALGRIND
194 VALGRIND_MEMPOOL_FREE(pool, ptr);
195#endif
196
197 eina_lock_release(&pool->mutex);
198}
199
200static void *
201eina_one_big_realloc(__UNUSED__ void *data,
202 __UNUSED__ void *element,
203 __UNUSED__ unsigned int size)
204{
205 return NULL;
206}
207
208static void *
209eina_one_big_init(const char *context,
210 __UNUSED__ const char *option,
211 va_list args)
212{
213 One_Big *pool;
214 int item_size;
215 size_t length;
216
217 length = context ? strlen(context) + 1 : 0;
218
219 pool = calloc(1, sizeof (One_Big) + length);
220 if (!pool)
221 return NULL;
222
223 item_size = va_arg(args, int);
224
225 pool->item_size = eina_mempool_alignof(item_size);
226 pool->max = va_arg(args, int);
227
228 if (length)
229 {
230 pool->name = (const char *)(pool + 1);
231 memcpy((char *)pool->name, context, length);
232 }
233
234#ifdef EFL_DEBUG_THREADS
235 pool->self = pthread_self();
236#endif
237 eina_lock_new(&pool->mutex);
238
239#ifndef NVALGRIND
240 VALGRIND_CREATE_MEMPOOL(pool, 0, 1);
241#endif
242
243 return pool;
244}
245
246static void
247eina_one_big_shutdown(void *data)
248{
249 One_Big *pool = data;
250
251 if (!pool) return;
252 if (!eina_lock_take(&pool->mutex))
253 {
254#ifdef EFL_DEBUG_THREADS
255 assert(pthread_equal(pool->self, pthread_self()));
256#endif
257 }
258
259 if (pool->over > 0)
260 {
261// FIXME: should we warn here? one_big mempool exceeded its alloc and now
262// mempool is cleaning up the mess created. be quiet for now as we were before
263// but edje seems to be a big offender at the moment! bad cedric! :)
264// WRN(
265// "Pool [%s] over by %i. cleaning up for you",
266// pool->name, pool->over);
267 while (pool->over_list)
268 {
269 Eina_Inlist *il = pool->over_list;
270 pool->over_list = eina_inlist_remove(pool->over_list, il);
271 free(il);
272 pool->over--;
273 }
274 }
275 if (pool->over > 0)
276 {
277 WRN(
278 "Pool [%s] still over by %i\n",
279 pool->name, pool->over);
280 }
281
282#ifndef NVALGRIND
283 VALGRIND_DESTROY_MEMPOOL(pool);
284#endif
285
286 if (pool->base) free(pool->base);
287
288 eina_lock_release(&pool->mutex);
289 eina_lock_free(&pool->mutex);
290 free(pool);
291}
292
293
294static Eina_Mempool_Backend _eina_one_big_mp_backend = {
295 "one_big",
296 &eina_one_big_init,
297 &eina_one_big_free,
298 &eina_one_big_malloc,
299 &eina_one_big_realloc,
300 NULL,
301 NULL,
302 &eina_one_big_shutdown,
303 NULL
304};
305
306Eina_Bool one_big_init(void)
307{
308#ifdef DEBUG
309 _eina_one_big_mp_log_dom = eina_log_domain_register("eina_one_big_mempool",
310 EINA_LOG_COLOR_DEFAULT);
311 if (_eina_one_big_mp_log_dom < 0)
312 {
313 EINA_LOG_ERR("Could not register log domain: eina_one_big_mempool");
314 return EINA_FALSE;
315 }
316
317#endif
318 return eina_mempool_register(&_eina_one_big_mp_backend);
319}
320
321void one_big_shutdown(void)
322{
323 eina_mempool_unregister(&_eina_one_big_mp_backend);
324#ifdef DEBUG
325 eina_log_domain_unregister(_eina_one_big_mp_log_dom);
326 _eina_one_big_mp_log_dom = -1;
327#endif
328}
329
330#ifndef EINA_STATIC_BUILD_ONE_BIG
331
332EINA_MODULE_INIT(one_big_init);
333EINA_MODULE_SHUTDOWN(one_big_shutdown);
334
335#endif /* ! EINA_STATIC_BUILD_ONE_BIG */
336
diff --git a/libraries/eina/src/modules/mp/pass_through/Makefile.am b/libraries/eina/src/modules/mp/pass_through/Makefile.am
new file mode 100644
index 0000000..8f48974
--- /dev/null
+++ b/libraries/eina/src/modules/mp/pass_through/Makefile.am
@@ -0,0 +1,29 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3AM_CPPFLAGS = \
4-I. \
5-I$(top_srcdir)/src/include \
6-I$(top_builddir)/src/include \
7-I$(top_srcdir)/src/lib \
8-I$(top_builddir)/src/lib \
9@EINA_CPPFLAGS@ \
10@EFL_EINA_BUILD@
11
12controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH)
13controller_LTLIBRARIES = module.la
14
15module_la_SOURCES = \
16eina_pass_through.c
17
18module_la_CFLAGS = @EINA_CFLAGS@
19module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
20module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
21module_la_LIBTOOLFLAGS = --tag=disable-static
22
23install-data-hook:
24 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
25uninstall-hook:
26 rm -f $(DESTDIR)$(controllerdir)/module.*
27
28clean-local:
29 rm -rf *.gcno
diff --git a/libraries/eina/src/modules/mp/pass_through/Makefile.in b/libraries/eina/src/modules/mp/pass_through/Makefile.in
new file mode 100644
index 0000000..01e7b51
--- /dev/null
+++ b/libraries/eina/src/modules/mp/pass_through/Makefile.in
@@ -0,0 +1,643 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/modules/mp/pass_through
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_benchmark.m4 \
42 $(top_srcdir)/m4/efl_compiler_flag.m4 \
43 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
44 $(top_srcdir)/m4/efl_doxygen.m4 \
45 $(top_srcdir)/m4/efl_examples.m4 \
46 $(top_srcdir)/m4/efl_fnmatch.m4 \
47 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
48 $(top_srcdir)/m4/efl_threads.m4 \
49 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
50 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
51 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
52 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
53 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
54am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
55 $(ACLOCAL_M4)
56mkinstalldirs = $(install_sh) -d
57CONFIG_HEADER = $(top_builddir)/config.h
58CONFIG_CLEAN_FILES =
59CONFIG_CLEAN_VPATH_FILES =
60am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
61am__vpath_adj = case $$p in \
62 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
63 *) f=$$p;; \
64 esac;
65am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
66am__install_max = 40
67am__nobase_strip_setup = \
68 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
69am__nobase_strip = \
70 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
71am__nobase_list = $(am__nobase_strip_setup); \
72 for p in $$list; do echo "$$p $$p"; done | \
73 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
74 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
75 if (++n[$$2] == $(am__install_max)) \
76 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
77 END { for (dir in files) print dir, files[dir] }'
78am__base_list = \
79 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
80 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
81am__installdirs = "$(DESTDIR)$(controllerdir)"
82LTLIBRARIES = $(controller_LTLIBRARIES)
83module_la_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
84am_module_la_OBJECTS = module_la-eina_pass_through.lo
85module_la_OBJECTS = $(am_module_la_OBJECTS)
86AM_V_lt = $(am__v_lt_$(V))
87am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
88am__v_lt_0 = --silent
89module_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
90 $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
91 $(module_la_CFLAGS) $(CFLAGS) $(module_la_LDFLAGS) $(LDFLAGS) \
92 -o $@
93DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
94depcomp = $(SHELL) $(top_srcdir)/depcomp
95am__depfiles_maybe = depfiles
96am__mv = mv -f
97COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
98 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
99LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
100 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
101 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
102 $(AM_CFLAGS) $(CFLAGS)
103AM_V_CC = $(am__v_CC_$(V))
104am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
105am__v_CC_0 = @echo " CC " $@;
106AM_V_at = $(am__v_at_$(V))
107am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
108am__v_at_0 = @
109CCLD = $(CC)
110LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
111 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
112 $(AM_LDFLAGS) $(LDFLAGS) -o $@
113AM_V_CCLD = $(am__v_CCLD_$(V))
114am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
115am__v_CCLD_0 = @echo " CCLD " $@;
116AM_V_GEN = $(am__v_GEN_$(V))
117am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
118am__v_GEN_0 = @echo " GEN " $@;
119SOURCES = $(module_la_SOURCES)
120DIST_SOURCES = $(module_la_SOURCES)
121ETAGS = etags
122CTAGS = ctags
123DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
124ACLOCAL = @ACLOCAL@
125ALLOCA = @ALLOCA@
126AMTAR = @AMTAR@
127AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
128AR = @AR@
129AS = @AS@
130AUTOCONF = @AUTOCONF@
131AUTOHEADER = @AUTOHEADER@
132AUTOMAKE = @AUTOMAKE@
133AWK = @AWK@
134CC = @CC@
135CCDEPMODE = @CCDEPMODE@
136CFLAGS = @CFLAGS@
137CHECK_CFLAGS = @CHECK_CFLAGS@
138CHECK_LIBS = @CHECK_LIBS@
139CPP = @CPP@
140CPPFLAGS = @CPPFLAGS@
141CXX = @CXX@
142CXXCPP = @CXXCPP@
143CXXDEPMODE = @CXXDEPMODE@
144CXXFLAGS = @CXXFLAGS@
145CYGPATH_W = @CYGPATH_W@
146DEFS = @DEFS@
147DEPDIR = @DEPDIR@
148DLLTOOL = @DLLTOOL@
149DSYMUTIL = @DSYMUTIL@
150DUMPBIN = @DUMPBIN@
151ECHO_C = @ECHO_C@
152ECHO_N = @ECHO_N@
153ECHO_T = @ECHO_T@
154ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
155ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
156EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
157EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
158EFL_EINA_BUILD = @EFL_EINA_BUILD@
159EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
160EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
161EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
162EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
163EGREP = @EGREP@
164EINA_CFLAGS = @EINA_CFLAGS@
165EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
166EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
167EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
168EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
169EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
170EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
171EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
172EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
173EINA_CPPFLAGS = @EINA_CPPFLAGS@
174EINA_LIBS = @EINA_LIBS@
175EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
176EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
177EMEMOA_LIBS = @EMEMOA_LIBS@
178ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
179ESCAPE_LIBS = @ESCAPE_LIBS@
180EVIL_CFLAGS = @EVIL_CFLAGS@
181EVIL_LIBS = @EVIL_LIBS@
182EXEEXT = @EXEEXT@
183FGREP = @FGREP@
184GLIB_CFLAGS = @GLIB_CFLAGS@
185GLIB_LIBS = @GLIB_LIBS@
186GREP = @GREP@
187INSTALL = @INSTALL@
188INSTALL_DATA = @INSTALL_DATA@
189INSTALL_PROGRAM = @INSTALL_PROGRAM@
190INSTALL_SCRIPT = @INSTALL_SCRIPT@
191INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
192LD = @LD@
193LDFLAGS = @LDFLAGS@
194LIBOBJS = @LIBOBJS@
195LIBS = @LIBS@
196LIBTOOL = @LIBTOOL@
197LIPO = @LIPO@
198LN_S = @LN_S@
199LTLIBOBJS = @LTLIBOBJS@
200MAKEINFO = @MAKEINFO@
201MKDIR_P = @MKDIR_P@
202MODULE_ARCH = @MODULE_ARCH@
203NM = @NM@
204NMEDIT = @NMEDIT@
205OBJDUMP = @OBJDUMP@
206OBJEXT = @OBJEXT@
207OTOOL = @OTOOL@
208OTOOL64 = @OTOOL64@
209PACKAGE = @PACKAGE@
210PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
211PACKAGE_NAME = @PACKAGE_NAME@
212PACKAGE_STRING = @PACKAGE_STRING@
213PACKAGE_TARNAME = @PACKAGE_TARNAME@
214PACKAGE_URL = @PACKAGE_URL@
215PACKAGE_VERSION = @PACKAGE_VERSION@
216PATH_SEPARATOR = @PATH_SEPARATOR@
217PKG_CONFIG = @PKG_CONFIG@
218PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
219PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
220RANLIB = @RANLIB@
221SED = @SED@
222SET_MAKE = @SET_MAKE@
223SHELL = @SHELL@
224STRIP = @STRIP@
225VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@
228VMAJ = @VMAJ@
229abs_builddir = @abs_builddir@
230abs_srcdir = @abs_srcdir@
231abs_top_builddir = @abs_top_builddir@
232abs_top_srcdir = @abs_top_srcdir@
233ac_ct_CC = @ac_ct_CC@
234ac_ct_CXX = @ac_ct_CXX@
235ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
236am__include = @am__include@
237am__leading_dot = @am__leading_dot@
238am__quote = @am__quote@
239am__tar = @am__tar@
240am__untar = @am__untar@
241bindir = @bindir@
242build = @build@
243build_alias = @build_alias@
244build_cpu = @build_cpu@
245build_os = @build_os@
246build_vendor = @build_vendor@
247builddir = @builddir@
248datadir = @datadir@
249datarootdir = @datarootdir@
250dlopen_libs = @dlopen_libs@
251docdir = @docdir@
252dvidir = @dvidir@
253efl_doxygen = @efl_doxygen@
254efl_have_doxygen = @efl_have_doxygen@
255exec_prefix = @exec_prefix@
256have_lcov = @have_lcov@
257host = @host@
258host_alias = @host_alias@
259host_cpu = @host_cpu@
260host_os = @host_os@
261host_vendor = @host_vendor@
262htmldir = @htmldir@
263iconv_libs = @iconv_libs@
264includedir = @includedir@
265infodir = @infodir@
266install_sh = @install_sh@
267libdir = @libdir@
268libexecdir = @libexecdir@
269localedir = @localedir@
270localstatedir = @localstatedir@
271lt_ECHO = @lt_ECHO@
272lt_enable_auto_import = @lt_enable_auto_import@
273mandir = @mandir@
274mkdir_p = @mkdir_p@
275oldincludedir = @oldincludedir@
276pdfdir = @pdfdir@
277pkgconfig_requires_private = @pkgconfig_requires_private@
278prefix = @prefix@
279program_transform_name = @program_transform_name@
280psdir = @psdir@
281release_info = @release_info@
282requirement_eina = @requirement_eina@
283rt_libs = @rt_libs@
284sbindir = @sbindir@
285sharedstatedir = @sharedstatedir@
286srcdir = @srcdir@
287sysconfdir = @sysconfdir@
288target_alias = @target_alias@
289top_build_prefix = @top_build_prefix@
290top_builddir = @top_builddir@
291top_srcdir = @top_srcdir@
292version_info = @version_info@
293MAINTAINERCLEANFILES = Makefile.in
294AM_CPPFLAGS = \
295-I. \
296-I$(top_srcdir)/src/include \
297-I$(top_builddir)/src/include \
298-I$(top_srcdir)/src/lib \
299-I$(top_builddir)/src/lib \
300@EINA_CPPFLAGS@ \
301@EFL_EINA_BUILD@
302
303controllerdir = $(libdir)//eina/modules/mp/pass_through/$(MODULE_ARCH)
304controller_LTLIBRARIES = module.la
305module_la_SOURCES = \
306eina_pass_through.c
307
308module_la_CFLAGS = @EINA_CFLAGS@
309module_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
310module_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
311module_la_LIBTOOLFLAGS = --tag=disable-static
312all: all-am
313
314.SUFFIXES:
315.SUFFIXES: .c .lo .o .obj
316$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
317 @for dep in $?; do \
318 case '$(am__configure_deps)' in \
319 *$$dep*) \
320 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
321 && { if test -f $@; then exit 0; else break; fi; }; \
322 exit 1;; \
323 esac; \
324 done; \
325 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/modules/mp/pass_through/Makefile'; \
326 $(am__cd) $(top_srcdir) && \
327 $(AUTOMAKE) --gnu src/modules/mp/pass_through/Makefile
328.PRECIOUS: Makefile
329Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
330 @case '$?' in \
331 *config.status*) \
332 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
333 *) \
334 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
335 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
336 esac;
337
338$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
339 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
340
341$(top_srcdir)/configure: $(am__configure_deps)
342 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
343$(ACLOCAL_M4): $(am__aclocal_m4_deps)
344 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
345$(am__aclocal_m4_deps):
346install-controllerLTLIBRARIES: $(controller_LTLIBRARIES)
347 @$(NORMAL_INSTALL)
348 test -z "$(controllerdir)" || $(MKDIR_P) "$(DESTDIR)$(controllerdir)"
349 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
350 list2=; for p in $$list; do \
351 if test -f $$p; then \
352 list2="$$list2 $$p"; \
353 else :; fi; \
354 done; \
355 test -z "$$list2" || { \
356 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(controllerdir)'"; \
357 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(controllerdir)"; \
358 }
359
360uninstall-controllerLTLIBRARIES:
361 @$(NORMAL_UNINSTALL)
362 @list='$(controller_LTLIBRARIES)'; test -n "$(controllerdir)" || list=; \
363 for p in $$list; do \
364 $(am__strip_dir) \
365 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(controllerdir)/$$f'"; \
366 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(controllerdir)/$$f"; \
367 done
368
369clean-controllerLTLIBRARIES:
370 -test -z "$(controller_LTLIBRARIES)" || rm -f $(controller_LTLIBRARIES)
371 @list='$(controller_LTLIBRARIES)'; for p in $$list; do \
372 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
373 test "$$dir" != "$$p" || dir=.; \
374 echo "rm -f \"$${dir}/so_locations\""; \
375 rm -f "$${dir}/so_locations"; \
376 done
377module.la: $(module_la_OBJECTS) $(module_la_DEPENDENCIES)
378 $(AM_V_CCLD)$(module_la_LINK) -rpath $(controllerdir) $(module_la_OBJECTS) $(module_la_LIBADD) $(LIBS)
379
380mostlyclean-compile:
381 -rm -f *.$(OBJEXT)
382
383distclean-compile:
384 -rm -f *.tab.c
385
386@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_la-eina_pass_through.Plo@am__quote@
387
388.c.o:
389@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
390@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
391@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
392@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
393@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
394@am__fastdepCC_FALSE@ $(COMPILE) -c $<
395
396.c.obj:
397@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
398@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
399@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
400@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
401@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
402@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
403
404.c.lo:
405@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
406@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
407@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
408@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
409@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
410@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
411
412module_la-eina_pass_through.lo: eina_pass_through.c
413@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -MT module_la-eina_pass_through.lo -MD -MP -MF $(DEPDIR)/module_la-eina_pass_through.Tpo -c -o module_la-eina_pass_through.lo `test -f 'eina_pass_through.c' || echo '$(srcdir)/'`eina_pass_through.c
414@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_la-eina_pass_through.Tpo $(DEPDIR)/module_la-eina_pass_through.Plo
415@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
416@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_pass_through.c' object='module_la-eina_pass_through.lo' libtool=yes @AMDEPBACKSLASH@
417@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
418@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(module_la_CFLAGS) $(CFLAGS) -c -o module_la-eina_pass_through.lo `test -f 'eina_pass_through.c' || echo '$(srcdir)/'`eina_pass_through.c
419
420mostlyclean-libtool:
421 -rm -f *.lo
422
423clean-libtool:
424 -rm -rf .libs _libs
425
426ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
427 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
428 unique=`for i in $$list; do \
429 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
430 done | \
431 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
432 END { if (nonempty) { for (i in files) print i; }; }'`; \
433 mkid -fID $$unique
434tags: TAGS
435
436TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
437 $(TAGS_FILES) $(LISP)
438 set x; \
439 here=`pwd`; \
440 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
441 unique=`for i in $$list; do \
442 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
443 done | \
444 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
445 END { if (nonempty) { for (i in files) print i; }; }'`; \
446 shift; \
447 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
448 test -n "$$unique" || unique=$$empty_fix; \
449 if test $$# -gt 0; then \
450 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
451 "$$@" $$unique; \
452 else \
453 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
454 $$unique; \
455 fi; \
456 fi
457ctags: CTAGS
458CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
459 $(TAGS_FILES) $(LISP)
460 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
461 unique=`for i in $$list; do \
462 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
463 done | \
464 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
465 END { if (nonempty) { for (i in files) print i; }; }'`; \
466 test -z "$(CTAGS_ARGS)$$unique" \
467 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
468 $$unique
469
470GTAGS:
471 here=`$(am__cd) $(top_builddir) && pwd` \
472 && $(am__cd) $(top_srcdir) \
473 && gtags -i $(GTAGS_ARGS) "$$here"
474
475distclean-tags:
476 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
477
478distdir: $(DISTFILES)
479 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
480 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
481 list='$(DISTFILES)'; \
482 dist_files=`for file in $$list; do echo $$file; done | \
483 sed -e "s|^$$srcdirstrip/||;t" \
484 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
485 case $$dist_files in \
486 */*) $(MKDIR_P) `echo "$$dist_files" | \
487 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
488 sort -u` ;; \
489 esac; \
490 for file in $$dist_files; do \
491 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
492 if test -d $$d/$$file; then \
493 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
494 if test -d "$(distdir)/$$file"; then \
495 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
496 fi; \
497 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
498 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
499 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
500 fi; \
501 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
502 else \
503 test -f "$(distdir)/$$file" \
504 || cp -p $$d/$$file "$(distdir)/$$file" \
505 || exit 1; \
506 fi; \
507 done
508check-am: all-am
509check: check-am
510all-am: Makefile $(LTLIBRARIES)
511installdirs:
512 for dir in "$(DESTDIR)$(controllerdir)"; do \
513 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
514 done
515install: install-am
516install-exec: install-exec-am
517install-data: install-data-am
518uninstall: uninstall-am
519
520install-am: all-am
521 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
522
523installcheck: installcheck-am
524install-strip:
525 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
526 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
527 `test -z '$(STRIP)' || \
528 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
529mostlyclean-generic:
530
531clean-generic:
532
533distclean-generic:
534 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
535 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
536
537maintainer-clean-generic:
538 @echo "This command is intended for maintainers to use"
539 @echo "it deletes files that may require special tools to rebuild."
540 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
541clean: clean-am
542
543clean-am: clean-controllerLTLIBRARIES clean-generic clean-libtool \
544 clean-local mostlyclean-am
545
546distclean: distclean-am
547 -rm -rf ./$(DEPDIR)
548 -rm -f Makefile
549distclean-am: clean-am distclean-compile distclean-generic \
550 distclean-tags
551
552dvi: dvi-am
553
554dvi-am:
555
556html: html-am
557
558html-am:
559
560info: info-am
561
562info-am:
563
564install-data-am: install-controllerLTLIBRARIES
565 @$(NORMAL_INSTALL)
566 $(MAKE) $(AM_MAKEFLAGS) install-data-hook
567install-dvi: install-dvi-am
568
569install-dvi-am:
570
571install-exec-am:
572
573install-html: install-html-am
574
575install-html-am:
576
577install-info: install-info-am
578
579install-info-am:
580
581install-man:
582
583install-pdf: install-pdf-am
584
585install-pdf-am:
586
587install-ps: install-ps-am
588
589install-ps-am:
590
591installcheck-am:
592
593maintainer-clean: maintainer-clean-am
594 -rm -rf ./$(DEPDIR)
595 -rm -f Makefile
596maintainer-clean-am: distclean-am maintainer-clean-generic
597
598mostlyclean: mostlyclean-am
599
600mostlyclean-am: mostlyclean-compile mostlyclean-generic \
601 mostlyclean-libtool
602
603pdf: pdf-am
604
605pdf-am:
606
607ps: ps-am
608
609ps-am:
610
611uninstall-am: uninstall-controllerLTLIBRARIES
612 @$(NORMAL_INSTALL)
613 $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
614.MAKE: install-am install-data-am install-strip uninstall-am
615
616.PHONY: CTAGS GTAGS all all-am check check-am clean \
617 clean-controllerLTLIBRARIES clean-generic clean-libtool \
618 clean-local ctags distclean distclean-compile \
619 distclean-generic distclean-libtool distclean-tags distdir dvi \
620 dvi-am html html-am info info-am install install-am \
621 install-controllerLTLIBRARIES install-data install-data-am \
622 install-data-hook install-dvi install-dvi-am install-exec \
623 install-exec-am install-html install-html-am install-info \
624 install-info-am install-man install-pdf install-pdf-am \
625 install-ps install-ps-am install-strip installcheck \
626 installcheck-am installdirs maintainer-clean \
627 maintainer-clean-generic mostlyclean mostlyclean-compile \
628 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
629 tags uninstall uninstall-am uninstall-controllerLTLIBRARIES \
630 uninstall-hook
631
632
633install-data-hook:
634 rm -f $(DESTDIR)$(controllerdir)/$(controller_LTLIBRARIES)
635uninstall-hook:
636 rm -f $(DESTDIR)$(controllerdir)/module.*
637
638clean-local:
639 rm -rf *.gcno
640
641# Tell versions [3.59,3.63) of GNU make to not export all variables.
642# Otherwise a system limit (for SysV at least) may be exceeded.
643.NOEXPORT:
diff --git a/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c b/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c
new file mode 100644
index 0000000..196868e
--- /dev/null
+++ b/libraries/eina/src/modules/mp/pass_through/eina_pass_through.c
@@ -0,0 +1,90 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24
25#include "eina_types.h"
26#include "eina_module.h"
27#include "eina_mempool.h"
28#include "eina_private.h"
29
30static void *
31eina_pass_through_malloc(__UNUSED__ void *data, unsigned int size)
32{
33 return malloc(size);
34}
35
36static void
37eina_pass_through_free(__UNUSED__ void *data, void *ptr)
38{
39 free(ptr);
40}
41
42static void *
43eina_pass_through_realloc(__UNUSED__ void *data, void *ptr, unsigned int size)
44{
45 return realloc(ptr, size);
46}
47
48static void *
49eina_pass_through_init(__UNUSED__ const char *context,
50 __UNUSED__ const char *option,
51 __UNUSED__ va_list args)
52{
53 return (void *)0x1;
54}
55
56static void
57eina_pass_through_shutdown(__UNUSED__ void *data)
58{
59}
60
61
62static Eina_Mempool_Backend _eina_pass_through_mp_backend = {
63 "pass_through",
64 &eina_pass_through_init,
65 &eina_pass_through_free,
66 &eina_pass_through_malloc,
67 &eina_pass_through_realloc,
68 NULL,
69 NULL,
70 &eina_pass_through_shutdown,
71 NULL
72};
73
74Eina_Bool pass_through_init(void)
75{
76 return eina_mempool_register(&_eina_pass_through_mp_backend);
77}
78
79void pass_through_shutdown(void)
80{
81 eina_mempool_unregister(&_eina_pass_through_mp_backend);
82}
83
84#ifndef EINA_STATIC_BUILD_PASS_THROUGH
85
86EINA_MODULE_INIT(pass_through_init);
87EINA_MODULE_SHUTDOWN(pass_through_shutdown);
88
89#endif /* ! EINA_STATIC_BUILD_PASS_THROUGH */
90
diff --git a/libraries/eina/src/tests/Ecore_Data.h b/libraries/eina/src/tests/Ecore_Data.h
new file mode 100644
index 0000000..50d42f1
--- /dev/null
+++ b/libraries/eina/src/tests/Ecore_Data.h
@@ -0,0 +1,557 @@
1#ifndef _ECORE_DATA_H
2# define _ECORE_DATA_H
3
4#include <stdio.h>
5/* we need this for size_t */
6#include <stddef.h>
7
8#ifdef EAPI
9# undef EAPI
10#endif
11
12#ifdef _WIN32
13# ifdef EFL_ECORE_BUILD
14# ifdef DLL_EXPORT
15# define EAPI __declspec(dllexport)
16# else
17# define EAPI
18# endif /* ! DLL_EXPORT */
19# else
20# define EAPI __declspec(dllimport)
21# endif /* ! EFL_ECORE_BUILD */
22#else
23# ifdef __GNUC__
24# if __GNUC__ >= 4
25# define EAPI __attribute__ ((visibility("default")))
26# else
27# define EAPI
28# endif
29# else
30# define EAPI
31# endif
32#endif /* ! _WIN32 */
33
34/**
35 * @file Ecore_Data.h
36 * @brief Contains threading, list, hash, debugging and tree functions.
37 */
38
39# ifdef __cplusplus
40extern "C" {
41# endif
42
43
44#ifndef TRUE
45# define TRUE 1
46#endif
47
48#ifndef FALSE
49# define FALSE 0
50#endif
51
52#ifdef FREE
53# undef FREE
54#endif
55#define FREE(ptr) free(ptr); ptr = NULL;
56
57#ifdef IF_FREE
58# undef IF_FREE
59#endif
60#define IF_FREE(ptr) if (ptr) {free(ptr); } ptr = NULL;
61
62/* convenience macros for checking pointer parameters for non-NULL */
63#undef CHECK_PARAM_POINTER_RETURN
64#define CHECK_PARAM_POINTER_RETURN(sparam, param, ret) \
65 if (!(param)) \
66 { \
67 printf("***** Developer Warning ***** :\n" \
68 "\tThis program is calling:\n\n" \
69 "\t%s();\n\n" \
70 "\tWith the parameter:\n\n" \
71 "\t%s\n\n" \
72 "\tbeing NULL. Please fix your program.", __FUNCTION__, sparam); \
73 if (getenv("ECORE_ERROR_ABORT")) { abort(); } \
74 return ret; \
75 }
76
77#undef CHECK_PARAM_POINTER
78#define CHECK_PARAM_POINTER(sparam, param) \
79 if (!(param)) \
80 { \
81 printf("***** Developer Warning ***** :\n" \
82 "\tThis program is calling:\n\n" \
83 "\t%s();\n\n" \
84 "\tWith the parameter:\n\n" \
85 "\t%s\n\n" \
86 "\tbeing NULL. Please fix your program.", __FUNCTION__, sparam); \
87 if (getenv("ECORE_ERROR_ABORT")) { abort(); } \
88 return; \
89 }
90
91
92# ifdef __sgi
93# define __FUNCTION__ "unknown"
94# ifndef __cplusplus
95# define inline
96# endif
97# endif
98
99# define ECORE_SORT_MIN 0
100# define ECORE_SORT_MAX 1
101
102typedef void (*Ecore_For_Each)(void *value, void *user_data);
103# define ECORE_FOR_EACH(function) ((Ecore_For_Each)function)
104
105typedef void (*Ecore_Free_Cb)(void *data);
106# define ECORE_FREE_CB(func) ((Ecore_Free_Cb)func)
107
108typedef unsigned int (*Ecore_Hash_Cb)(const void *key);
109# define ECORE_HASH_CB(function) ((Ecore_Hash_Cb)function)
110
111typedef int (*Ecore_Compare_Cb)(const void *data1, const void *data2);
112# define ECORE_COMPARE_CB(function) ((Ecore_Compare_Cb)function)
113
114typedef struct _ecore_list Ecore_List;
115# define ECORE_LIST(list) ((Ecore_List *)list)
116
117typedef struct _ecore_list_node Ecore_List_Node;
118# define ECORE_LIST_NODE(node) ((Ecore_List_Node *)node)
119
120typedef struct _ecore_strbuf Ecore_Strbuf;
121# define ECORE_STRBUF(buf) ((Ecore_Strbuf *)buf)
122
123struct _ecore_list_node
124{
125 void *data;
126 struct _ecore_list_node *next;
127};
128
129struct _ecore_list
130{
131 Ecore_List_Node *first; /* The first node in the list */
132 Ecore_List_Node *last; /* The last node in the list */
133 Ecore_List_Node *current; /* The current node in the list */
134
135 Ecore_Free_Cb free_func; /* The callback to free data in nodes */
136
137 int nodes; /* The number of nodes in the list */
138 int index; /* The position from the front of the
139 list of current node */
140};
141
142EAPI int ecore_direct_compare(const void *key1, const void *key2);
143EAPI int ecore_str_compare(const void *key1, const void *key2);
144
145EAPI unsigned int ecore_direct_hash(const void *key);
146EAPI unsigned int ecore_str_hash(const void *key);
147
148/* Creating and initializing new list structures */
149EAPI Ecore_List * ecore_list_new(void);
150EAPI int ecore_list_init(Ecore_List *list);
151
152/* Adding items to the list */
153EAPI int ecore_list_append(Ecore_List *list, void *_data);
154EAPI int ecore_list_prepend(Ecore_List *list, void *_data);
155EAPI int ecore_list_insert(Ecore_List *list, void *_data);
156EAPI int ecore_list_append_list(Ecore_List *list,
157 Ecore_List *append);
158EAPI int ecore_list_prepend_list(Ecore_List *list,
159 Ecore_List *prepend);
160
161/* Removing items from the list */
162EAPI int ecore_list_remove_destroy(Ecore_List *list);
163EAPI void * ecore_list_remove(Ecore_List *list);
164EAPI void * ecore_list_first_remove(Ecore_List *list);
165EAPI void * ecore_list_last_remove(Ecore_List *list);
166
167/* Retrieve the current position in the list */
168EAPI void * ecore_list_current(Ecore_List *list);
169EAPI void * ecore_list_first(Ecore_List *list);
170EAPI void * ecore_list_last(Ecore_List *list);
171EAPI int ecore_list_index(Ecore_List *list);
172EAPI int ecore_list_count(Ecore_List *list);
173
174/* Traversing the list */
175EAPI int ecore_list_for_each(Ecore_List *list,
176 Ecore_For_Each function,
177 void *user_data);
178EAPI void * ecore_list_first_goto(Ecore_List *list);
179EAPI void * ecore_list_last_goto(Ecore_List *list);
180EAPI void * ecore_list_index_goto(Ecore_List *list, int index);
181EAPI void * ecore_list_goto(Ecore_List *list, const void *_data);
182
183/* Traversing the list and returning data */
184EAPI void * ecore_list_next(Ecore_List *list);
185EAPI void * ecore_list_find(Ecore_List *list,
186 Ecore_Compare_Cb function,
187 const void *user_data);
188
189/* Sorting the list */
190EAPI int ecore_list_sort(Ecore_List *list,
191 Ecore_Compare_Cb compare,
192 char order);
193EAPI int ecore_list_mergesort(Ecore_List *list,
194 Ecore_Compare_Cb compare,
195 char order);
196EAPI int ecore_list_heapsort(Ecore_List *list,
197 Ecore_Compare_Cb compare,
198 char order);
199EAPI void ecore_list_merge(Ecore_List *list, Ecore_List *l2,
200 Ecore_Compare_Cb, char order);
201
202/* Check to see if there is any data in the list */
203EAPI int ecore_list_empty_is(Ecore_List *list);
204
205/* Remove every node in the list without freeing the list itself */
206EAPI int ecore_list_clear(Ecore_List *list);
207/* Free the list and it's contents */
208EAPI void ecore_list_destroy(Ecore_List *list);
209
210/* Creating and initializing list nodes */
211EAPI Ecore_List_Node *ecore_list_node_new(void);
212EAPI int ecore_list_node_init(Ecore_List_Node *newNode);
213
214/* Destroying nodes */
215EAPI int ecore_list_node_destroy(Ecore_List_Node *_e_node,
216 Ecore_Free_Cb free_func);
217
218EAPI int ecore_list_free_cb_set(Ecore_List *list,
219 Ecore_Free_Cb free_func);
220
221typedef Ecore_List Ecore_DList;
222# define ECORE_DLIST(dlist) ((Ecore_DList *)dlist)
223
224typedef struct _ecore_dlist_node Ecore_DList_Node;
225# define ECORE_DLIST_NODE(dlist) ((Ecore_DList_Node *)dlist)
226
227struct _ecore_dlist_node
228{
229 Ecore_List_Node single;
230 Ecore_DList_Node *previous;
231};
232
233/* Creating and initializing new list structures */
234EAPI Ecore_DList *ecore_dlist_new(void);
235EAPI int ecore_dlist_init(Ecore_DList *list);
236EAPI void ecore_dlist_destroy(Ecore_DList *list);
237
238/* Adding items to the list */
239EAPI int ecore_dlist_append(Ecore_DList *_e_dlist, void *_data);
240EAPI int ecore_dlist_prepend(Ecore_DList *_e_dlist, void *_data);
241EAPI int ecore_dlist_insert(Ecore_DList *_e_dlist, void *_data);
242EAPI int ecore_dlist_append_list(Ecore_DList *_e_dlist,
243 Ecore_DList *append);
244EAPI int ecore_dlist_prepend_list(Ecore_DList *_e_dlist,
245 Ecore_DList *prepend);
246
247/* Info about list's state */
248# define ecore_dlist_first(list) ecore_list_first(list)
249# define ecore_dlist_last(list) ecore_list_last(list)
250EAPI void * ecore_dlist_current(Ecore_DList *list);
251EAPI int ecore_dlist_index(Ecore_DList *list);
252# define ecore_dlist_count(list) ecore_list_count(list)
253
254/* Removing items from the list */
255EAPI void * ecore_dlist_remove(Ecore_DList *_e_dlist);
256EAPI void * ecore_dlist_first_remove(Ecore_DList *_e_dlist);
257EAPI int ecore_dlist_remove_destroy(Ecore_DList *list);
258EAPI void * ecore_dlist_last_remove(Ecore_DList *_e_dlist);
259
260/* Traversing the list */
261# define ecore_dlist_for_each(list, function, user_data) \
262 ecore_list_for_each(list, function, user_data)
263EAPI void * ecore_dlist_first_goto(Ecore_DList *_e_dlist);
264EAPI void * ecore_dlist_last_goto(Ecore_DList *_e_dlist);
265EAPI void * ecore_dlist_index_goto(Ecore_DList *_e_dlist, int index);
266EAPI void * ecore_dlist_goto(Ecore_DList *_e_dlist, void *_data);
267
268/* Traversing the list and returning data */
269EAPI void * ecore_dlist_next(Ecore_DList *list);
270EAPI void * ecore_dlist_previous(Ecore_DList *list);
271
272/* Sorting the list */
273EAPI int ecore_dlist_sort(Ecore_DList *list,
274 Ecore_Compare_Cb compare,
275 char order);
276EAPI int ecore_dlist_mergesort(Ecore_DList *list,
277 Ecore_Compare_Cb compare,
278 char order);
279# define ecore_dlist_heapsort(list, compare, order) \
280 ecore_list_heapsort(list, compare, order)
281EAPI void ecore_dlist_merge(Ecore_DList *list, Ecore_DList *l2,
282 Ecore_Compare_Cb, char order);
283
284/* Check to see if there is any data in the list */
285EAPI int ecore_dlist_empty_is(Ecore_DList *_e_dlist);
286
287/* Remove every node in the list without free'ing it */
288EAPI int ecore_dlist_clear(Ecore_DList *_e_dlist);
289
290/* Creating and initializing list nodes */
291EAPI int ecore_dlist_node_init(Ecore_DList_Node *node);
292EAPI Ecore_DList_Node *ecore_dlist_node_new(void);
293
294/* Destroying nodes */
295EAPI int ecore_dlist_node_destroy(Ecore_DList_Node *node,
296 Ecore_Free_Cb free_func);
297
298EAPI int ecore_dlist_free_cb_set(Ecore_DList *dlist,
299 Ecore_Free_Cb free_func);
300
301
302
303/*
304 * Hash Table Implementation:
305 *
306 * Traditional hash table implementation. I had tried a list of tables
307 * approach to save on the realloc's but it ended up being much slower than
308 * the traditional approach.
309 */
310
311typedef struct _ecore_hash_node Ecore_Hash_Node;
312# define ECORE_HASH_NODE(hash) ((Ecore_Hash_Node *)hash)
313
314struct _ecore_hash_node
315{
316 Ecore_Hash_Node *next; /* Pointer to the next node in the bucket list */
317 void *key; /* The key for the data node */
318 void *value; /* The value associated with this node */
319};
320
321typedef struct _ecore_hash Ecore_Hash;
322# define ECORE_HASH(hash) ((Ecore_Hash *)hash)
323
324struct _ecore_hash
325{
326 Ecore_Hash_Node **buckets;
327 int size; /* An index into the table of primes to
328 determine size */
329 int nodes; /* The number of nodes currently in the hash */
330
331 int index; /* The current index into the bucket table */
332
333 Ecore_Compare_Cb compare; /* The function used to compare node values */
334 Ecore_Hash_Cb hash_func; /* The callback function to determine hash */
335
336 Ecore_Free_Cb free_key; /* The callback function to free key */
337 Ecore_Free_Cb free_value; /* The callback function to free value */
338};
339
340/* Create and initialize a hash */
341EAPI Ecore_Hash *ecore_hash_new(Ecore_Hash_Cb hash_func,
342 Ecore_Compare_Cb compare);
343EAPI int ecore_hash_init(Ecore_Hash *hash,
344 Ecore_Hash_Cb hash_func,
345 Ecore_Compare_Cb compare);
346
347/* Functions related to freeing the data in the hash table */
348EAPI int ecore_hash_free_key_cb_set(Ecore_Hash *hash,
349 Ecore_Free_Cb function);
350EAPI int ecore_hash_free_value_cb_set(Ecore_Hash *hash,
351 Ecore_Free_Cb function);
352EAPI void ecore_hash_destroy(Ecore_Hash *hash);
353
354EAPI int ecore_hash_count(Ecore_Hash *hash);
355EAPI int ecore_hash_for_each_node(Ecore_Hash *hash,
356 Ecore_For_Each for_each_func,
357 void *user_data);
358EAPI Ecore_List *ecore_hash_keys(Ecore_Hash *hash);
359
360/* Retrieve and store data into the hash */
361EAPI void * ecore_hash_get(Ecore_Hash *hash, const void *key);
362EAPI int ecore_hash_set(Ecore_Hash *hash, void *key, void *value);
363EAPI int ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set);
364EAPI void * ecore_hash_remove(Ecore_Hash *hash, const void *key);
365EAPI void * ecore_hash_find(Ecore_Hash *hash,
366 Ecore_Compare_Cb compare,
367 const void *value);
368EAPI void ecore_hash_dump_graph(Ecore_Hash *hash);
369EAPI void ecore_hash_dump_stats(Ecore_Hash *hash);
370
371
372typedef struct _ecore_heap Ecore_Sheap;
373# define ECORE_HEAP(heap) ((Ecore_Sheap *)heap)
374
375struct _ecore_heap
376{
377 void **data;
378 int size;
379 int space;
380
381 char order, sorted;
382
383 /* Callback for comparing node values, default is direct comparison */
384 Ecore_Compare_Cb compare;
385
386 /* Callback for freeing node data, default is NULL */
387 Ecore_Free_Cb free_func;
388};
389
390EAPI Ecore_Sheap *ecore_sheap_new(Ecore_Compare_Cb compare, int size);
391EAPI void ecore_sheap_destroy(Ecore_Sheap *heap);
392EAPI int ecore_sheap_init(Ecore_Sheap *heap,
393 Ecore_Compare_Cb compare,
394 int size);
395EAPI int ecore_sheap_free_cb_set(Ecore_Sheap *heap,
396 Ecore_Free_Cb free_func);
397EAPI int ecore_sheap_insert(Ecore_Sheap *heap, void *data);
398EAPI void * ecore_sheap_extract(Ecore_Sheap *heap);
399EAPI void * ecore_sheap_extreme(Ecore_Sheap *heap);
400EAPI int ecore_sheap_change(Ecore_Sheap *heap,
401 void *item,
402 void *newval);
403EAPI int ecore_sheap_compare_set(Ecore_Sheap *heap,
404 Ecore_Compare_Cb compare);
405EAPI void ecore_sheap_order_set(Ecore_Sheap *heap, char order);
406EAPI void ecore_sheap_sort(Ecore_Sheap *heap);
407
408EAPI void * ecore_sheap_item(Ecore_Sheap *heap, int i);
409
410
411typedef struct _ecore_string Ecore_String;
412struct _ecore_string
413{
414 char *string;
415 int references;
416};
417
418EAPI int ecore_string_init();
419EAPI void ecore_string_shutdown();
420EAPI const char *ecore_string_instance(const char *string);
421EAPI void ecore_string_release(const char *string);
422
423typedef struct _Ecore_Tree_Node Ecore_Tree_Node;
424# define ECORE_TREE_NODE(object) ((Ecore_Tree_Node *)object)
425struct _Ecore_Tree_Node
426{
427
428 /* The actual data for each node */
429 void *key;
430 void *value;
431
432 /* Pointers to surrounding nodes */
433 Ecore_Tree_Node *parent;
434 Ecore_Tree_Node *left_child;
435 Ecore_Tree_Node *right_child;
436
437 /* Book keeping information for quicker balancing of the tree */
438 int max_right;
439 int max_left;
440};
441
442typedef struct _Ecore_Tree Ecore_Tree;
443# define ECORE_TREE(object) ((Ecore_Tree *)object)
444struct _Ecore_Tree
445{
446 /* Nodes of the tree */
447 Ecore_Tree_Node *tree;
448
449 /* Callback for comparing node values, default is direct comparison */
450 Ecore_Compare_Cb compare_func;
451
452 /* Callback for freeing node data, default is NULL */
453 Ecore_Free_Cb free_value;
454 /* Callback for freeing node key, default is NULL */
455 Ecore_Free_Cb free_key;
456};
457
458/* Some basic tree functions */
459/* Allocate and initialize a new tree */
460EAPI Ecore_Tree * ecore_tree_new(Ecore_Compare_Cb compare_func);
461/* Initialize a new tree */
462EAPI int ecore_tree_init(Ecore_Tree *tree,
463 Ecore_Compare_Cb compare_func);
464
465/* Free the tree */
466EAPI int ecore_tree_destroy(Ecore_Tree *tree);
467/* Check to see if the tree has any nodes in it */
468EAPI int ecore_tree_empty_is(Ecore_Tree *tree);
469
470/* Retrieve the value associated with key */
471EAPI void * ecore_tree_get(Ecore_Tree *tree, const void *key);
472EAPI Ecore_Tree_Node *ecore_tree_get_node(Ecore_Tree *tree, const void *key);
473/* Retrieve the value of node with key greater than or equal to key */
474EAPI void * ecore_tree_closest_larger_get(Ecore_Tree *tree,
475 const void *key);
476/* Retrieve the value of node with key less than or equal to key */
477EAPI void * ecore_tree_closest_smaller_get(Ecore_Tree *tree,
478 const void *key);
479
480/* Set the value associated with key to value */
481EAPI int ecore_tree_set(Ecore_Tree *tree, void *key, void *value);
482/* Remove the key from the tree */
483EAPI int ecore_tree_remove(Ecore_Tree *tree, const void *key);
484
485/* Add a node to the tree */
486EAPI int ecore_tree_node_add(Ecore_Tree *tree,
487 Ecore_Tree_Node *node);
488/* Remove a node from the tree */
489EAPI int ecore_tree_node_remove(Ecore_Tree *tree,
490 Ecore_Tree_Node *node);
491
492/* For each node in the tree perform the for_each_func function */
493/* For this one pass in the node */
494EAPI int ecore_tree_for_each_node(Ecore_Tree *tree,
495 Ecore_For_Each for_each_func,
496 void *user_data);
497/* And here pass in the node's value */
498EAPI int ecore_tree_for_each_node_value(
499 Ecore_Tree *tree,
500 Ecore_For_Each
501 for_each_func,
502 void *user_data);
503
504/* Some basic node functions */
505/* Initialize a node */
506EAPI int ecore_tree_node_init(Ecore_Tree_Node *new_node);
507/* Allocate and initialize a new node */
508EAPI Ecore_Tree_Node *ecore_tree_node_new(void);
509/* Free the desired node */
510EAPI int ecore_tree_node_destroy(Ecore_Tree_Node *node,
511 Ecore_Free_Cb free_value,
512 Ecore_Free_Cb free_key);
513
514/* Set the node's key to key */
515EAPI int ecore_tree_node_key_set(Ecore_Tree_Node *node, void *key);
516/* Retrieve the key in node */
517EAPI void * ecore_tree_node_key_get(Ecore_Tree_Node *node);
518
519/* Set the node's value to value */
520EAPI int ecore_tree_node_value_set(Ecore_Tree_Node *node,
521 void *value);
522/* Retrieve the value in node */
523EAPI void * ecore_tree_node_value_get(Ecore_Tree_Node *node);
524
525/* Add a function to free the data stored in nodes */
526EAPI int ecore_tree_free_value_cb_set(Ecore_Tree *tree,
527 Ecore_Free_Cb free_value);
528/* Add a function to free the keys stored in nodes */
529EAPI int ecore_tree_free_key_cb_set(Ecore_Tree *tree,
530 Ecore_Free_Cb free_key);
531
532
533EAPI Ecore_Strbuf * ecore_strbuf_new(void);
534EAPI void ecore_strbuf_free(Ecore_Strbuf *buf);
535EAPI void ecore_strbuf_append(Ecore_Strbuf *buf, const char *str);
536EAPI void ecore_strbuf_append_char(Ecore_Strbuf *buf, char c);
537EAPI void ecore_strbuf_insert(Ecore_Strbuf *buf, const char *str,
538 size_t pos);
539# define ecore_strbuf_prepend(buf, str) ecore_strbuf_insert(buf, str, 0)
540EAPI const char * ecore_strbuf_string_get(Ecore_Strbuf *buf);
541EAPI size_t ecore_strbuf_length_get(Ecore_Strbuf *buf);
542EAPI int ecore_strbuf_replace(Ecore_Strbuf *buf, const char *str,
543 const char *with, unsigned int n);
544# define ecore_strbuf_replace_first(buf, str, with) \
545 ecore_strbuf_replace(buf, str, with, 1)
546EAPI int ecore_strbuf_replace_all(Ecore_Strbuf *buf,
547 const char *str,
548 const char *with);
549
550extern int ecore_str_compare(const void *key1, const void *key2);
551extern int ecore_direct_compare(const void *key1, const void *key2);
552extern unsigned int ecore_str_hash(const void *key);
553
554#ifdef __cplusplus
555}
556#endif
557#endif /* _ECORE_DATA_H */
diff --git a/libraries/eina/src/tests/Evas_Data.h b/libraries/eina/src/tests/Evas_Data.h
new file mode 100644
index 0000000..9784892
--- /dev/null
+++ b/libraries/eina/src/tests/Evas_Data.h
@@ -0,0 +1,195 @@
1#ifndef _EVAS_DATA_H
2#define _EVAS_DATA_H
3
4#ifdef EAPI
5# undef EAPI
6#endif
7
8#ifdef _WIN32
9# ifdef EFL_EVAS_BUILD
10# ifdef DLL_EXPORT
11# define EAPI __declspec(dllexport)
12# else
13# define EAPI
14# endif /* ! DLL_EXPORT */
15# else
16# define EAPI __declspec(dllimport)
17# endif /* ! EFL_EVAS_BUILD */
18#else
19# ifdef __GNUC__
20# if __GNUC__ >= 4
21# define EAPI __attribute__ ((visibility("default")))
22# else
23# define EAPI
24# endif
25# else
26# define EAPI
27# endif
28#endif /* ! _WIN32 */
29
30/**
31 * @file
32 * @brief These routines are used for Evas data types.
33 */
34
35typedef unsigned char Evas_Bool;
36
37typedef struct _Evas_Array_Hash Evas_Array_Hash;
38typedef struct _Evas_Hash Evas_Hash; /**< A Hash table handle */
39typedef struct _Evas_List Evas_List; /**< A generic linked list node handle */
40typedef struct _Evas_Object_List Evas_Object_List;
41
42struct _Evas_Hash
43{
44 int population;
45 Evas_Object_List *buckets[256];
46};
47
48struct _Evas_List /** A linked list node */
49{
50 void *data; /**< Pointer to list element payload */
51 Evas_List *next; /**< Next member in the list */
52 Evas_List *prev; /**< Previous member in the list */
53 struct _Evas_List_Accounting *accounting; /**< Private list accounting info - don't touch */
54};
55
56struct _Evas_Object_List
57{
58 Evas_Object_List *next, *prev;
59 Evas_Object_List *last;
60};
61
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67/*
68 * Evas Array Hash functions
69 */
70
71EAPI Evas_Array_Hash *evas_array_hash_new (void);
72EAPI void evas_array_hash_free (Evas_Array_Hash *hash);
73EAPI void evas_array_hash_add (Evas_Array_Hash *hash,
74 int key,
75 int data);
76EAPI int evas_array_hash_search (Evas_Array_Hash *hash,
77 int key);
78
79
80/*
81 * Evas Hash functions
82 */
83
84/* FIXME: add:
85 * api to add find, del members by data, size not just string and also
86 * provide hash generation functions settable by the app
87 *
88 * do we really need this? hmmm - let me think... there may be a better way
89 */
90EAPI Evas_Hash *evas_hash_add (Evas_Hash *hash,
91 const char *key,
92 const void *data);
93EAPI Evas_Hash *evas_hash_direct_add (Evas_Hash *hash,
94 const char *key,
95 const void *data);
96EAPI Evas_Hash *evas_hash_del (Evas_Hash *hash,
97 const char *key,
98 const void *data);
99EAPI void * evas_hash_find (const Evas_Hash *hash,
100 const char *key);
101EAPI void * evas_hash_modify (Evas_Hash *hash,
102 const char *key,
103 const void *data);
104EAPI int evas_hash_size (const Evas_Hash *hash);
105EAPI void evas_hash_free (Evas_Hash *hash);
106EAPI void evas_hash_foreach (const Evas_Hash *hash,
107 Evas_Bool (*func)(
108 const Evas_Hash *hash,
109 const char *
110 key,
111 void *data,
112 void *fdata),
113 const void *fdata);
114EAPI int evas_hash_alloc_error (void);
115
116
117/*
118 * Evas List functions
119 */
120
121EAPI Evas_List *evas_list_append (Evas_List *list,
122 const void *data);
123EAPI Evas_List *evas_list_prepend (Evas_List *list,
124 const void *data);
125EAPI Evas_List *evas_list_append_relative (Evas_List *list,
126 const void *data,
127 const void *relative);
128EAPI Evas_List *evas_list_append_relative_list (Evas_List *list,
129 const void *data,
130 Evas_List *relative);
131EAPI Evas_List *evas_list_prepend_relative (Evas_List *list,
132 const void *data,
133 const void *relative);
134EAPI Evas_List *evas_list_prepend_relative_list (Evas_List *list,
135 const void *data,
136 Evas_List *relative);
137EAPI Evas_List *evas_list_remove (Evas_List *list,
138 const void *data);
139EAPI Evas_List *evas_list_remove_list (Evas_List *list,
140 Evas_List *remove_list);
141EAPI Evas_List *evas_list_promote_list (Evas_List *list,
142 Evas_List *move_list);
143EAPI void * evas_list_find (const Evas_List *list,
144 const void *data);
145EAPI Evas_List *evas_list_find_list (const Evas_List *list,
146 const void *data);
147EAPI Evas_List *evas_list_free (Evas_List *list);
148EAPI Evas_List *evas_list_last (const Evas_List *list);
149EAPI Evas_List *evas_list_next (const Evas_List *list);
150EAPI Evas_List *evas_list_prev (const Evas_List *list);
151EAPI void * evas_list_data (const Evas_List *list);
152EAPI int evas_list_count (const Evas_List *list);
153EAPI void * evas_list_nth (const Evas_List *list, int n);
154EAPI Evas_List *evas_list_nth_list (const Evas_List *list, int n);
155EAPI Evas_List *evas_list_reverse (Evas_List *list);
156EAPI Evas_List *evas_list_sort (Evas_List *list,
157 int size,
158 int (*func)(void *,void *));
159EAPI int evas_list_alloc_error (void);
160
161
162/*
163 * Evas Object List functions
164 */
165
166EAPI void * evas_object_list_append (void *in_list,
167 void *in_item);
168EAPI void * evas_object_list_prepend (void *in_list,
169 void *in_item);
170EAPI void * evas_object_list_append_relative (void *in_list,
171 void *in_item,
172 void *in_relative);
173EAPI void * evas_object_list_prepend_relative (void *in_list,
174 void *in_item,
175 void *in_relative);
176EAPI void * evas_object_list_remove (void *in_list,
177 void *in_item);
178EAPI void * evas_object_list_find (void *in_list,
179 void *in_item);
180
181
182/*
183 * Evas Stringshare functions
184 */
185
186EAPI void evas_stringshare_init (void); /* not implemented */
187EAPI void evas_stringshare_shutdown (void); /* not implemented */
188EAPI const char *evas_stringshare_add (const char *str);
189EAPI void evas_stringshare_del (const char *str);
190
191#ifdef __cplusplus
192}
193#endif
194
195#endif /* _EVAS_DATA_H */
diff --git a/libraries/eina/src/tests/Makefile.am b/libraries/eina/src/tests/Makefile.am
new file mode 100644
index 0000000..a413e6e
--- /dev/null
+++ b/libraries/eina/src/tests/Makefile.am
@@ -0,0 +1,137 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3benchdir = $(bindir)
4
5AM_CPPFLAGS = \
6-I$(top_srcdir)/src/lib \
7-I$(top_srcdir)/src/include \
8-I$(top_builddir)/src/include \
9-I$(top_builddir)/src/lib \
10-DPACKAGE_BIN_DIR=\"$(bindir)\" \
11-DPACKAGE_LIB_DIR=\"$(libdir)\" \
12-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
13-DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" \
14@CHECK_CFLAGS@ \
15@GLIB_CFLAGS@
16
17if EINA_HAVE_GLIB
18
19AM_CPPFLAGS += -DEINA_BENCH_HAVE_GLIB
20
21endif
22
23if EINA_ENABLE_BENCHMARK_E17
24
25AM_CPPFLAGS += -DEINA_ENABLE_BENCH_E17
26
27endif
28
29if EFL_ENABLE_TESTS
30
31check_PROGRAMS = eina_suite
32
33eina_suite_SOURCES = \
34eina_suite.c \
35eina_test_fp.c \
36eina_test_stringshare.c \
37eina_test_ustringshare.c\
38eina_test_ustr.c \
39eina_test_binshare.c \
40eina_test_binbuf.c \
41eina_test_array.c \
42eina_test_clist.c \
43eina_test_error.c \
44eina_test_sched.c \
45eina_test_log.c \
46eina_test_magic.c \
47eina_test_inlist.c \
48eina_test_main.c \
49eina_test_counter.c \
50eina_test_lalloc.c \
51eina_test_hash.c \
52eina_test_iterator.c \
53eina_test_accessor.c \
54eina_test_module.c \
55eina_test_convert.c \
56eina_test_rbtree.c \
57eina_test_file.c \
58eina_test_benchmark.c \
59eina_test_mempool.c \
60eina_test_rectangle.c \
61eina_test_list.c \
62eina_test_matrixsparse.c \
63eina_test_tiler.c \
64eina_test_strbuf.c \
65eina_test_str.c \
66eina_test_quadtree.c \
67eina_test_simple_xml_parser.c
68
69eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm
70
71module_dummydir = $(libdir)/eina/test
72module_dummy_LTLIBRARIES = module_dummy.la
73
74module_dummy_la_SOURCES = \
75eina_test_module_dummy.c
76
77module_dummy_la_CPPFLAGS = \
78-I$(top_srcdir)/src/lib \
79-I$(top_srcdir)/src/include \
80-I$(top_builddir)/src/include \
81-I$(top_builddir)/src/lib \
82@EFL_EINA_BUILD@
83module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
84module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
85module_dummy_la_LIBTOOLFLAGS = --tag=disable-static
86
87endif
88
89if EFL_ENABLE_BENCHMARK
90
91bench_PROGRAMS = eina_bench
92
93eina_bench_SOURCES = \
94eina_bench.c \
95eina_bench_sort.c \
96eina_bench_hash.c \
97eina_bench_stringshare.c \
98eina_bench_convert.c \
99eina_bench_mempool.c \
100eina_bench_stringshare_e17.c \
101eina_bench_array.c \
102eina_bench_rectangle_pool.c \
103ecore_list.c \
104ecore_strings.c \
105ecore_hash.c \
106ecore_sheap.c \
107evas_hash.c \
108evas_list.c \
109evas_mempool.c \
110evas_object_list.c \
111evas_stringshare.c \
112eina_bench_quad.c
113
114if CITYHASH_BENCH
115noinst_LTLIBRARIES = libcity.la
116libcity_la_SOURCES = city.cc
117
118nodist_EXTRA_eina_bench_SOURCES = dummy.cc
119eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la libcity.la
120else
121eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la
122
123endif
124
125
126
127endif
128
129EXTRA_DIST = eina_bench.h \
130 eina_suite.h \
131 Ecore_Data.h \
132 Evas_Data.h \
133 evas_mempool.h \
134 strlog
135
136clean-local:
137 rm -rf *.gcno *.gcda
diff --git a/libraries/eina/src/tests/Makefile.in b/libraries/eina/src/tests/Makefile.in
new file mode 100644
index 0000000..b5983b3
--- /dev/null
+++ b/libraries/eina/src/tests/Makefile.in
@@ -0,0 +1,982 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18
19VPATH = @srcdir@
20pkgdatadir = $(datadir)/@PACKAGE@
21pkgincludedir = $(includedir)/@PACKAGE@
22pkglibdir = $(libdir)/@PACKAGE@
23pkglibexecdir = $(libexecdir)/@PACKAGE@
24am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
25install_sh_DATA = $(install_sh) -c -m 644
26install_sh_PROGRAM = $(install_sh) -c
27install_sh_SCRIPT = $(install_sh) -c
28INSTALL_HEADER = $(INSTALL_DATA)
29transform = $(program_transform_name)
30NORMAL_INSTALL = :
31PRE_INSTALL = :
32POST_INSTALL = :
33NORMAL_UNINSTALL = :
34PRE_UNINSTALL = :
35POST_UNINSTALL = :
36build_triplet = @build@
37host_triplet = @host@
38@EINA_HAVE_GLIB_TRUE@am__append_1 = -DEINA_BENCH_HAVE_GLIB
39@EINA_ENABLE_BENCHMARK_E17_TRUE@am__append_2 = -DEINA_ENABLE_BENCH_E17
40@EFL_ENABLE_TESTS_TRUE@check_PROGRAMS = eina_suite$(EXEEXT)
41@EFL_ENABLE_BENCHMARK_TRUE@bench_PROGRAMS = eina_bench$(EXEEXT)
42subdir = src/tests
43DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
44ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
45am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
46 $(top_srcdir)/m4/efl_benchmark.m4 \
47 $(top_srcdir)/m4/efl_compiler_flag.m4 \
48 $(top_srcdir)/m4/efl_coverage.m4 $(top_srcdir)/m4/efl_cpu.m4 \
49 $(top_srcdir)/m4/efl_doxygen.m4 \
50 $(top_srcdir)/m4/efl_examples.m4 \
51 $(top_srcdir)/m4/efl_fnmatch.m4 \
52 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
53 $(top_srcdir)/m4/efl_threads.m4 \
54 $(top_srcdir)/m4/efl_voltron.m4 $(top_srcdir)/m4/eina_bench.m4 \
55 $(top_srcdir)/m4/eina_check.m4 $(top_srcdir)/m4/libtool.m4 \
56 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
57 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
58 $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
59am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
60 $(ACLOCAL_M4)
61mkinstalldirs = $(install_sh) -d
62CONFIG_HEADER = $(top_builddir)/config.h
63CONFIG_CLEAN_FILES =
64CONFIG_CLEAN_VPATH_FILES =
65am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
66am__vpath_adj = case $$p in \
67 $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
68 *) f=$$p;; \
69 esac;
70am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
71am__install_max = 40
72am__nobase_strip_setup = \
73 srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
74am__nobase_strip = \
75 for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
76am__nobase_list = $(am__nobase_strip_setup); \
77 for p in $$list; do echo "$$p $$p"; done | \
78 sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
79 $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
80 if (++n[$$2] == $(am__install_max)) \
81 { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
82 END { for (dir in files) print dir, files[dir] }'
83am__base_list = \
84 sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
85 sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
86am__installdirs = "$(DESTDIR)$(module_dummydir)" \
87 "$(DESTDIR)$(benchdir)"
88LTLIBRARIES = $(module_dummy_LTLIBRARIES) $(noinst_LTLIBRARIES)
89libcity_la_LIBADD =
90am__libcity_la_SOURCES_DIST = city.cc
91@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@am_libcity_la_OBJECTS = \
92@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@ city.lo
93libcity_la_OBJECTS = $(am_libcity_la_OBJECTS)
94AM_V_lt = $(am__v_lt_$(V))
95am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
96am__v_lt_0 = --silent
97@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@am_libcity_la_rpath =
98@EFL_ENABLE_TESTS_TRUE@module_dummy_la_DEPENDENCIES = \
99@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la
100am__module_dummy_la_SOURCES_DIST = eina_test_module_dummy.c
101@EFL_ENABLE_TESTS_TRUE@am_module_dummy_la_OBJECTS = module_dummy_la-eina_test_module_dummy.lo
102module_dummy_la_OBJECTS = $(am_module_dummy_la_OBJECTS)
103module_dummy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
104 $(module_dummy_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
105 $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(module_dummy_la_LDFLAGS) \
106 $(LDFLAGS) -o $@
107@EFL_ENABLE_TESTS_TRUE@am_module_dummy_la_rpath = -rpath \
108@EFL_ENABLE_TESTS_TRUE@ $(module_dummydir)
109PROGRAMS = $(bench_PROGRAMS)
110am__eina_bench_SOURCES_DIST = eina_bench.c eina_bench_sort.c \
111 eina_bench_hash.c eina_bench_stringshare.c \
112 eina_bench_convert.c eina_bench_mempool.c \
113 eina_bench_stringshare_e17.c eina_bench_array.c \
114 eina_bench_rectangle_pool.c ecore_list.c ecore_strings.c \
115 ecore_hash.c ecore_sheap.c evas_hash.c evas_list.c \
116 evas_mempool.c evas_object_list.c evas_stringshare.c \
117 eina_bench_quad.c
118@EFL_ENABLE_BENCHMARK_TRUE@am_eina_bench_OBJECTS = \
119@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench.$(OBJEXT) \
120@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_sort.$(OBJEXT) \
121@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_hash.$(OBJEXT) \
122@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_stringshare.$(OBJEXT) \
123@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_convert.$(OBJEXT) \
124@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_mempool.$(OBJEXT) \
125@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_stringshare_e17.$(OBJEXT) \
126@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_array.$(OBJEXT) \
127@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_rectangle_pool.$(OBJEXT) \
128@EFL_ENABLE_BENCHMARK_TRUE@ ecore_list.$(OBJEXT) \
129@EFL_ENABLE_BENCHMARK_TRUE@ ecore_strings.$(OBJEXT) \
130@EFL_ENABLE_BENCHMARK_TRUE@ ecore_hash.$(OBJEXT) \
131@EFL_ENABLE_BENCHMARK_TRUE@ ecore_sheap.$(OBJEXT) \
132@EFL_ENABLE_BENCHMARK_TRUE@ evas_hash.$(OBJEXT) \
133@EFL_ENABLE_BENCHMARK_TRUE@ evas_list.$(OBJEXT) \
134@EFL_ENABLE_BENCHMARK_TRUE@ evas_mempool.$(OBJEXT) \
135@EFL_ENABLE_BENCHMARK_TRUE@ evas_object_list.$(OBJEXT) \
136@EFL_ENABLE_BENCHMARK_TRUE@ evas_stringshare.$(OBJEXT) \
137@EFL_ENABLE_BENCHMARK_TRUE@ eina_bench_quad.$(OBJEXT)
138eina_bench_OBJECTS = $(am_eina_bench_OBJECTS)
139@CITYHASH_BENCH_FALSE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la
140@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_DEPENDENCIES = $(top_builddir)/src/lib/libeina.la \
141@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@ libcity.la
142am__eina_suite_SOURCES_DIST = eina_suite.c eina_test_fp.c \
143 eina_test_stringshare.c eina_test_ustringshare.c \
144 eina_test_ustr.c eina_test_binshare.c eina_test_binbuf.c \
145 eina_test_array.c eina_test_clist.c eina_test_error.c \
146 eina_test_sched.c eina_test_log.c eina_test_magic.c \
147 eina_test_inlist.c eina_test_main.c eina_test_counter.c \
148 eina_test_lalloc.c eina_test_hash.c eina_test_iterator.c \
149 eina_test_accessor.c eina_test_module.c eina_test_convert.c \
150 eina_test_rbtree.c eina_test_file.c eina_test_benchmark.c \
151 eina_test_mempool.c eina_test_rectangle.c eina_test_list.c \
152 eina_test_matrixsparse.c eina_test_tiler.c eina_test_strbuf.c \
153 eina_test_str.c eina_test_quadtree.c \
154 eina_test_simple_xml_parser.c
155@EFL_ENABLE_TESTS_TRUE@am_eina_suite_OBJECTS = eina_suite.$(OBJEXT) \
156@EFL_ENABLE_TESTS_TRUE@ eina_test_fp.$(OBJEXT) \
157@EFL_ENABLE_TESTS_TRUE@ eina_test_stringshare.$(OBJEXT) \
158@EFL_ENABLE_TESTS_TRUE@ eina_test_ustringshare.$(OBJEXT) \
159@EFL_ENABLE_TESTS_TRUE@ eina_test_ustr.$(OBJEXT) \
160@EFL_ENABLE_TESTS_TRUE@ eina_test_binshare.$(OBJEXT) \
161@EFL_ENABLE_TESTS_TRUE@ eina_test_binbuf.$(OBJEXT) \
162@EFL_ENABLE_TESTS_TRUE@ eina_test_array.$(OBJEXT) \
163@EFL_ENABLE_TESTS_TRUE@ eina_test_clist.$(OBJEXT) \
164@EFL_ENABLE_TESTS_TRUE@ eina_test_error.$(OBJEXT) \
165@EFL_ENABLE_TESTS_TRUE@ eina_test_sched.$(OBJEXT) \
166@EFL_ENABLE_TESTS_TRUE@ eina_test_log.$(OBJEXT) \
167@EFL_ENABLE_TESTS_TRUE@ eina_test_magic.$(OBJEXT) \
168@EFL_ENABLE_TESTS_TRUE@ eina_test_inlist.$(OBJEXT) \
169@EFL_ENABLE_TESTS_TRUE@ eina_test_main.$(OBJEXT) \
170@EFL_ENABLE_TESTS_TRUE@ eina_test_counter.$(OBJEXT) \
171@EFL_ENABLE_TESTS_TRUE@ eina_test_lalloc.$(OBJEXT) \
172@EFL_ENABLE_TESTS_TRUE@ eina_test_hash.$(OBJEXT) \
173@EFL_ENABLE_TESTS_TRUE@ eina_test_iterator.$(OBJEXT) \
174@EFL_ENABLE_TESTS_TRUE@ eina_test_accessor.$(OBJEXT) \
175@EFL_ENABLE_TESTS_TRUE@ eina_test_module.$(OBJEXT) \
176@EFL_ENABLE_TESTS_TRUE@ eina_test_convert.$(OBJEXT) \
177@EFL_ENABLE_TESTS_TRUE@ eina_test_rbtree.$(OBJEXT) \
178@EFL_ENABLE_TESTS_TRUE@ eina_test_file.$(OBJEXT) \
179@EFL_ENABLE_TESTS_TRUE@ eina_test_benchmark.$(OBJEXT) \
180@EFL_ENABLE_TESTS_TRUE@ eina_test_mempool.$(OBJEXT) \
181@EFL_ENABLE_TESTS_TRUE@ eina_test_rectangle.$(OBJEXT) \
182@EFL_ENABLE_TESTS_TRUE@ eina_test_list.$(OBJEXT) \
183@EFL_ENABLE_TESTS_TRUE@ eina_test_matrixsparse.$(OBJEXT) \
184@EFL_ENABLE_TESTS_TRUE@ eina_test_tiler.$(OBJEXT) \
185@EFL_ENABLE_TESTS_TRUE@ eina_test_strbuf.$(OBJEXT) \
186@EFL_ENABLE_TESTS_TRUE@ eina_test_str.$(OBJEXT) \
187@EFL_ENABLE_TESTS_TRUE@ eina_test_quadtree.$(OBJEXT) \
188@EFL_ENABLE_TESTS_TRUE@ eina_test_simple_xml_parser.$(OBJEXT)
189eina_suite_OBJECTS = $(am_eina_suite_OBJECTS)
190@EFL_ENABLE_TESTS_TRUE@eina_suite_DEPENDENCIES = \
191@EFL_ENABLE_TESTS_TRUE@ $(top_builddir)/src/lib/libeina.la
192DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
193depcomp = $(SHELL) $(top_srcdir)/depcomp
194am__depfiles_maybe = depfiles
195am__mv = mv -f
196COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
197 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
198LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
199 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
200 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
201 $(AM_CFLAGS) $(CFLAGS)
202AM_V_CC = $(am__v_CC_$(V))
203am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
204am__v_CC_0 = @echo " CC " $@;
205AM_V_at = $(am__v_at_$(V))
206am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
207am__v_at_0 = @
208CCLD = $(CC)
209LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
210 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
211 $(AM_LDFLAGS) $(LDFLAGS) -o $@
212AM_V_CCLD = $(am__v_CCLD_$(V))
213am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
214am__v_CCLD_0 = @echo " CCLD " $@;
215CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
216 $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
217LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
218 $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
219 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
220 $(AM_CXXFLAGS) $(CXXFLAGS)
221AM_V_CXX = $(am__v_CXX_$(V))
222am__v_CXX_ = $(am__v_CXX_$(AM_DEFAULT_VERBOSITY))
223am__v_CXX_0 = @echo " CXX " $@;
224CXXLD = $(CXX)
225CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
226 $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
227 $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
228AM_V_CXXLD = $(am__v_CXXLD_$(V))
229am__v_CXXLD_ = $(am__v_CXXLD_$(AM_DEFAULT_VERBOSITY))
230am__v_CXXLD_0 = @echo " CXXLD " $@;
231AM_V_GEN = $(am__v_GEN_$(V))
232am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
233am__v_GEN_0 = @echo " GEN " $@;
234SOURCES = $(libcity_la_SOURCES) $(module_dummy_la_SOURCES) \
235 $(eina_bench_SOURCES) $(nodist_EXTRA_eina_bench_SOURCES) \
236 $(eina_suite_SOURCES)
237DIST_SOURCES = $(am__libcity_la_SOURCES_DIST) \
238 $(am__module_dummy_la_SOURCES_DIST) \
239 $(am__eina_bench_SOURCES_DIST) $(am__eina_suite_SOURCES_DIST)
240ETAGS = etags
241CTAGS = ctags
242DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
243ACLOCAL = @ACLOCAL@
244ALLOCA = @ALLOCA@
245AMTAR = @AMTAR@
246AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
247AR = @AR@
248AS = @AS@
249AUTOCONF = @AUTOCONF@
250AUTOHEADER = @AUTOHEADER@
251AUTOMAKE = @AUTOMAKE@
252AWK = @AWK@
253CC = @CC@
254CCDEPMODE = @CCDEPMODE@
255CFLAGS = @CFLAGS@
256CHECK_CFLAGS = @CHECK_CFLAGS@
257CHECK_LIBS = @CHECK_LIBS@
258CPP = @CPP@
259CPPFLAGS = @CPPFLAGS@
260CXX = @CXX@
261CXXCPP = @CXXCPP@
262CXXDEPMODE = @CXXDEPMODE@
263CXXFLAGS = @CXXFLAGS@
264CYGPATH_W = @CYGPATH_W@
265DEFS = @DEFS@
266DEPDIR = @DEPDIR@
267DLLTOOL = @DLLTOOL@
268DSYMUTIL = @DSYMUTIL@
269DUMPBIN = @DUMPBIN@
270ECHO_C = @ECHO_C@
271ECHO_N = @ECHO_N@
272ECHO_T = @ECHO_T@
273ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
274ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
275EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
276EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
277EFL_EINA_BUILD = @EFL_EINA_BUILD@
278EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
279EFL_PTHREAD_CFLAGS = @EFL_PTHREAD_CFLAGS@
280EFL_PTHREAD_LIBS = @EFL_PTHREAD_LIBS@
281EFL_SIMD_FLAGS = @EFL_SIMD_FLAGS@
282EGREP = @EGREP@
283EINA_CFLAGS = @EINA_CFLAGS@
284EINA_CONFIGURE_DEFAULT_MEMPOOL = @EINA_CONFIGURE_DEFAULT_MEMPOOL@
285EINA_CONFIGURE_HAVE_DEBUG_THREADS = @EINA_CONFIGURE_HAVE_DEBUG_THREADS@
286EINA_CONFIGURE_HAVE_INTTYPES_H = @EINA_CONFIGURE_HAVE_INTTYPES_H@
287EINA_CONFIGURE_HAVE_ON_OFF_THREADS = @EINA_CONFIGURE_HAVE_ON_OFF_THREADS@
288EINA_CONFIGURE_HAVE_STDINT_H = @EINA_CONFIGURE_HAVE_STDINT_H@
289EINA_CONFIGURE_HAVE_THREADS = @EINA_CONFIGURE_HAVE_THREADS@
290EINA_CONFIGURE_MAGIC_DEBUG = @EINA_CONFIGURE_MAGIC_DEBUG@
291EINA_CONFIGURE_SAFETY_CHECKS = @EINA_CONFIGURE_SAFETY_CHECKS@
292EINA_CPPFLAGS = @EINA_CPPFLAGS@
293EINA_LIBS = @EINA_LIBS@
294EINA_SIZEOF_WCHAR_T = @EINA_SIZEOF_WCHAR_T@
295EMEMOA_CFLAGS = @EMEMOA_CFLAGS@
296EMEMOA_LIBS = @EMEMOA_LIBS@
297ESCAPE_CFLAGS = @ESCAPE_CFLAGS@
298ESCAPE_LIBS = @ESCAPE_LIBS@
299EVIL_CFLAGS = @EVIL_CFLAGS@
300EVIL_LIBS = @EVIL_LIBS@
301EXEEXT = @EXEEXT@
302FGREP = @FGREP@
303GLIB_CFLAGS = @GLIB_CFLAGS@
304GLIB_LIBS = @GLIB_LIBS@
305GREP = @GREP@
306INSTALL = @INSTALL@
307INSTALL_DATA = @INSTALL_DATA@
308INSTALL_PROGRAM = @INSTALL_PROGRAM@
309INSTALL_SCRIPT = @INSTALL_SCRIPT@
310INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
311LD = @LD@
312LDFLAGS = @LDFLAGS@
313LIBOBJS = @LIBOBJS@
314LIBS = @LIBS@
315LIBTOOL = @LIBTOOL@
316LIPO = @LIPO@
317LN_S = @LN_S@
318LTLIBOBJS = @LTLIBOBJS@
319MAKEINFO = @MAKEINFO@
320MKDIR_P = @MKDIR_P@
321MODULE_ARCH = @MODULE_ARCH@
322NM = @NM@
323NMEDIT = @NMEDIT@
324OBJDUMP = @OBJDUMP@
325OBJEXT = @OBJEXT@
326OTOOL = @OTOOL@
327OTOOL64 = @OTOOL64@
328PACKAGE = @PACKAGE@
329PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
330PACKAGE_NAME = @PACKAGE_NAME@
331PACKAGE_STRING = @PACKAGE_STRING@
332PACKAGE_TARNAME = @PACKAGE_TARNAME@
333PACKAGE_URL = @PACKAGE_URL@
334PACKAGE_VERSION = @PACKAGE_VERSION@
335PATH_SEPARATOR = @PATH_SEPARATOR@
336PKG_CONFIG = @PKG_CONFIG@
337PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
338PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
339RANLIB = @RANLIB@
340SED = @SED@
341SET_MAKE = @SET_MAKE@
342SHELL = @SHELL@
343STRIP = @STRIP@
344VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
345VALGRIND_LIBS = @VALGRIND_LIBS@
346VERSION = @VERSION@
347VMAJ = @VMAJ@
348abs_builddir = @abs_builddir@
349abs_srcdir = @abs_srcdir@
350abs_top_builddir = @abs_top_builddir@
351abs_top_srcdir = @abs_top_srcdir@
352ac_ct_CC = @ac_ct_CC@
353ac_ct_CXX = @ac_ct_CXX@
354ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
355am__include = @am__include@
356am__leading_dot = @am__leading_dot@
357am__quote = @am__quote@
358am__tar = @am__tar@
359am__untar = @am__untar@
360bindir = @bindir@
361build = @build@
362build_alias = @build_alias@
363build_cpu = @build_cpu@
364build_os = @build_os@
365build_vendor = @build_vendor@
366builddir = @builddir@
367datadir = @datadir@
368datarootdir = @datarootdir@
369dlopen_libs = @dlopen_libs@
370docdir = @docdir@
371dvidir = @dvidir@
372efl_doxygen = @efl_doxygen@
373efl_have_doxygen = @efl_have_doxygen@
374exec_prefix = @exec_prefix@
375have_lcov = @have_lcov@
376host = @host@
377host_alias = @host_alias@
378host_cpu = @host_cpu@
379host_os = @host_os@
380host_vendor = @host_vendor@
381htmldir = @htmldir@
382iconv_libs = @iconv_libs@
383includedir = @includedir@
384infodir = @infodir@
385install_sh = @install_sh@
386libdir = @libdir@
387libexecdir = @libexecdir@
388localedir = @localedir@
389localstatedir = @localstatedir@
390lt_ECHO = @lt_ECHO@
391lt_enable_auto_import = @lt_enable_auto_import@
392mandir = @mandir@
393mkdir_p = @mkdir_p@
394oldincludedir = @oldincludedir@
395pdfdir = @pdfdir@
396pkgconfig_requires_private = @pkgconfig_requires_private@
397prefix = @prefix@
398program_transform_name = @program_transform_name@
399psdir = @psdir@
400release_info = @release_info@
401requirement_eina = @requirement_eina@
402rt_libs = @rt_libs@
403sbindir = @sbindir@
404sharedstatedir = @sharedstatedir@
405srcdir = @srcdir@
406sysconfdir = @sysconfdir@
407target_alias = @target_alias@
408top_build_prefix = @top_build_prefix@
409top_builddir = @top_builddir@
410top_srcdir = @top_srcdir@
411version_info = @version_info@
412MAINTAINERCLEANFILES = Makefile.in
413benchdir = $(bindir)
414AM_CPPFLAGS = -I$(top_srcdir)/src/lib -I$(top_srcdir)/src/include \
415 -I$(top_builddir)/src/include -I$(top_builddir)/src/lib \
416 -DPACKAGE_BIN_DIR=\"$(bindir)\" \
417 -DPACKAGE_LIB_DIR=\"$(libdir)\" \
418 -DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
419 -DPACKAGE_BUILD_DIR=\"`pwd`/$(top_builddir)\" @CHECK_CFLAGS@ \
420 @GLIB_CFLAGS@ $(am__append_1) $(am__append_2)
421@EFL_ENABLE_TESTS_TRUE@eina_suite_SOURCES = \
422@EFL_ENABLE_TESTS_TRUE@eina_suite.c \
423@EFL_ENABLE_TESTS_TRUE@eina_test_fp.c \
424@EFL_ENABLE_TESTS_TRUE@eina_test_stringshare.c \
425@EFL_ENABLE_TESTS_TRUE@eina_test_ustringshare.c\
426@EFL_ENABLE_TESTS_TRUE@eina_test_ustr.c \
427@EFL_ENABLE_TESTS_TRUE@eina_test_binshare.c \
428@EFL_ENABLE_TESTS_TRUE@eina_test_binbuf.c \
429@EFL_ENABLE_TESTS_TRUE@eina_test_array.c \
430@EFL_ENABLE_TESTS_TRUE@eina_test_clist.c \
431@EFL_ENABLE_TESTS_TRUE@eina_test_error.c \
432@EFL_ENABLE_TESTS_TRUE@eina_test_sched.c \
433@EFL_ENABLE_TESTS_TRUE@eina_test_log.c \
434@EFL_ENABLE_TESTS_TRUE@eina_test_magic.c \
435@EFL_ENABLE_TESTS_TRUE@eina_test_inlist.c \
436@EFL_ENABLE_TESTS_TRUE@eina_test_main.c \
437@EFL_ENABLE_TESTS_TRUE@eina_test_counter.c \
438@EFL_ENABLE_TESTS_TRUE@eina_test_lalloc.c \
439@EFL_ENABLE_TESTS_TRUE@eina_test_hash.c \
440@EFL_ENABLE_TESTS_TRUE@eina_test_iterator.c \
441@EFL_ENABLE_TESTS_TRUE@eina_test_accessor.c \
442@EFL_ENABLE_TESTS_TRUE@eina_test_module.c \
443@EFL_ENABLE_TESTS_TRUE@eina_test_convert.c \
444@EFL_ENABLE_TESTS_TRUE@eina_test_rbtree.c \
445@EFL_ENABLE_TESTS_TRUE@eina_test_file.c \
446@EFL_ENABLE_TESTS_TRUE@eina_test_benchmark.c \
447@EFL_ENABLE_TESTS_TRUE@eina_test_mempool.c \
448@EFL_ENABLE_TESTS_TRUE@eina_test_rectangle.c \
449@EFL_ENABLE_TESTS_TRUE@eina_test_list.c \
450@EFL_ENABLE_TESTS_TRUE@eina_test_matrixsparse.c \
451@EFL_ENABLE_TESTS_TRUE@eina_test_tiler.c \
452@EFL_ENABLE_TESTS_TRUE@eina_test_strbuf.c \
453@EFL_ENABLE_TESTS_TRUE@eina_test_str.c \
454@EFL_ENABLE_TESTS_TRUE@eina_test_quadtree.c \
455@EFL_ENABLE_TESTS_TRUE@eina_test_simple_xml_parser.c
456
457@EFL_ENABLE_TESTS_TRUE@eina_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libeina.la -lm
458@EFL_ENABLE_TESTS_TRUE@module_dummydir = $(libdir)/eina/test
459@EFL_ENABLE_TESTS_TRUE@module_dummy_LTLIBRARIES = module_dummy.la
460@EFL_ENABLE_TESTS_TRUE@module_dummy_la_SOURCES = \
461@EFL_ENABLE_TESTS_TRUE@eina_test_module_dummy.c
462
463@EFL_ENABLE_TESTS_TRUE@module_dummy_la_CPPFLAGS = \
464@EFL_ENABLE_TESTS_TRUE@-I$(top_srcdir)/src/lib \
465@EFL_ENABLE_TESTS_TRUE@-I$(top_srcdir)/src/include \
466@EFL_ENABLE_TESTS_TRUE@-I$(top_builddir)/src/include \
467@EFL_ENABLE_TESTS_TRUE@-I$(top_builddir)/src/lib \
468@EFL_ENABLE_TESTS_TRUE@@EFL_EINA_BUILD@
469
470@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@
471@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
472@EFL_ENABLE_TESTS_TRUE@module_dummy_la_LIBTOOLFLAGS = --tag=disable-static
473@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_SOURCES = \
474@EFL_ENABLE_BENCHMARK_TRUE@eina_bench.c \
475@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_sort.c \
476@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_hash.c \
477@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_stringshare.c \
478@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_convert.c \
479@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_mempool.c \
480@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_stringshare_e17.c \
481@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_array.c \
482@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_rectangle_pool.c \
483@EFL_ENABLE_BENCHMARK_TRUE@ecore_list.c \
484@EFL_ENABLE_BENCHMARK_TRUE@ecore_strings.c \
485@EFL_ENABLE_BENCHMARK_TRUE@ecore_hash.c \
486@EFL_ENABLE_BENCHMARK_TRUE@ecore_sheap.c \
487@EFL_ENABLE_BENCHMARK_TRUE@evas_hash.c \
488@EFL_ENABLE_BENCHMARK_TRUE@evas_list.c \
489@EFL_ENABLE_BENCHMARK_TRUE@evas_mempool.c \
490@EFL_ENABLE_BENCHMARK_TRUE@evas_object_list.c \
491@EFL_ENABLE_BENCHMARK_TRUE@evas_stringshare.c \
492@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_quad.c
493
494@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@noinst_LTLIBRARIES = libcity.la
495@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@libcity_la_SOURCES = city.cc
496@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@nodist_EXTRA_eina_bench_SOURCES = dummy.cc
497@CITYHASH_BENCH_FALSE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la
498@CITYHASH_BENCH_TRUE@@EFL_ENABLE_BENCHMARK_TRUE@eina_bench_LDADD = @GLIB_LIBS@ $(top_builddir)/src/lib/libeina.la libcity.la
499EXTRA_DIST = eina_bench.h \
500 eina_suite.h \
501 Ecore_Data.h \
502 Evas_Data.h \
503 evas_mempool.h \
504 strlog
505
506all: all-am
507
508.SUFFIXES:
509.SUFFIXES: .c .cc .lo .o .obj
510$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
511 @for dep in $?; do \
512 case '$(am__configure_deps)' in \
513 *$$dep*) \
514 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
515 && { if test -f $@; then exit 0; else break; fi; }; \
516 exit 1;; \
517 esac; \
518 done; \
519 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/tests/Makefile'; \
520 $(am__cd) $(top_srcdir) && \
521 $(AUTOMAKE) --gnu src/tests/Makefile
522.PRECIOUS: Makefile
523Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
524 @case '$?' in \
525 *config.status*) \
526 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
527 *) \
528 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
529 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
530 esac;
531
532$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
533 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
534
535$(top_srcdir)/configure: $(am__configure_deps)
536 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
537$(ACLOCAL_M4): $(am__aclocal_m4_deps)
538 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
539$(am__aclocal_m4_deps):
540install-module_dummyLTLIBRARIES: $(module_dummy_LTLIBRARIES)
541 @$(NORMAL_INSTALL)
542 test -z "$(module_dummydir)" || $(MKDIR_P) "$(DESTDIR)$(module_dummydir)"
543 @list='$(module_dummy_LTLIBRARIES)'; test -n "$(module_dummydir)" || list=; \
544 list2=; for p in $$list; do \
545 if test -f $$p; then \
546 list2="$$list2 $$p"; \
547 else :; fi; \
548 done; \
549 test -z "$$list2" || { \
550 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(module_dummydir)'"; \
551 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(module_dummydir)"; \
552 }
553
554uninstall-module_dummyLTLIBRARIES:
555 @$(NORMAL_UNINSTALL)
556 @list='$(module_dummy_LTLIBRARIES)'; test -n "$(module_dummydir)" || list=; \
557 for p in $$list; do \
558 $(am__strip_dir) \
559 echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(module_dummydir)/$$f'"; \
560 $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(module_dummydir)/$$f"; \
561 done
562
563clean-module_dummyLTLIBRARIES:
564 -test -z "$(module_dummy_LTLIBRARIES)" || rm -f $(module_dummy_LTLIBRARIES)
565 @list='$(module_dummy_LTLIBRARIES)'; for p in $$list; do \
566 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
567 test "$$dir" != "$$p" || dir=.; \
568 echo "rm -f \"$${dir}/so_locations\""; \
569 rm -f "$${dir}/so_locations"; \
570 done
571
572clean-noinstLTLIBRARIES:
573 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
574 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
575 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
576 test "$$dir" != "$$p" || dir=.; \
577 echo "rm -f \"$${dir}/so_locations\""; \
578 rm -f "$${dir}/so_locations"; \
579 done
580libcity.la: $(libcity_la_OBJECTS) $(libcity_la_DEPENDENCIES)
581 $(AM_V_CXXLD)$(CXXLINK) $(am_libcity_la_rpath) $(libcity_la_OBJECTS) $(libcity_la_LIBADD) $(LIBS)
582module_dummy.la: $(module_dummy_la_OBJECTS) $(module_dummy_la_DEPENDENCIES)
583 $(AM_V_CCLD)$(module_dummy_la_LINK) $(am_module_dummy_la_rpath) $(module_dummy_la_OBJECTS) $(module_dummy_la_LIBADD) $(LIBS)
584install-benchPROGRAMS: $(bench_PROGRAMS)
585 @$(NORMAL_INSTALL)
586 test -z "$(benchdir)" || $(MKDIR_P) "$(DESTDIR)$(benchdir)"
587 @list='$(bench_PROGRAMS)'; test -n "$(benchdir)" || list=; \
588 for p in $$list; do echo "$$p $$p"; done | \
589 sed 's/$(EXEEXT)$$//' | \
590 while read p p1; do if test -f $$p || test -f $$p1; \
591 then echo "$$p"; echo "$$p"; else :; fi; \
592 done | \
593 sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
594 -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
595 sed 'N;N;N;s,\n, ,g' | \
596 $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
597 { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
598 if ($$2 == $$4) files[d] = files[d] " " $$1; \
599 else { print "f", $$3 "/" $$4, $$1; } } \
600 END { for (d in files) print "f", d, files[d] }' | \
601 while read type dir files; do \
602 if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
603 test -z "$$files" || { \
604 echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(benchdir)$$dir'"; \
605 $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(benchdir)$$dir" || exit $$?; \
606 } \
607 ; done
608
609uninstall-benchPROGRAMS:
610 @$(NORMAL_UNINSTALL)
611 @list='$(bench_PROGRAMS)'; test -n "$(benchdir)" || list=; \
612 files=`for p in $$list; do echo "$$p"; done | \
613 sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
614 -e 's/$$/$(EXEEXT)/' `; \
615 test -n "$$list" || exit 0; \
616 echo " ( cd '$(DESTDIR)$(benchdir)' && rm -f" $$files ")"; \
617 cd "$(DESTDIR)$(benchdir)" && rm -f $$files
618
619clean-benchPROGRAMS:
620 @list='$(bench_PROGRAMS)'; test -n "$$list" || exit 0; \
621 echo " rm -f" $$list; \
622 rm -f $$list || exit $$?; \
623 test -n "$(EXEEXT)" || exit 0; \
624 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
625 echo " rm -f" $$list; \
626 rm -f $$list
627
628clean-checkPROGRAMS:
629 @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
630 echo " rm -f" $$list; \
631 rm -f $$list || exit $$?; \
632 test -n "$(EXEEXT)" || exit 0; \
633 list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
634 echo " rm -f" $$list; \
635 rm -f $$list
636eina_bench$(EXEEXT): $(eina_bench_OBJECTS) $(eina_bench_DEPENDENCIES)
637 @rm -f eina_bench$(EXEEXT)
638 $(AM_V_CXXLD)$(CXXLINK) $(eina_bench_OBJECTS) $(eina_bench_LDADD) $(LIBS)
639eina_suite$(EXEEXT): $(eina_suite_OBJECTS) $(eina_suite_DEPENDENCIES)
640 @rm -f eina_suite$(EXEEXT)
641 $(AM_V_CCLD)$(LINK) $(eina_suite_OBJECTS) $(eina_suite_LDADD) $(LIBS)
642
643mostlyclean-compile:
644 -rm -f *.$(OBJEXT)
645
646distclean-compile:
647 -rm -f *.tab.c
648
649@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/city.Plo@am__quote@
650@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@
651@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_hash.Po@am__quote@
652@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_list.Po@am__quote@
653@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_sheap.Po@am__quote@
654@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecore_strings.Po@am__quote@
655@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench.Po@am__quote@
656@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_array.Po@am__quote@
657@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_convert.Po@am__quote@
658@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_hash.Po@am__quote@
659@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_mempool.Po@am__quote@
660@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_quad.Po@am__quote@
661@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_rectangle_pool.Po@am__quote@
662@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_sort.Po@am__quote@
663@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_stringshare.Po@am__quote@
664@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_bench_stringshare_e17.Po@am__quote@
665@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_suite.Po@am__quote@
666@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_accessor.Po@am__quote@
667@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_array.Po@am__quote@
668@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_benchmark.Po@am__quote@
669@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_binbuf.Po@am__quote@
670@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_binshare.Po@am__quote@
671@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_clist.Po@am__quote@
672@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_convert.Po@am__quote@
673@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_counter.Po@am__quote@
674@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_error.Po@am__quote@
675@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_file.Po@am__quote@
676@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_fp.Po@am__quote@
677@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_hash.Po@am__quote@
678@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_inlist.Po@am__quote@
679@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_iterator.Po@am__quote@
680@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_lalloc.Po@am__quote@
681@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_list.Po@am__quote@
682@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_log.Po@am__quote@
683@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_magic.Po@am__quote@
684@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_main.Po@am__quote@
685@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_matrixsparse.Po@am__quote@
686@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_mempool.Po@am__quote@
687@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_module.Po@am__quote@
688@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_quadtree.Po@am__quote@
689@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rbtree.Po@am__quote@
690@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_rectangle.Po@am__quote@
691@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_sched.Po@am__quote@
692@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_simple_xml_parser.Po@am__quote@
693@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_str.Po@am__quote@
694@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_strbuf.Po@am__quote@
695@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_stringshare.Po@am__quote@
696@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_tiler.Po@am__quote@
697@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_ustr.Po@am__quote@
698@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eina_test_ustringshare.Po@am__quote@
699@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_hash.Po@am__quote@
700@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_list.Po@am__quote@
701@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_mempool.Po@am__quote@
702@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_object_list.Po@am__quote@
703@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evas_stringshare.Po@am__quote@
704@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module_dummy_la-eina_test_module_dummy.Plo@am__quote@
705
706.c.o:
707@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
708@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
709@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
710@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
711@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
712@am__fastdepCC_FALSE@ $(COMPILE) -c $<
713
714.c.obj:
715@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
716@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
717@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
718@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
719@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
720@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
721
722.c.lo:
723@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
724@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
725@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
726@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
727@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
728@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
729
730module_dummy_la-eina_test_module_dummy.lo: eina_test_module_dummy.c
731@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(module_dummy_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(module_dummy_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT module_dummy_la-eina_test_module_dummy.lo -MD -MP -MF $(DEPDIR)/module_dummy_la-eina_test_module_dummy.Tpo -c -o module_dummy_la-eina_test_module_dummy.lo `test -f 'eina_test_module_dummy.c' || echo '$(srcdir)/'`eina_test_module_dummy.c
732@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/module_dummy_la-eina_test_module_dummy.Tpo $(DEPDIR)/module_dummy_la-eina_test_module_dummy.Plo
733@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
734@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eina_test_module_dummy.c' object='module_dummy_la-eina_test_module_dummy.lo' libtool=yes @AMDEPBACKSLASH@
735@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
736@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(module_dummy_la_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(module_dummy_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o module_dummy_la-eina_test_module_dummy.lo `test -f 'eina_test_module_dummy.c' || echo '$(srcdir)/'`eina_test_module_dummy.c
737
738.cc.o:
739@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
740@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
741@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
742@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
743@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
744@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
745
746.cc.obj:
747@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
748@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
749@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
750@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
751@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
752@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
753
754.cc.lo:
755@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
756@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
757@am__fastdepCXX_FALSE@ $(AM_V_CXX) @AM_BACKSLASH@
758@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
759@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
760@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
761
762mostlyclean-libtool:
763 -rm -f *.lo
764
765clean-libtool:
766 -rm -rf .libs _libs
767
768ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
769 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
770 unique=`for i in $$list; do \
771 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
772 done | \
773 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
774 END { if (nonempty) { for (i in files) print i; }; }'`; \
775 mkid -fID $$unique
776tags: TAGS
777
778TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
779 $(TAGS_FILES) $(LISP)
780 set x; \
781 here=`pwd`; \
782 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
783 unique=`for i in $$list; do \
784 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
785 done | \
786 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
787 END { if (nonempty) { for (i in files) print i; }; }'`; \
788 shift; \
789 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
790 test -n "$$unique" || unique=$$empty_fix; \
791 if test $$# -gt 0; then \
792 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
793 "$$@" $$unique; \
794 else \
795 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
796 $$unique; \
797 fi; \
798 fi
799ctags: CTAGS
800CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
801 $(TAGS_FILES) $(LISP)
802 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
803 unique=`for i in $$list; do \
804 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
805 done | \
806 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
807 END { if (nonempty) { for (i in files) print i; }; }'`; \
808 test -z "$(CTAGS_ARGS)$$unique" \
809 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
810 $$unique
811
812GTAGS:
813 here=`$(am__cd) $(top_builddir) && pwd` \
814 && $(am__cd) $(top_srcdir) \
815 && gtags -i $(GTAGS_ARGS) "$$here"
816
817distclean-tags:
818 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
819
820distdir: $(DISTFILES)
821 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
822 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
823 list='$(DISTFILES)'; \
824 dist_files=`for file in $$list; do echo $$file; done | \
825 sed -e "s|^$$srcdirstrip/||;t" \
826 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
827 case $$dist_files in \
828 */*) $(MKDIR_P) `echo "$$dist_files" | \
829 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
830 sort -u` ;; \
831 esac; \
832 for file in $$dist_files; do \
833 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
834 if test -d $$d/$$file; then \
835 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
836 if test -d "$(distdir)/$$file"; then \
837 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
838 fi; \
839 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
840 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
841 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
842 fi; \
843 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
844 else \
845 test -f "$(distdir)/$$file" \
846 || cp -p $$d/$$file "$(distdir)/$$file" \
847 || exit 1; \
848 fi; \
849 done
850check-am: all-am
851 $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
852check: check-am
853all-am: Makefile $(LTLIBRARIES) $(PROGRAMS)
854installdirs:
855 for dir in "$(DESTDIR)$(module_dummydir)" "$(DESTDIR)$(benchdir)"; do \
856 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
857 done
858install: install-am
859install-exec: install-exec-am
860install-data: install-data-am
861uninstall: uninstall-am
862
863install-am: all-am
864 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
865
866installcheck: installcheck-am
867install-strip:
868 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
869 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
870 `test -z '$(STRIP)' || \
871 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
872mostlyclean-generic:
873
874clean-generic:
875
876distclean-generic:
877 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
878 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
879
880maintainer-clean-generic:
881 @echo "This command is intended for maintainers to use"
882 @echo "it deletes files that may require special tools to rebuild."
883 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
884clean: clean-am
885
886clean-am: clean-benchPROGRAMS clean-checkPROGRAMS clean-generic \
887 clean-libtool clean-local clean-module_dummyLTLIBRARIES \
888 clean-noinstLTLIBRARIES mostlyclean-am
889
890distclean: distclean-am
891 -rm -rf ./$(DEPDIR)
892 -rm -f Makefile
893distclean-am: clean-am distclean-compile distclean-generic \
894 distclean-tags
895
896dvi: dvi-am
897
898dvi-am:
899
900html: html-am
901
902html-am:
903
904info: info-am
905
906info-am:
907
908install-data-am: install-benchPROGRAMS install-module_dummyLTLIBRARIES
909
910install-dvi: install-dvi-am
911
912install-dvi-am:
913
914install-exec-am:
915
916install-html: install-html-am
917
918install-html-am:
919
920install-info: install-info-am
921
922install-info-am:
923
924install-man:
925
926install-pdf: install-pdf-am
927
928install-pdf-am:
929
930install-ps: install-ps-am
931
932install-ps-am:
933
934installcheck-am:
935
936maintainer-clean: maintainer-clean-am
937 -rm -rf ./$(DEPDIR)
938 -rm -f Makefile
939maintainer-clean-am: distclean-am maintainer-clean-generic
940
941mostlyclean: mostlyclean-am
942
943mostlyclean-am: mostlyclean-compile mostlyclean-generic \
944 mostlyclean-libtool
945
946pdf: pdf-am
947
948pdf-am:
949
950ps: ps-am
951
952ps-am:
953
954uninstall-am: uninstall-benchPROGRAMS \
955 uninstall-module_dummyLTLIBRARIES
956
957.MAKE: check-am install-am install-strip
958
959.PHONY: CTAGS GTAGS all all-am check check-am clean \
960 clean-benchPROGRAMS clean-checkPROGRAMS clean-generic \
961 clean-libtool clean-local clean-module_dummyLTLIBRARIES \
962 clean-noinstLTLIBRARIES ctags distclean distclean-compile \
963 distclean-generic distclean-libtool distclean-tags distdir dvi \
964 dvi-am html html-am info info-am install install-am \
965 install-benchPROGRAMS install-data install-data-am install-dvi \
966 install-dvi-am install-exec install-exec-am install-html \
967 install-html-am install-info install-info-am install-man \
968 install-module_dummyLTLIBRARIES install-pdf install-pdf-am \
969 install-ps install-ps-am install-strip installcheck \
970 installcheck-am installdirs maintainer-clean \
971 maintainer-clean-generic mostlyclean mostlyclean-compile \
972 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
973 tags uninstall uninstall-am uninstall-benchPROGRAMS \
974 uninstall-module_dummyLTLIBRARIES
975
976
977clean-local:
978 rm -rf *.gcno *.gcda
979
980# Tell versions [3.59,3.63) of GNU make to not export all variables.
981# Otherwise a system limit (for SysV at least) may be exceeded.
982.NOEXPORT:
diff --git a/libraries/eina/src/tests/city.cc b/libraries/eina/src/tests/city.cc
new file mode 100644
index 0000000..36ff93b
--- /dev/null
+++ b/libraries/eina/src/tests/city.cc
@@ -0,0 +1,307 @@
1// Copyright (c) 2011 Google, Inc.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy
4// of this software and associated documentation files (the "Software"), to deal
5// in the Software without restriction, including without limitation the rights
6// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7// copies of the Software, and to permit persons to whom the Software is
8// furnished to do so, subject to the following conditions:
9//
10// The above copyright notice and this permission notice shall be included in
11// all copies or substantial portions of the Software.
12//
13// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19// THE SOFTWARE.
20//
21// CityHash Version 1, by Geoff Pike and Jyrki Alakuijala
22//
23// This file provides CityHash64() and related functions.
24//
25// It's probably possible to create even faster hash functions by
26// writing a program that systematically explores some of the space of
27// possible hash functions, by using SIMD instructions, or by
28// compromising on hash quality.
29
30#include "city.h"
31
32#include <algorithm>
33
34using namespace std;
35
36#define UNALIGNED_LOAD64(p) (*(const uint64*)(p))
37#define UNALIGNED_LOAD32(p) (*(const uint32*)(p))
38
39#if !defined(LIKELY)
40#if defined(__GNUC__)
41#define LIKELY(x) (__builtin_expect(!!(x), 1))
42#else
43#define LIKELY(x) (x)
44#endif
45#endif
46
47// Some primes between 2^63 and 2^64 for various uses.
48static const uint64 k0 = 0xc3a5c85c97cb3127ULL;
49static const uint64 k1 = 0xb492b66fbe98f273ULL;
50static const uint64 k2 = 0x9ae16a3b2f90404fULL;
51static const uint64 k3 = 0xc949d7c7509e6557ULL;
52
53// Bitwise right rotate. Normally this will compile to a single
54// instruction, especially if the shift is a manifest constant.
55static uint64 Rotate(uint64 val, int shift) {
56 // Avoid shifting by 64: doing so yields an undefined result.
57 return shift == 0 ? val : ((val >> shift) | (val << (64 - shift)));
58}
59
60// Equivalent to Rotate(), but requires the second arg to be non-zero.
61// On x86-64, and probably others, it's possible for this to compile
62// to a single instruction if both args are already in registers.
63static uint64 RotateByAtLeast1(uint64 val, int shift) {
64 return (val >> shift) | (val << (64 - shift));
65}
66
67static uint64 ShiftMix(uint64 val) {
68 return val ^ (val >> 47);
69}
70
71static uint64 HashLen16(uint64 u, uint64 v) {
72 return Hash128to64(uint128(u, v));
73}
74
75static uint64 HashLen0to16(const char *s, size_t len) {
76 if (len > 8) {
77 uint64 a = UNALIGNED_LOAD64(s);
78 uint64 b = UNALIGNED_LOAD64(s + len - 8);
79 return HashLen16(a, RotateByAtLeast1(b + len, len)) ^ b;
80 }
81 if (len >= 4) {
82 uint64 a = UNALIGNED_LOAD32(s);
83 return HashLen16(len + (a << 3), UNALIGNED_LOAD32(s + len - 4));
84 }
85 if (len > 0) {
86 uint8 a = s[0];
87 uint8 b = s[len >> 1];
88 uint8 c = s[len - 1];
89 uint32 y = static_cast<uint32>(a) + (static_cast<uint32>(b) << 8);
90 uint32 z = len + (static_cast<uint32>(c) << 2);
91 return ShiftMix(y * k2 ^ z * k3) * k2;
92 }
93 return k2;
94}
95
96// This probably works well for 16-byte strings as well, but it may be overkill
97// in that case.
98static uint64 HashLen17to32(const char *s, size_t len) {
99 uint64 a = UNALIGNED_LOAD64(s) * k1;
100 uint64 b = UNALIGNED_LOAD64(s + 8);
101 uint64 c = UNALIGNED_LOAD64(s + len - 8) * k2;
102 uint64 d = UNALIGNED_LOAD64(s + len - 16) * k0;
103 return HashLen16(Rotate(a - b, 43) + Rotate(c, 30) + d,
104 a + Rotate(b ^ k3, 20) - c + len);
105}
106
107// Return a 16-byte hash for 48 bytes. Quick and dirty.
108// Callers do best to use "random-looking" values for a and b.
109static pair<uint64, uint64> WeakHashLen32WithSeeds(
110 uint64 w, uint64 x, uint64 y, uint64 z, uint64 a, uint64 b) {
111 a += w;
112 b = Rotate(b + a + z, 21);
113 uint64 c = a;
114 a += x;
115 a += y;
116 b += Rotate(a, 44);
117 return make_pair(a + z, b + c);
118}
119
120// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty.
121static pair<uint64, uint64> WeakHashLen32WithSeeds(
122 const char* s, uint64 a, uint64 b) {
123 return WeakHashLen32WithSeeds(UNALIGNED_LOAD64(s),
124 UNALIGNED_LOAD64(s + 8),
125 UNALIGNED_LOAD64(s + 16),
126 UNALIGNED_LOAD64(s + 24),
127 a,
128 b);
129}
130
131// Return an 8-byte hash for 33 to 64 bytes.
132static uint64 HashLen33to64(const char *s, size_t len) {
133 uint64 z = UNALIGNED_LOAD64(s + 24);
134 uint64 a = UNALIGNED_LOAD64(s) + (len + UNALIGNED_LOAD64(s + len - 16)) * k0;
135 uint64 b = Rotate(a + z, 52);
136 uint64 c = Rotate(a, 37);
137 a += UNALIGNED_LOAD64(s + 8);
138 c += Rotate(a, 7);
139 a += UNALIGNED_LOAD64(s + 16);
140 uint64 vf = a + z;
141 uint64 vs = b + Rotate(a, 31) + c;
142 a = UNALIGNED_LOAD64(s + 16) + UNALIGNED_LOAD64(s + len - 32);
143 z = UNALIGNED_LOAD64(s + len - 8);
144 b = Rotate(a + z, 52);
145 c = Rotate(a, 37);
146 a += UNALIGNED_LOAD64(s + len - 24);
147 c += Rotate(a, 7);
148 a += UNALIGNED_LOAD64(s + len - 16);
149 uint64 wf = a + z;
150 uint64 ws = b + Rotate(a, 31) + c;
151 uint64 r = ShiftMix((vf + ws) * k2 + (wf + vs) * k0);
152 return ShiftMix(r * k0 + vs) * k2;
153}
154
155uint64 CityHash64(const char *s, size_t len) {
156 if (len <= 32) {
157 if (len <= 16) {
158 return HashLen0to16(s, len);
159 } else {
160 return HashLen17to32(s, len);
161 }
162 } else if (len <= 64) {
163 return HashLen33to64(s, len);
164 }
165
166 // For strings over 64 bytes we hash the end first, and then as we
167 // loop we keep 56 bytes of state: v, w, x, y, and z.
168 uint64 x = UNALIGNED_LOAD64(s);
169 uint64 y = UNALIGNED_LOAD64(s + len - 16) ^ k1;
170 uint64 z = UNALIGNED_LOAD64(s + len - 56) ^ k0;
171 pair<uint64, uint64> v = WeakHashLen32WithSeeds(s + len - 64, len, y);
172 pair<uint64, uint64> w = WeakHashLen32WithSeeds(s + len - 32, len * k1, k0);
173 z += ShiftMix(v.second) * k1;
174 x = Rotate(z + x, 39) * k1;
175 y = Rotate(y, 33) * k1;
176
177 // Decrease len to the nearest multiple of 64, and operate on 64-byte chunks.
178 len = (len - 1) & ~static_cast<size_t>(63);
179 do {
180 x = Rotate(x + y + v.first + UNALIGNED_LOAD64(s + 16), 37) * k1;
181 y = Rotate(y + v.second + UNALIGNED_LOAD64(s + 48), 42) * k1;
182 x ^= w.second;
183 y ^= v.first;
184 z = Rotate(z ^ w.first, 33);
185 v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
186 w = WeakHashLen32WithSeeds(s + 32, z + w.second, y);
187 std::swap(z, x);
188 s += 64;
189 len -= 64;
190 } while (len != 0);
191 return HashLen16(HashLen16(v.first, w.first) + ShiftMix(y) * k1 + z,
192 HashLen16(v.second, w.second) + x);
193}
194
195uint64 CityHash64WithSeed(const char *s, size_t len, uint64 seed) {
196 return CityHash64WithSeeds(s, len, k2, seed);
197}
198
199uint64 CityHash64WithSeeds(const char *s, size_t len,
200 uint64 seed0, uint64 seed1) {
201 return HashLen16(CityHash64(s, len) - seed0, seed1);
202}
203
204// A subroutine for CityHash128(). Returns a decent 128-bit hash for strings
205// of any length representable in ssize_t. Based on City and Murmur.
206static uint128 CityMurmur(const char *s, size_t len, uint128 seed) {
207 uint64 a = Uint128Low64(seed);
208 uint64 b = Uint128High64(seed);
209 uint64 c = 0;
210 uint64 d = 0;
211 ssize_t l = len - 16;
212 if (l <= 0) { // len <= 16
213 c = b * k1 + HashLen0to16(s, len);
214 d = Rotate(a + (len >= 8 ? UNALIGNED_LOAD64(s) : c), 32);
215 } else { // len > 16
216 c = HashLen16(UNALIGNED_LOAD64(s + len - 8) + k1, a);
217 d = HashLen16(b + len, c + UNALIGNED_LOAD64(s + len - 16));
218 a += d;
219 do {
220 a ^= ShiftMix(UNALIGNED_LOAD64(s) * k1) * k1;
221 a *= k1;
222 b ^= a;
223 c ^= ShiftMix(UNALIGNED_LOAD64(s + 8) * k1) * k1;
224 c *= k1;
225 d ^= c;
226 s += 16;
227 l -= 16;
228 } while (l > 0);
229 }
230 a = HashLen16(a, c);
231 b = HashLen16(d, b);
232 return uint128(a ^ b, HashLen16(b, a));
233}
234
235uint128 CityHash128WithSeed(const char *s, size_t len, uint128 seed) {
236 if (len < 128) {
237 return CityMurmur(s, len, seed);
238 }
239
240 // We expect len >= 128 to be the common case. Keep 56 bytes of state:
241 // v, w, x, y, and z.
242 pair<uint64, uint64> v, w;
243 uint64 x = Uint128Low64(seed);
244 uint64 y = Uint128High64(seed);
245 uint64 z = len * k1;
246 v.first = Rotate(y ^ k1, 49) * k1 + UNALIGNED_LOAD64(s);
247 v.second = Rotate(v.first, 42) * k1 + UNALIGNED_LOAD64(s + 8);
248 w.first = Rotate(y + z, 35) * k1 + x;
249 w.second = Rotate(x + UNALIGNED_LOAD64(s + 88), 53) * k1;
250
251 // This is the same inner loop as CityHash64(), manually unrolled.
252 do {
253 x = Rotate(x + y + v.first + UNALIGNED_LOAD64(s + 16), 37) * k1;
254 y = Rotate(y + v.second + UNALIGNED_LOAD64(s + 48), 42) * k1;
255 x ^= w.second;
256 y ^= v.first;
257 z = Rotate(z ^ w.first, 33);
258 v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
259 w = WeakHashLen32WithSeeds(s + 32, z + w.second, y);
260 std::swap(z, x);
261 s += 64;
262 x = Rotate(x + y + v.first + UNALIGNED_LOAD64(s + 16), 37) * k1;
263 y = Rotate(y + v.second + UNALIGNED_LOAD64(s + 48), 42) * k1;
264 x ^= w.second;
265 y ^= v.first;
266 z = Rotate(z ^ w.first, 33);
267 v = WeakHashLen32WithSeeds(s, v.second * k1, x + w.first);
268 w = WeakHashLen32WithSeeds(s + 32, z + w.second, y);
269 std::swap(z, x);
270 s += 64;
271 len -= 128;
272 } while (LIKELY(len >= 128));
273 y += Rotate(w.first, 37) * k0 + z;
274 x += Rotate(v.first + z, 49) * k0;
275 // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s.
276 for (size_t tail_done = 0; tail_done < len; ) {
277 tail_done += 32;
278 y = Rotate(y - x, 42) * k0 + v.second;
279 w.first += UNALIGNED_LOAD64(s + len - tail_done + 16);
280 x = Rotate(x, 49) * k0 + w.first;
281 w.first += v.first;
282 v = WeakHashLen32WithSeeds(s + len - tail_done, v.first, v.second);
283 }
284 // At this point our 48 bytes of state should contain more than
285 // enough information for a strong 128-bit hash. We use two
286 // different 48-byte-to-8-byte hashes to get a 16-byte final result.
287 x = HashLen16(x, v.first);
288 y = HashLen16(y, w.first);
289 return uint128(HashLen16(x + v.second, w.second) + y,
290 HashLen16(x + w.second, y + v.second));
291}
292
293uint128 CityHash128(const char *s, size_t len) {
294 if (len >= 16) {
295 return CityHash128WithSeed(s + 16,
296 len - 16,
297 uint128(UNALIGNED_LOAD64(s) ^ k3,
298 UNALIGNED_LOAD64(s + 8)));
299 } else if (len >= 8) {
300 return CityHash128WithSeed(NULL,
301 0,
302 uint128(UNALIGNED_LOAD64(s) ^ (len * k0),
303 UNALIGNED_LOAD64(s + len - 8) ^ k1));
304 } else {
305 return CityHash128WithSeed(s, len, uint128(k0, k1));
306 }
307}
diff --git a/libraries/eina/src/tests/ecore_hash.c b/libraries/eina/src/tests/ecore_hash.c
new file mode 100644
index 0000000..f957d52
--- /dev/null
+++ b/libraries/eina/src/tests/ecore_hash.c
@@ -0,0 +1,949 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <stdio.h>
7#include <string.h>
8
9#include "Ecore_Data.h"
10
11#define PRIME_TABLE_MAX 21
12#define PRIME_MIN 17
13#define PRIME_MAX 16777213
14
15#define ECORE_HASH_CHAIN_MAX 3
16
17#define ECORE_COMPUTE_HASH(hash, key) hash->hash_func(key) % \
18 ecore_prime_table[hash->size];
19
20#define ECORE_HASH_INCREASE(hash) ((hash && ecore_prime_table[hash->size] < \
21 PRIME_MAX) ? \
22 (hash->nodes / \
23 ecore_prime_table[hash->size]) > \
24 ECORE_HASH_CHAIN_MAX : FALSE)
25#define ECORE_HASH_REDUCE(hash) ((hash && ecore_prime_table[hash->size] > \
26 PRIME_MIN) ? \
27 (double)hash->nodes / \
28 (double)ecore_prime_table[hash->size - 1] \
29 < ((double)ECORE_HASH_CHAIN_MAX * \
30 0.375) : FALSE)
31
32
33static const unsigned int ecore_prime_table[] =
34{
35 17, 31, 61, 127, 257, 509, 1021,
36 2053, 4093, 8191, 16381, 32771, 65537, 131071, 262147, 524287, 1048573,
37 2097143, 4194301, 8388617, 16777213
38};
39
40
41/* Private hash manipulation functions */
42static int _ecore_hash_node_add(Ecore_Hash *hash,
43 Ecore_Hash_Node *node);
44static Ecore_Hash_Node * _ecore_hash_node_get(Ecore_Hash *hash,
45 const void *key);
46static int _ecore_hash_increase(Ecore_Hash *hash);
47static int _ecore_hash_decrease(Ecore_Hash *hash);
48static inline int _ecore_hash_rehash(Ecore_Hash *hash,
49 Ecore_Hash_Node **old_table,
50 int old_size);
51static int _ecore_hash_bucket_destroy(Ecore_Hash_Node *list,
52 Ecore_Free_Cb keyd,
53 Ecore_Free_Cb valued);
54static inline Ecore_Hash_Node *_ecore_hash_bucket_get(Ecore_Hash *hash,
55 Ecore_Hash_Node *bucket,
56 const void *key);
57
58static Ecore_Hash_Node * _ecore_hash_node_new(void *key, void *value);
59static int _ecore_hash_node_init(Ecore_Hash_Node *node,
60 void *key,
61 void *value);
62static int _ecore_hash_node_destroy(Ecore_Hash_Node *node,
63 Ecore_Free_Cb keyd,
64 Ecore_Free_Cb valued);
65
66/**
67 * @defgroup Ecore_Data_Hash_ADT_Creation_Group Hash Creation Functions
68 *
69 * Functions that create hash tables.
70 */
71
72/**
73 * Creates and initializes a new hash
74 * @param hash_func The function for determining hash position.
75 * @param compare The function for comparing node keys.
76 * @return @c NULL on error, a new hash on success.
77 * @ingroup Ecore_Data_Hash_ADT_Creation_Group
78 */
79EAPI Ecore_Hash *
80ecore_hash_new(Ecore_Hash_Cb hash_func, Ecore_Compare_Cb compare)
81{
82 Ecore_Hash *new_hash = (Ecore_Hash *)malloc(sizeof(Ecore_Hash));
83 if (!new_hash)
84 return NULL;
85
86 if (!ecore_hash_init(new_hash, hash_func, compare))
87 {
88 FREE(new_hash);
89 return NULL;
90 }
91
92 return new_hash;
93}
94
95/**
96 * Initializes the given hash.
97 * @param hash The given hash.
98 * @param hash_func The function used for hashing node keys.
99 * @param compare The function used for comparing node keys.
100 * @return @c TRUE on success, @c FALSE on an error.
101 * @ingroup Ecore_Data_Hash_ADT_Creation_Group
102 */
103EAPI int
104ecore_hash_init(Ecore_Hash *hash,
105 Ecore_Hash_Cb hash_func,
106 Ecore_Compare_Cb compare)
107{
108 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
109
110 memset(hash, 0, sizeof(Ecore_Hash));
111
112 hash->hash_func = hash_func;
113 hash->compare = compare;
114
115 hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[0],
116 sizeof(Ecore_Hash_Node *));
117
118 return TRUE;
119}
120
121/**
122 * @defgroup Ecore_Data_Hash_ADT_Destruction_Group Hash Destruction Functions
123 *
124 * Functions that destroy hash tables and their contents.
125 */
126
127/**
128 * Sets the function to destroy the keys of the given hash.
129 * @param hash The given hash.
130 * @param function The function used to free the node keys. NULL is a
131 * valid value and means that no function will be called.
132 * @return @c TRUE on success, @c FALSE on error.
133 * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
134 */
135EAPI int
136ecore_hash_free_key_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function)
137{
138 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
139
140 hash->free_key = function;
141
142 return TRUE;
143}
144
145/**
146 * Sets the function to destroy the values in the given hash.
147 * @param hash The given hash.
148 * @param function The function that will free the node values. NULL is a
149 * valid value and means that no function will be called.
150 * @return @c TRUE on success, @c FALSE on error
151 * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
152 */
153EAPI int
154ecore_hash_free_value_cb_set(Ecore_Hash *hash, Ecore_Free_Cb function)
155{
156 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
157
158 hash->free_value = function;
159
160 return TRUE;
161}
162
163/**
164 * @defgroup Ecore_Data_Hash_ADT_Data_Group Hash Data Functions
165 *
166 * Functions that set, access and delete values from the hash tables.
167 */
168
169/**
170 * Sets a key-value pair in the given hash table.
171 * @param hash The given hash table.
172 * @param key The key.
173 * @param value The value.
174 * @return @c TRUE if successful, @c FALSE if not.
175 * @ingroup Ecore_Data_Hash_ADT_Data_Group
176 */
177EAPI int
178ecore_hash_set(Ecore_Hash *hash, void *key, void *value)
179{
180 int ret = FALSE;
181 Ecore_Hash_Node *node;
182
183 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
184
185 node = _ecore_hash_node_get(hash, key);
186 if (node)
187 {
188 if (hash->free_key)
189 hash->free_key(key);
190
191 if (node->value && hash->free_value)
192 hash->free_value(node->value);
193
194 node->value = value;
195 ret = TRUE;
196 }
197 else
198 {
199 node = _ecore_hash_node_new(key, value);
200 if (node)
201 ret = _ecore_hash_node_add(hash, node);
202 }
203
204 return ret;
205}
206
207/**
208 * Sets all key-value pairs from set in the given hash table.
209 * @param hash The given hash table.
210 * @param set The hash table to import.
211 * @return @c TRUE if successful, @c FALSE if not.
212 * @ingroup Ecore_Data_Hash_ADT_Data_Group
213 */
214EAPI int
215ecore_hash_hash_set(Ecore_Hash *hash, Ecore_Hash *set)
216{
217 unsigned int i;
218 Ecore_Hash_Node *node, *old;
219
220 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
221 CHECK_PARAM_POINTER_RETURN("set", set, FALSE);
222
223 for (i = 0; i < ecore_prime_table[set->size]; i++)
224 {
225 /* Hash into a new list to avoid loops of rehashing the same nodes */
226 while ((old = set->buckets[i]))
227 {
228 set->buckets[i] = old->next;
229 old->next = NULL;
230 node = _ecore_hash_node_get(hash, old->key);
231 if (node)
232 {
233 /* This key already exists. Delete the old and add the new
234 * value */
235 if (hash->free_key)
236 hash->free_key(node->key);
237
238 if (hash->free_value)
239 hash->free_key(node->value);
240
241 node->key = old->key;
242 node->value = old->value;
243 free(old);
244 }
245 else
246 _ecore_hash_node_add(hash, old);
247 }
248 }
249 FREE(set->buckets);
250 ecore_hash_init(set, set->hash_func, set->compare);
251 return TRUE;
252}
253
254/**
255 * Frees the hash table and the data contained inside it.
256 * @param hash The hash table to destroy.
257 * @return @c TRUE on success, @c FALSE on error.
258 * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
259 */
260EAPI void
261ecore_hash_destroy(Ecore_Hash *hash)
262{
263 unsigned int i = 0;
264
265 CHECK_PARAM_POINTER("hash", hash);
266
267 if (hash->buckets)
268 {
269 while (i < ecore_prime_table[hash->size])
270 {
271 if (hash->buckets[i])
272 {
273 Ecore_Hash_Node *bucket;
274
275 /*
276 * Remove the bucket list to avoid possible recursion
277 * on the free callbacks.
278 */
279 bucket = hash->buckets[i];
280 hash->buckets[i] = NULL;
281 _ecore_hash_bucket_destroy(bucket,
282 hash->free_key,
283 hash->free_value);
284 }
285
286 i++;
287 }
288
289 FREE(hash->buckets);
290 }
291
292 FREE(hash);
293
294 return;
295}
296
297/**
298 * @defgroup Ecore_Data_Hash_ADT_Traverse_Group Hash Traverse Functions
299 *
300 * Functions that iterate through hash tables.
301 */
302
303/**
304 * Counts the number of nodes in a hash table.
305 * @param hash The hash table to count current nodes.
306 * @return The number of nodes in the hash.
307 * @ingroup Ecore_Data_Hash_ADT_Destruction_Group
308 */
309EAPI int
310ecore_hash_count(Ecore_Hash *hash)
311{
312 CHECK_PARAM_POINTER_RETURN("hash", hash, 0);
313
314 return hash->nodes;
315}
316
317/**
318 * Runs the @p for_each_func function on each entry in the given hash.
319 * @param hash The given hash.
320 * @param for_each_func The function that each entry is passed to.
321 * @param user_data a pointer passed to calls of for_each_func
322 * @return TRUE on success, FALSE otherwise.
323 * @ingroup Ecore_Data_Hash_ADT_Traverse_Group
324 */
325EAPI int
326ecore_hash_for_each_node(Ecore_Hash *hash,
327 Ecore_For_Each for_each_func,
328 void *user_data)
329{
330 unsigned int i = 0;
331
332 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
333 CHECK_PARAM_POINTER_RETURN("for_each_func", for_each_func, FALSE);
334
335 while (i < ecore_prime_table[hash->size])
336 {
337 if (hash->buckets[i])
338 {
339 Ecore_Hash_Node *node;
340
341 for (node = hash->buckets[i]; node; node = node->next)
342 {
343 for_each_func(node, user_data);
344 }
345 }
346
347 i++;
348 }
349
350 return TRUE;
351}
352
353/**
354 * Retrieves an ecore_list of all keys in the given hash.
355 * @param hash The given hash.
356 * @return new ecore_list on success, NULL otherwise
357 * @ingroup Ecore_Data_Hash_ADT_Traverse_Group
358 */
359EAPI Ecore_List *
360ecore_hash_keys(Ecore_Hash *hash)
361{
362 unsigned int i = 0;
363 Ecore_List *keys;
364
365 CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
366
367 keys = ecore_list_new();
368 while (i < ecore_prime_table[hash->size])
369 {
370 if (hash->buckets[i])
371 {
372 Ecore_Hash_Node *node;
373
374 for (node = hash->buckets[i]; node; node = node->next)
375 {
376 ecore_list_append(keys, node->key);
377 }
378 }
379
380 i++;
381 }
382 ecore_list_first_goto(keys);
383
384 return keys;
385}
386
387/**
388 * Prints the distribution of the given hash table for graphing.
389 * @param hash The given hash table.
390 */
391EAPI void
392ecore_hash_dump_graph(Ecore_Hash *hash)
393{
394 unsigned int i;
395
396 for (i = 0; i < ecore_prime_table[hash->size]; i++)
397 if (hash->buckets[i])
398 {
399 int n = 0;
400 Ecore_Hash_Node *node;
401 for (node = hash->buckets[i]; node; node = node->next)
402 n++;
403 printf("%d\t%u", i, n);
404 }
405 else
406 printf("%d\t0", i);
407
408}
409
410/**
411 * Prints the distribution of the given hash table for graphing.
412 * @param hash The given hash table.
413 */
414EAPI void
415ecore_hash_dump_stats(Ecore_Hash *hash)
416{
417 unsigned int i;
418 double variance, sum_n_2 = 0, sum_n = 0;
419
420 for (i = 0; i < ecore_prime_table[hash->size]; i++)
421 {
422 if (hash->buckets[i])
423 {
424 int n = 0;
425 Ecore_Hash_Node *node;
426 for (node = hash->buckets[i]; node; node = node->next)
427 n++;
428 sum_n_2 += ((double)n * (double)n);
429 sum_n += (double)n;
430 }
431 }
432 variance = (sum_n_2 - ((sum_n * sum_n) / (double)i)) / (double)i;
433 printf("Average length: %f\n\tvariance^2: %f", (sum_n / (double)i),
434 variance);
435}
436
437static int
438_ecore_hash_bucket_destroy(Ecore_Hash_Node *list,
439 Ecore_Free_Cb keyd,
440 Ecore_Free_Cb valued)
441{
442 Ecore_Hash_Node *node;
443
444 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
445
446 for (node = list; node; node = list)
447 {
448 list = list->next;
449 _ecore_hash_node_destroy(node, keyd, valued);
450 }
451
452 return TRUE;
453}
454
455/*
456 * @brief Add the node to the hash table
457 * @param hash: the hash table to add the key
458 * @param node: the node to add to the hash table
459 * @return Returns FALSE on error, TRUE on success
460 */
461static int
462_ecore_hash_node_add(Ecore_Hash *hash, Ecore_Hash_Node *node)
463{
464 unsigned long hash_val;
465
466 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
467 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
468
469 /* Check to see if the hash needs to be resized */
470 if (ECORE_HASH_INCREASE(hash))
471 _ecore_hash_increase(hash);
472
473 /* Compute the position in the table */
474 if (!hash->hash_func)
475 hash_val = (unsigned long)node->key % ecore_prime_table[hash->size];
476 else
477 hash_val = ECORE_COMPUTE_HASH(hash, node->key);
478
479 /* Prepend the node to the list at the index position */
480 node->next = hash->buckets[hash_val];
481 hash->buckets[hash_val] = node;
482 hash->nodes++;
483
484 return TRUE;
485}
486
487/**
488 * Retrieves the value associated with the given key from the given hash
489 * table.
490 * @param hash The given hash table.
491 * @param key The key to search for.
492 * @return The value corresponding to key on success, @c NULL otherwise.
493 * @ingroup Ecore_Data_Hash_ADT_Data_Group
494 */
495EAPI void *
496ecore_hash_get(Ecore_Hash *hash, const void *key)
497{
498 void *data;
499 Ecore_Hash_Node *node;
500
501 CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
502
503 node = _ecore_hash_node_get(hash, key);
504 if (!node)
505 return NULL;
506
507 data = node->value;
508
509 return data;
510}
511
512/**
513 * Removes the value associated with the given key in the given hash
514 * table.
515 * @param hash The given hash table.
516 * @param key The key to search for.
517 * @return The value corresponding to the key on success. @c NULL is
518 * returned if there is an error.
519 * @ingroup Ecore_Data_Hash_ADT_Data_Group
520 */
521EAPI void *
522ecore_hash_remove(Ecore_Hash *hash, const void *key)
523{
524 Ecore_Hash_Node *node = NULL;
525 Ecore_Hash_Node *list;
526 unsigned long hash_val;
527 void *ret = NULL;
528
529 CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
530
531 /* Compute the position in the table */
532 if (!hash->hash_func)
533 hash_val = (unsigned long )key % ecore_prime_table[hash->size];
534 else
535 hash_val = ECORE_COMPUTE_HASH(hash, key);
536
537 /*
538 * If their is a list that could possibly hold the key/value pair
539 * traverse it and remove the hash node.
540 */
541 if (hash->buckets[hash_val])
542 {
543 list = hash->buckets[hash_val];
544
545 /*
546 * Traverse the list to find the specified key
547 */
548 node = list;
549 if (hash->compare)
550 while ((node) && (hash->compare(node->key, key) != 0))
551 {
552 list = node;
553 node = node->next;
554 }
555 else
556 while ((node) && (node->key != key))
557 {
558 list = node;
559 node = node->next;
560 }
561
562 /*
563 * Remove the node with the matching key and free it's memory
564 */
565 if (node)
566 {
567 if (list == node)
568 hash->buckets[hash_val] = node->next;
569 else
570 list->next = node->next;
571
572 ret = node->value;
573 node->value = NULL;
574 _ecore_hash_node_destroy(node, hash->free_key, NULL);
575 hash->nodes--;
576 }
577 }
578
579 if (ECORE_HASH_REDUCE(hash))
580 _ecore_hash_decrease(hash);
581
582 return ret;
583}
584
585/**
586 * Retrieves the first value that matches
587 * table.
588 * @param hash The given hash table.
589 * @param key The key to search for.
590 * @return The value corresponding to key on success, @c NULL otherwise.
591 * @ingroup Ecore_Data_Hash_ADT_Data_Group
592 */
593EAPI void *
594ecore_hash_find(Ecore_Hash *hash, Ecore_Compare_Cb compare, const void *value)
595{
596 unsigned int i = 0;
597
598 CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
599 CHECK_PARAM_POINTER_RETURN("compare", compare, NULL);
600 CHECK_PARAM_POINTER_RETURN("value", value, NULL);
601
602 while (i < ecore_prime_table[hash->size])
603 {
604 if (hash->buckets[i])
605 {
606 Ecore_Hash_Node *node;
607
608 for (node = hash->buckets[i]; node; node = node->next)
609 {
610 if (!compare(node->value, value))
611 return node->value;
612 }
613 }
614
615 i++;
616 }
617
618 return NULL;
619}
620
621/*
622 * @brief Retrieve the node associated with key
623 * @param hash: the hash table to search for the key
624 * @param key: the key to search for in the hash table
625 * @return Returns NULL on error, node corresponding to key on success
626 */
627static Ecore_Hash_Node *
628_ecore_hash_node_get(Ecore_Hash *hash, const void *key)
629{
630 unsigned long hash_val;
631 Ecore_Hash_Node *node = NULL;
632
633 CHECK_PARAM_POINTER_RETURN("hash", hash, NULL);
634
635 if (!hash->buckets)
636 return NULL;
637
638 /* Compute the position in the table */
639 if (!hash->hash_func)
640 hash_val = (unsigned long)key % ecore_prime_table[hash->size];
641 else
642 hash_val = ECORE_COMPUTE_HASH(hash, key);
643
644 /* Grab the bucket at the specified position */
645 if (hash->buckets[hash_val])
646 {
647 node = _ecore_hash_bucket_get(hash, hash->buckets[hash_val], key);
648 /*
649 * Move matched node to the front of the list as it's likely
650 * to be searched for again soon.
651 */
652 if (node && node != hash->buckets[hash_val])
653 {
654 node->next = hash->buckets[hash_val];
655 hash->buckets[hash_val] = node;
656 }
657 }
658
659 return node;
660}
661
662/*
663 * @brief Search the hash bucket for a specified key
664 * @param hash: the hash table to retrieve the comparison function
665 * @param bucket: the list to search for the key
666 * @param key: the key to search for in the list
667 * @return Returns NULL on error or not found, the found node on success
668 */
669static inline Ecore_Hash_Node *
670_ecore_hash_bucket_get(Ecore_Hash *hash,
671 Ecore_Hash_Node *bucket,
672 const void *key)
673{
674 Ecore_Hash_Node *prev = NULL;
675 Ecore_Hash_Node *node = NULL;
676
677 /*
678 * Traverse the list to find the desired node, if the node is in the
679 * list, then return the node.
680 */
681 if (hash->compare)
682 for (node = bucket; node; node = node->next)
683 {
684 if (hash->compare(node->key, key) == 0)
685 break;
686
687 prev = node;
688 }
689 else
690 for (node = bucket; node; node = node->next)
691 {
692 if (node->key == key)
693 break;
694
695 prev = node;
696 }
697
698 /*
699 * Remove node from the list to replace it at the beginning.
700 */
701 if (node && prev)
702 {
703 prev->next = node->next;
704 node->next = NULL;
705 }
706
707 return node;
708}
709
710/*
711 * @brief Increase the size of the hash table by approx. 2 * current size
712 * @param hash: the hash table to increase the size of
713 * @return Returns TRUE on success, FALSE on error
714 */
715static int
716_ecore_hash_increase(Ecore_Hash *hash)
717{
718 void *old;
719
720 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
721
722 /* Max size reached so return FALSE */
723 if ((ecore_prime_table[hash->size] == PRIME_MAX) ||
724 (hash->size == PRIME_TABLE_MAX))
725 return FALSE;
726
727 /*
728 * Increase the size of the hash and save a pointer to the old data
729 */
730 hash->size++;
731 old = hash->buckets;
732
733 /*
734 * Allocate a new bucket area, of the new larger size
735 */
736 hash->buckets =
737 calloc(ecore_prime_table[hash->size], sizeof(Ecore_Hash_Node *));
738
739 /*
740 * Make sure the allocation succeeded, if not replace the old data and
741 * return a failure.
742 */
743 if (!hash->buckets)
744 {
745 hash->buckets = old;
746 hash->size--;
747 return FALSE;
748 }
749
750 hash->nodes = 0;
751
752 /*
753 * Now move all of the old data into the new bucket area
754 */
755 if (_ecore_hash_rehash(hash, old, hash->size - 1))
756 {
757 FREE(old);
758 return TRUE;
759 }
760
761 /*
762 * Free the old buckets regardless of success.
763 */
764 FREE(old);
765
766 return FALSE;
767}
768
769/*
770 * @brief Decrease the size of the hash table by < 1/2 * current size
771 * @param hash: the hash table to decrease the size of
772 * @return Returns TRUE on success, FALSE on error
773 */
774static int
775_ecore_hash_decrease(Ecore_Hash *hash)
776{
777 Ecore_Hash_Node **old;
778
779 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
780
781 if (ecore_prime_table[hash->size] == PRIME_MIN)
782 return FALSE;
783
784 /*
785 * Decrease the hash size and store a pointer to the old data
786 */
787 hash->size--;
788 old = hash->buckets;
789
790 /*
791 * Allocate a new area to store the data
792 */
793 hash->buckets = (Ecore_Hash_Node **)calloc(ecore_prime_table[hash->size],
794 sizeof(Ecore_Hash_Node *));
795
796 /*
797 * Make sure allocation succeeded otherwise rreturn to the previous
798 * state
799 */
800 if (!hash->buckets)
801 {
802 hash->buckets = old;
803 hash->size++;
804 return FALSE;
805 }
806
807 hash->nodes = 0;
808
809 if (_ecore_hash_rehash(hash, old, hash->size + 1))
810 {
811 FREE(old);
812 return TRUE;
813 }
814
815 return FALSE;
816}
817
818/*
819 * @brief Rehash the nodes of a table into the hash table
820 * @param hash: the hash to place the nodes of the table
821 * @param table: the table to remove the nodes from and place in hash
822 * @return Returns TRUE on success, FALSE on error
823 */
824static inline int
825_ecore_hash_rehash(Ecore_Hash *hash, Ecore_Hash_Node **old_table, int old_size)
826{
827 unsigned int i;
828 Ecore_Hash_Node *old;
829
830 CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
831 CHECK_PARAM_POINTER_RETURN("old_table", old_table, FALSE);
832
833 for (i = 0; i < ecore_prime_table[old_size]; i++)
834 {
835 /* Hash into a new list to avoid loops of rehashing the same nodes */
836 while ((old = old_table[i]))
837 {
838 old_table[i] = old->next;
839 old->next = NULL;
840 _ecore_hash_node_add(hash, old);
841 }
842 }
843
844 return TRUE;
845}
846
847/*
848 * @brief Create a new hash node for key and value storage
849 * @param key: the key for this node
850 * @param value: the value that the key references
851 * @return Returns NULL on error, a new hash node on success
852 */
853static Ecore_Hash_Node *
854_ecore_hash_node_new(void *key, void *value)
855{
856 Ecore_Hash_Node *node;
857
858 node = (Ecore_Hash_Node *)malloc(sizeof(Ecore_Hash_Node));
859 if (!node)
860 return NULL;
861
862 if (!_ecore_hash_node_init(node, key, value))
863 {
864 FREE(node);
865 return NULL;
866 }
867
868 return node;
869}
870
871/*
872 * @brief Initialize a hash node to some sane default values
873 * @param node: the node to set the values
874 * @param key: the key to reference this node
875 * @param value: the value that key refers to
876 * @return Returns TRUE on success, FALSE on error
877 */
878static int
879_ecore_hash_node_init(Ecore_Hash_Node *node, void *key, void *value)
880{
881 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
882
883 node->key = key;
884 node->value = value;
885
886 return TRUE;
887}
888
889/*
890 * @brief Destroy a node and call the specified callbacks to free data
891 * @param node: the node to be destroyed
892 * @param keyd: the function to free the key
893 * @param valued: the function to free the value
894 * @return Returns TRUE on success, FALSE on error
895 */
896static int
897_ecore_hash_node_destroy(Ecore_Hash_Node *node,
898 Ecore_Free_Cb keyd,
899 Ecore_Free_Cb valued)
900{
901 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
902
903 if (keyd)
904 keyd(node->key);
905
906 if (valued)
907 valued(node->value);
908
909 FREE(node);
910
911 return TRUE;
912}
913
914int
915ecore_str_compare(const void *key1, const void *key2)
916{
917 const char *k1, *k2;
918
919 if (!key1 || !key2)
920 return ecore_direct_compare(key1, key2);
921 else if (key1 == key2)
922 return 0;
923
924 k1 = key1;
925 k2 = key2;
926
927 return strcmp(k1, k2);
928}
929
930unsigned int
931ecore_str_hash(const void *key)
932{
933 int i;
934 unsigned int mask;
935 unsigned int value = 0;
936 const char *k = key;
937
938 if (!k)
939 return 0;
940
941 mask = (sizeof(unsigned int) * 8) - 1;
942
943 for (i = 0; k[i] != '\0'; i++)
944 {
945 value ^= ((unsigned int)k[i] << ((i * 5) & mask));
946 }
947
948 return value;
949}
diff --git a/libraries/eina/src/tests/ecore_list.c b/libraries/eina/src/tests/ecore_list.c
new file mode 100644
index 0000000..7da4417
--- /dev/null
+++ b/libraries/eina/src/tests/ecore_list.c
@@ -0,0 +1,2162 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Ecore_Data.h"
9
10/* Some tests showed that beyond that value heap sort is faster than merge sort
11 * (in this implementation). This value has to be changed or at least review
12 * if someone is changing the implementation. */
13#define ECORE_MERGESORT_LIMIT 40000
14
15/* Return information about the list */
16static void * _ecore_list_current(Ecore_List *list);
17
18/* Adding functions */
19static int _ecore_list_insert(Ecore_List *list,
20 Ecore_List_Node *node);
21static int _ecore_list_append_0(Ecore_List *list,
22 Ecore_List_Node *node);
23static int _ecore_list_prepend_0(Ecore_List *list,
24 Ecore_List_Node *node);
25
26/* Remove functions */
27static void * _ecore_list_remove_0(Ecore_List *list);
28static void * _ecore_list_first_remove(Ecore_List *list);
29static void * _ecore_list_last_remove(Ecore_List *list);
30
31/* Basic traversal functions */
32static void * _ecore_list_next(Ecore_List *list);
33static void * _ecore_list_last_goto(Ecore_List *list);
34static void * _ecore_list_first_goto(Ecore_List *list);
35static void * _ecore_list_goto(Ecore_List *list, const void *data);
36static void * _ecore_list_index_goto(Ecore_List *list, int idx);
37
38/* Iterative functions */
39static int _ecore_list_for_each(Ecore_List *list,
40 Ecore_For_Each function,
41 void *user_data);
42static void * _ecore_list_find(Ecore_List *list,
43 Ecore_Compare_Cb function,
44 const void *user_data);
45
46/* Sorting functions */
47static Ecore_List_Node *_ecore_list_node_mergesort(Ecore_List_Node *first,
48 int n,
49 Ecore_Compare_Cb compare,
50 int order);
51static Ecore_List_Node *_ecore_list_node_merge(Ecore_List_Node *first,
52 Ecore_List_Node *second,
53 Ecore_Compare_Cb compare,
54 int order);
55static Ecore_List_Node *_ecore_dlist_node_mergesort(Ecore_List_Node *first,
56 int n,
57 Ecore_Compare_Cb compare,
58 int order);
59static Ecore_List_Node *_ecore_dlist_node_merge(Ecore_List_Node *first,
60 Ecore_List_Node *second,
61 Ecore_Compare_Cb compare,
62 int order);
63
64/* Private double linked list functions */
65static void *_ecore_dlist_previous(Ecore_DList *list);
66static void *_ecore_dlist_first_remove(Ecore_DList *list);
67static void *_ecore_dlist_index_goto(Ecore_DList *list, int idx);
68
69/**
70 @defgroup Ecore_Data_List_Creation_Group List Creation/Destruction Functions
71
72 Functions that create, initialize and destroy Ecore_Lists.
73 */
74
75/**
76 * Create and initialize a new list.
77 * @return A new initialized list on success, @c NULL on failure.
78 * @ingroup Ecore_Data_List_Creation_Group
79 */
80EAPI Ecore_List *
81ecore_list_new(void)
82{
83 Ecore_List *list;
84
85 list = (Ecore_List *)malloc(sizeof(Ecore_List));
86 if (!list)
87 return NULL;
88
89 if (!ecore_list_init(list))
90 {
91 FREE(list);
92 return NULL;
93 }
94
95 return list;
96}
97
98/**
99 * Initialize a list to some sane starting values.
100 * @param list The list to initialize.
101 * @return @c TRUE if successful, @c FALSE if an error occurs.
102 * @ingroup Ecore_Data_List_Creation_Group
103 */
104EAPI int
105ecore_list_init(Ecore_List *list)
106{
107 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
108
109 memset(list, 0, sizeof(Ecore_List));
110
111 return TRUE;
112}
113
114/**
115 * Free a list and all of it's nodes.
116 * @param list The list to be freed.
117 * @ingroup Ecore_Data_List_Creation_Group
118 */
119EAPI void
120ecore_list_destroy(Ecore_List *list)
121{
122 void *data;
123
124 CHECK_PARAM_POINTER("list", list);
125
126 while (list->first)
127 {
128 data = _ecore_list_first_remove(list);
129 if (list->free_func)
130 list->free_func(data);
131 }
132
133 FREE(list);
134}
135
136/**
137 * Set the function for freeing data.
138 * @param list The list that will use this function when nodes are
139 * destroyed.
140 * @param free_func The function that will free the key data.
141 * @return @c TRUE on successful set, @c FALSE otherwise.
142 */
143EAPI int
144ecore_list_free_cb_set(Ecore_List *list, Ecore_Free_Cb free_func)
145{
146 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
147
148 list->free_func = free_func;
149
150 return TRUE;
151}
152
153/**
154 * Checks the list for any nodes.
155 * @param list The list to check for nodes
156 * @return @c TRUE if no nodes in list, @c FALSE if the list contains nodes
157 */
158EAPI int
159ecore_list_empty_is(Ecore_List *list)
160{
161 int ret = TRUE;
162
163 CHECK_PARAM_POINTER_RETURN("list", list, TRUE);
164
165 if (list->nodes)
166 ret = FALSE;
167
168 return ret;
169}
170
171/**
172 * Returns the number of the current node.
173 * @param list The list to return the number of the current node.
174 * @return The number of the current node in the list.
175 */
176EAPI int
177ecore_list_index(Ecore_List *list)
178{
179 int ret;
180
181 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
182
183 ret = list->index;
184
185 return ret;
186}
187
188/**
189 * Find the number of nodes in the list.
190 * @param list The list to find the number of nodes
191 * @return The number of nodes in the list.
192 */
193EAPI int
194ecore_list_count(Ecore_List *list)
195{
196 int ret = 0;
197
198 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
199
200 ret = list->nodes;
201
202 return ret;
203}
204
205/**
206 @defgroup Ecore_Data_List_Add_Item_Group List Item Adding Functions
207
208 Functions that are used to add nodes to an Ecore_List.
209 */
210
211/**
212 * Append data to the list.
213 * @param list The list.
214 * @param data The data to append.
215 * @return @c FALSE if an error occurs, @c TRUE if appended successfully
216 * @ingroup Ecore_Data_List_Add_Item_Group
217 */
218EAPI inline int
219ecore_list_append(Ecore_List *list, void *data)
220{
221 int ret;
222 Ecore_List_Node *node;
223
224 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
225
226 node = ecore_list_node_new();
227 node->data = data;
228
229 ret = _ecore_list_append_0(list, node);
230
231 return ret;
232}
233
234/* For adding items to the end of the list */
235static int
236_ecore_list_append_0(Ecore_List *list, Ecore_List_Node *end)
237{
238 if (list->last)
239 list->last->next = end;
240
241 list->last = end;
242
243 if (!list->first)
244 {
245 list->first = end;
246 list->index = 0;
247 list->current = NULL;
248 }
249
250 if (list->index >= list->nodes)
251 list->index++;
252
253 list->nodes++;
254
255 return TRUE;
256}
257
258/**
259 * Prepend data to the beginning of the list.
260 * @param list The list.
261 * @param data The data to prepend.
262 * @return @c FALSE if an error occurs, @c TRUE if prepended successfully.
263 * @ingroup Ecore_Data_List_Add_Item_Group
264 */
265EAPI inline int
266ecore_list_prepend(Ecore_List *list, void *data)
267{
268 int ret;
269 Ecore_List_Node *node;
270
271 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
272
273 node = ecore_list_node_new();
274 node->data = data;
275
276 ret = _ecore_list_prepend_0(list, node);
277
278 return ret;
279}
280
281/* For adding items to the beginning of the list */
282static int
283_ecore_list_prepend_0(Ecore_List *list, Ecore_List_Node *start)
284{
285 /* Put it at the beginning of the list */
286 start->next = list->first;
287
288 list->first = start;
289
290 /* If no last node, then the first node is the last node */
291 if (!list->last)
292 list->last = list->first;
293
294 list->nodes++;
295 list->index++;
296
297 return TRUE;
298}
299
300/**
301 * Insert data in front of the current point in the list.
302 * @param list The list to hold the inserted @p data.
303 * @param data The data to insert into @p list.
304 * @return @c FALSE if there is an error, @c TRUE on success
305 * @ingroup Ecore_Data_List_Add_Item_Group
306 */
307EAPI inline int
308ecore_list_insert(Ecore_List *list, void *data)
309{
310 int ret;
311 Ecore_List_Node *node;
312
313 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
314
315 node = ecore_list_node_new();
316 node->data = data;
317
318 ret = _ecore_list_insert(list, node);
319
320 return ret;
321}
322
323/* For adding items in front of the current position in the list */
324static int
325_ecore_list_insert(Ecore_List *list, Ecore_List_Node *new_node)
326{
327 /*
328 * If the current point is at the beginning of the list, then it's the
329 * same as prepending it to the list.
330 */
331 if (list->current == list->first)
332 return _ecore_list_prepend_0(list, new_node);
333
334 if (!list->current)
335 {
336 int ret_value;
337
338 ret_value = _ecore_list_append_0(list, new_node);
339 list->current = list->last;
340
341 return ret_value;
342 }
343
344 /* Setup the fields of the new node */
345 new_node->next = list->current;
346
347 /* And hook the node into the list */
348 _ecore_list_index_goto(list, ecore_list_index(list) - 1);
349
350 list->current->next = new_node;
351
352 /* Now move the current item to the inserted item */
353 list->current = new_node;
354 list->nodes++;
355
356 return TRUE;
357}
358/**
359 * Append a list to the list.
360 * @param list The list.
361 * @param append The list to append.
362 * @return @c FALSE if an error occurs, @c TRUE if appended successfully
363 * @ingroup Ecore_Data_List_Add_Item_Group
364 */
365
366EAPI int
367ecore_list_append_list(Ecore_List *list, Ecore_List *append)
368{
369 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
370 CHECK_PARAM_POINTER_RETURN("append", append, FALSE);
371
372 if (ecore_list_empty_is(append))
373 return TRUE;
374
375 if (ecore_list_empty_is(list))
376 {
377 list->first = append->first;
378 list->current = list->first;
379 list->last = append->last;
380 list->nodes = append->nodes;
381 }
382 else
383 {
384 list->last->next = append->first;
385 list->last = append->last;
386 list->nodes += append->nodes;
387 }
388
389 ecore_list_init(append);
390 return TRUE;
391}
392
393/**
394 * Prepend a list to the beginning of the list.
395 * @param list The list.
396 * @param prepend The list to prepend.
397 * @return @c FALSE if an error occurs, @c TRUE if prepended successfully.
398 * @ingroup Ecore_Data_List_Add_Item_Group
399 */
400EAPI int
401ecore_list_prepend_list(Ecore_List *list, Ecore_List *prepend)
402{
403 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
404 CHECK_PARAM_POINTER_RETURN("prepend", prepend, FALSE);
405
406 if (ecore_list_empty_is(prepend))
407 return TRUE;
408
409 if (ecore_list_empty_is(list))
410 {
411 list->first = prepend->first;
412 list->current = NULL;
413 list->last = prepend->last;
414 list->nodes = prepend->nodes;
415 }
416 else
417 {
418 prepend->last->next = list->first;
419 list->first = prepend->first;
420 list->nodes += prepend->nodes;
421 list->index += prepend->nodes;
422 }
423
424 ecore_list_init(prepend);
425 return TRUE;
426}
427
428/**
429 @defgroup Ecore_Data_List_Remove_Item_Group List Item Removing Functions
430
431 Functions that remove nodes from an Ecore_List.
432 */
433
434/**
435 * Remove the current item from the list.
436 * @param list The list to remove the current item
437 * @return A pointer to the removed data on success, @c NULL on failure.
438 * @ingroup Ecore_Data_List_Remove_Item_Group
439 */
440EAPI inline void *
441ecore_list_remove(Ecore_List *list)
442{
443 void *ret;
444
445 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
446
447 ret = _ecore_list_remove_0(list);
448
449 return ret;
450}
451
452/* Remove the current item from the list */
453static void *
454_ecore_list_remove_0(Ecore_List *list)
455{
456 void *ret = NULL;
457 Ecore_List_Node *old;
458
459 if (!list)
460 return NULL;
461
462 if (ecore_list_empty_is(list))
463 return NULL;
464
465 if (!list->current)
466 return NULL;
467
468 if (list->current == list->first)
469 return _ecore_list_first_remove(list);
470
471 if (list->current == list->last)
472 return _ecore_list_last_remove(list);
473
474 old = list->current;
475
476 _ecore_list_index_goto(list, list->index - 1);
477
478 list->current->next = old->next;
479 old->next = NULL;
480 ret = old->data;
481 old->data = NULL;
482
483 _ecore_list_next(list);
484
485 ecore_list_node_destroy(old, NULL);
486 list->nodes--;
487
488 return ret;
489}
490
491/**
492 * Remove and free the data in lists current position.
493 * @param list The list to remove and free the current item.
494 * @return @c TRUE on success, @c FALSE on error
495 * @ingroup Ecore_Data_List_Remove_Item_Group
496 */
497EAPI int
498ecore_list_remove_destroy(Ecore_List *list)
499{
500 void *data;
501
502 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
503
504 data = _ecore_list_remove_0(list);
505 if (list->free_func)
506 list->free_func(data);
507
508 return TRUE;
509}
510
511/**
512 * Remove the first item from the list.
513 * @param list The list to remove the current item
514 * @return Returns a pointer to the removed data on success, @c NULL on
515 * failure.
516 * @ingroup Ecore_Data_List_Remove_Item_Group
517 */
518EAPI inline void *
519ecore_list_first_remove(Ecore_List *list)
520{
521 void *ret;
522
523 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
524
525 ret = _ecore_list_first_remove(list);
526
527 return ret;
528}
529
530/* Remove the first item from the list */
531static void *
532_ecore_list_first_remove(Ecore_List *list)
533{
534 void *ret = NULL;
535 Ecore_List_Node *old;
536
537 if (!list)
538 return NULL;
539
540 if (ecore_list_empty_is(list))
541 return NULL;
542
543 old = list->first;
544
545 list->first = list->first->next;
546
547 if (list->current == old)
548 list->current = list->first;
549 else
550 (list->index ? list->index-- : 0);
551
552 if (list->last == old)
553 list->last = list->first;
554
555 ret = old->data;
556 old->data = NULL;
557
558 ecore_list_node_destroy(old, NULL);
559 list->nodes--;
560
561 return ret;
562}
563
564/**
565 * Remove the last item from the list.
566 * @param list The list to remove the last node from
567 * @return A pointer to the removed data on success, @c NULL on failure.
568 * @ingroup Ecore_Data_List_Remove_Item_Group
569 */
570EAPI inline void *
571ecore_list_last_remove(Ecore_List *list)
572{
573 void *ret;
574
575 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
576
577 ret = _ecore_list_last_remove(list);
578
579 return ret;
580}
581
582/* Remove the last item from the list */
583static void *
584_ecore_list_last_remove(Ecore_List *list)
585{
586 void *ret = NULL;
587 Ecore_List_Node *old, *prev;
588
589 if (!list)
590 return NULL;
591
592 if (ecore_list_empty_is(list))
593 return NULL;
594
595 old = list->last;
596 if (list->current == old)
597 list->current = NULL;
598
599 if (list->first == old)
600 list->first = NULL;
601
602 for (prev = list->first; prev && prev->next != old; prev = prev->next) ;
603 list->last = prev;
604 if (prev)
605 prev->next = NULL;
606
607 old->next = NULL;
608 ret = old->data;
609 old->data = NULL;
610
611 ecore_list_node_destroy(old, NULL);
612 list->nodes--;
613
614 return ret;
615}
616
617/**
618 @defgroup Ecore_Data_List_Traverse_Group List Traversal Functions
619
620 Functions that can be used to traverse an Ecore_List.
621 */
622
623/**
624 * Make the current item the item with the given index number.
625 * @param list The list.
626 * @param idx The position to move the current item.
627 * @return A pointer to new current item on success, @c NULL on failure.
628 * @ingroup Ecore_Data_List_Traverse_Group
629 */
630EAPI inline void *
631ecore_list_index_goto(Ecore_List *list, int idx)
632{
633 void *ret;
634
635 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
636
637 ret = _ecore_list_index_goto(list, idx);
638
639 return ret;
640}
641
642/* This is the non-threadsafe version, use this inside internal functions that
643 * already lock the list */
644static void *
645_ecore_list_index_goto(Ecore_List *list, int idx)
646{
647 int i;
648
649 if (!list)
650 return NULL;
651
652 if (ecore_list_empty_is(list))
653 return NULL;
654
655 if (idx > ecore_list_count(list) || idx < 0)
656 return NULL;
657
658 if (idx < list->index)
659 {
660 _ecore_list_first_goto(list);
661 i = 0;
662 }
663 else
664 i = list->index;
665
666 for (; i < idx && _ecore_list_next(list); i++) ;
667
668 if (i >= list->nodes)
669 return NULL;
670
671 list->index = i;
672
673 return list->current->data;
674}
675
676/**
677 * Make the current item the node that contains @p data.
678 * @param list The list.
679 * @param data The data to find.
680 * @return A pointer to @p data on success, @c NULL on failure.
681 * @ingroup Ecore_Data_List_Traverse_Group
682 */
683EAPI inline void *
684ecore_list_goto(Ecore_List *list, const void *data)
685{
686 void *ret;
687
688 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
689
690 ret = _ecore_list_goto(list, data);
691
692 return ret;
693}
694
695/* Set the current position to the node containing data */
696static void *
697_ecore_list_goto(Ecore_List *list, const void *data)
698{
699 int idx;
700 Ecore_List_Node *node;
701
702 if (!list)
703 return NULL;
704
705 idx = 0;
706
707 node = list->first;
708 while (node && node->data)
709 {
710 Ecore_List_Node *next;
711
712 if (node->data == data)
713 break;
714
715 next = node->next;
716
717 node = next;
718
719 idx++;
720 }
721
722 if (!node)
723 return NULL;
724
725 list->current = node;
726 list->index = idx;
727
728 return list->current->data;
729}
730
731/**
732 * Make the current item the first item in the list
733 * @param list The list.
734 * @return A pointer to the first item on success, @c NULL on failure
735 * @ingroup Ecore_Data_List_Traverse_Group
736 */
737EAPI inline void *
738ecore_list_first_goto(Ecore_List *list)
739{
740 void *ret;
741
742 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
743
744 ret = _ecore_list_first_goto(list);
745
746 return ret;
747}
748
749/* Set the current position to the start of the list */
750static void *
751_ecore_list_first_goto(Ecore_List *list)
752{
753 if (!list || !list->first)
754 return NULL;
755
756 list->current = list->first;
757 list->index = 0;
758
759 return list->current->data;
760}
761
762/**
763 * Make the current item the last item in the list.
764 * @param list The list.
765 * @return A pointer to the last item on success, @c NULL on failure.
766 * @ingroup Ecore_Data_List_Traverse_Group
767 */
768EAPI inline void *
769ecore_list_last_goto(Ecore_List *list)
770{
771 void *ret;
772
773 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
774
775 ret = _ecore_list_last_goto(list);
776
777 return ret;
778}
779
780/* Set the current position to the end of the list */
781static void *
782_ecore_list_last_goto(Ecore_List *list)
783{
784 if (!list || !list->last)
785 return NULL;
786
787 list->current = list->last;
788 list->index = (list->nodes - 1);
789
790 return list->current->data;
791}
792
793/**
794 * Retrieve the data pointed to by the current item in @p list.
795 * @param list The list.
796 * @return Returns the data at current position, can be @c NULL.
797 */
798EAPI inline void *
799ecore_list_current(Ecore_List *list)
800{
801 void *ret;
802
803 ret = _ecore_list_current(list);
804
805 return ret;
806}
807
808/**
809 * Retrieve the data pointed to by the first item in @p list.
810 * @param list The list.
811 * @return Returns the data at current position, can be @c NULL.
812 */
813EAPI inline void *
814ecore_list_first(Ecore_List *list)
815{
816 void *ret;
817
818 if (!list->first)
819 return NULL;
820
821 ret = list->first->data;
822
823 return ret;
824}
825
826/**
827 * Retrieve the data pointed to by the last item in @p list.
828 * @param list The list.
829 * @return Returns the data at current position, can be @c NULL.
830 */
831EAPI inline void *
832ecore_list_last(Ecore_List *list)
833{
834 void *ret;
835
836 if (!list->last)
837 return NULL;
838
839 ret = list->last->data;
840
841 return ret;
842}
843
844/* Return the data of the current node without incrementing */
845static void *
846_ecore_list_current(Ecore_List *list)
847{
848 void *ret;
849
850 if (!list->current)
851 return NULL;
852
853 ret = list->current->data;
854
855 return ret;
856}
857
858/**
859 * Retrieve the data pointed to by the current item, and make the next item
860 * the current item.
861 * @param list The list to retrieve data from.
862 * @return The current item in the list on success, @c NULL on failure.
863 */
864EAPI inline void *
865ecore_list_next(Ecore_List *list)
866{
867 void *data;
868
869 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
870
871 data = _ecore_list_next(list);
872
873 return data;
874}
875
876/* Return the data contained in the current node and go to the next node */
877static void *
878_ecore_list_next(Ecore_List *list)
879{
880 void *data;
881 Ecore_List_Node *ret;
882 Ecore_List_Node *next;
883
884 if (!list->current)
885 return NULL;
886
887 ret = list->current;
888 next = list->current->next;
889
890 list->current = next;
891 list->index++;
892
893 data = ret->data;
894
895 return data;
896}
897
898/**
899 * Remove all nodes from @p list.
900 * @param list The list.
901 * @return Returns @c TRUE on success, @c FALSE on error.
902 * @note The data for each item on the list is not freed by
903 * @c ecore_list_clear().
904 */
905EAPI int
906ecore_list_clear(Ecore_List *list)
907{
908 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
909
910 while (!ecore_list_empty_is(list))
911 _ecore_list_first_remove(list);
912
913 return TRUE;
914}
915
916/**
917 * Execute function for each node in @p list.
918 * @param list The list.
919 * @param function The function to pass each node from @p list to.
920 * @return Returns @c TRUE on success, @c FALSE on failure.
921 * @ingroup Ecore_Data_List_Traverse_Group
922 */
923EAPI int
924ecore_list_for_each(Ecore_List *list, Ecore_For_Each function, void *user_data)
925{
926 int ret;
927
928 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
929
930 ret = _ecore_list_for_each(list, function, user_data);
931
932 return ret;
933}
934
935/* The real meat of executing the function for each data node */
936static int
937_ecore_list_for_each(Ecore_List *list, Ecore_For_Each function, void *user_data)
938{
939 void *value;
940
941 if (!list || !function)
942 return FALSE;
943
944 _ecore_list_first_goto(list);
945 while ((value = _ecore_list_next(list)))
946 function(value, user_data);
947
948 return TRUE;
949}
950
951/**
952 * Find data in @p list using the compare function @p func
953 * @param list The list.
954 * @param function The function to test each node of @p list with
955 * @param user_data Data to match against (used by @p function)
956 * @return the first matching data node, or NULL if none match
957 */
958EAPI void *
959ecore_list_find(Ecore_List *list,
960 Ecore_Compare_Cb function,
961 const void *user_data)
962{
963 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
964
965 return _ecore_list_find(list, function, user_data);
966}
967
968/* The real meat of finding a node via a compare cb */
969static void *
970_ecore_list_find(Ecore_List *list,
971 Ecore_Compare_Cb function,
972 const void *user_data)
973{
974 void *value;
975 if (!list || !function)
976 return NULL;
977
978 _ecore_list_first_goto(list);
979 while ((value = _ecore_list_current(list)))
980 {
981 if (!function(value, user_data))
982 return value;
983
984 ecore_list_next(list);
985 }
986
987 return NULL;
988}
989
990/**
991 * Sort data in @p list using the compare function @p compare
992 * @param list The list.
993 * @param compare The function to compare the data of @p list
994 * @param order The sort direction, possible values are ECORE_SORT_MIN and
995 * ECORE_SORT_MAX
996 * @return true on success
997 *
998 * This is a wrapper function for mergesort and heapsort. It
999 * tries to choose the fastest algorithm depending on the
1000 * number of notes. Note: The sort may be unstable.
1001 */
1002EAPI int
1003ecore_list_sort(Ecore_List *list, Ecore_Compare_Cb compare, char order)
1004{
1005 CHECK_PARAM_POINTER_RETURN("list", list, 0);
1006
1007 if (list->nodes < 2)
1008 return 1;
1009
1010 if (list->nodes < ECORE_MERGESORT_LIMIT)
1011 return ecore_list_mergesort(list, compare, order);
1012
1013 if (!ecore_list_heapsort(list, compare, order))
1014 return ecore_list_mergesort(list, compare, order);
1015
1016 return 1;
1017}
1018
1019/**
1020 * Sort data in @p list using the compare function @p compare
1021 * @param list The list.
1022 * @param compare The function to compare the data of @p list
1023 * @param order The sort direction, possible values are ECORE_SORT_MIN and
1024 * ECORE_SORT_MAX
1025 * @return true on success
1026 *
1027 * Mergesort is a stable, in-place sorting algorithm
1028 */
1029EAPI int
1030ecore_list_mergesort(Ecore_List *list, Ecore_Compare_Cb compare, char order)
1031{
1032 Ecore_List_Node *node;
1033
1034 CHECK_PARAM_POINTER_RETURN("list", list, 0);
1035 if (list->nodes < 2)
1036 return 1;
1037
1038 if (order == ECORE_SORT_MIN)
1039 order = 1;
1040 else
1041 order = -1;
1042
1043 node = _ecore_list_node_mergesort(list->first, list->nodes, compare, order);
1044 list->first = node;
1045
1046 /* maybe there is a better way to do that but our last node has changed */
1047 while (node->next)
1048 node = node->next;
1049 list->last = node;
1050
1051 _ecore_list_first_goto(list);
1052
1053 return 1;
1054}
1055
1056/**
1057 * Merge the @p l2 into the @p list using the compare function @p compare.
1058 * Both lists need to be sorted else a corrupt list could be the result.
1059 * @param list The list.
1060 * @param l2 The second list, this list will be empty after the merge
1061 * @param compare The function to compare the data of @p list and @p l2
1062 * @param order The sort direction, possible values are ECORE_SORT_MIN and
1063 * ECORE_SORT_MAX
1064 */
1065EAPI void
1066ecore_list_merge(Ecore_List *list,
1067 Ecore_List *l2,
1068 Ecore_Compare_Cb compare,
1069 char order)
1070{
1071 CHECK_PARAM_POINTER("list", list);
1072 CHECK_PARAM_POINTER("l2", l2);
1073
1074 if (ecore_list_empty_is(l2))
1075 return;
1076
1077 if (ecore_list_empty_is(list))
1078 {
1079 ecore_list_append_list(list, l2);
1080 return;
1081 }
1082
1083 if (order == ECORE_SORT_MIN)
1084 order = 1;
1085 else
1086 order = -1;
1087
1088 list->first = _ecore_list_node_merge(list->first, l2->first, compare, order);
1089
1090 if ((order * compare(list->last->data, l2->last->data)) < 0)
1091 list->last = l2->last;
1092
1093 list->nodes += l2->nodes;
1094 ecore_list_init(l2);
1095}
1096
1097/* this is the internal recrusive function for the merge sort */
1098static Ecore_List_Node *
1099_ecore_list_node_mergesort(Ecore_List_Node *first, int n,
1100 Ecore_Compare_Cb compare, int order)
1101{
1102 Ecore_List_Node *middle;
1103 Ecore_List_Node *premid;
1104 int mid;
1105 int i;
1106
1107 mid = n / 2;
1108
1109 if (n < 2)
1110 return first;
1111 else if (n == 2)
1112 {
1113 if (compare(first->data, first->next->data) * order > 0)
1114 {
1115 /* swap the data */
1116 void *data;
1117 data = first->next->data;
1118 first->next->data = first->data;
1119 first->data = data;
1120 }
1121
1122 return first;
1123 }
1124
1125 /* first find the premiddle node*/
1126 for (premid = first, i = 0; i < mid - 1; i++)
1127 premid = premid->next;
1128
1129 /* split the list */
1130 middle = premid->next;
1131 premid->next = NULL;
1132
1133 /* sort the the partial lists */
1134 first = _ecore_list_node_mergesort(first, mid, compare, order);
1135 middle = _ecore_list_node_mergesort(middle, n - mid, compare, order);
1136
1137 return _ecore_list_node_merge(first, middle, compare, order);
1138}
1139
1140/* this function is used to merge the partial sorted lists */
1141static Ecore_List_Node *
1142_ecore_list_node_merge(Ecore_List_Node *first, Ecore_List_Node *second,
1143 Ecore_Compare_Cb compare, int order)
1144{
1145 Ecore_List_Node *list;
1146 Ecore_List_Node *l;
1147
1148 /* select the first node outside the loop, because we need to keep
1149 * a pointer to it */
1150 if (compare(first->data, second->data) * order > 0)
1151 {
1152 list = l = second;
1153 second = second->next;
1154 }
1155 else
1156 {
1157 list = l = first;
1158 first = first->next;
1159 }
1160
1161 /* and now start the merging */
1162 while (first && second)
1163 {
1164 if (compare(first->data, second->data) * order > 0)
1165 {
1166 l = l->next = second;
1167 second = second->next;
1168 }
1169 else
1170 {
1171 l = l->next = first;
1172 first = first->next;
1173 }
1174 }
1175
1176 /* append the rest or set it to NULL */
1177 if (first)
1178 l->next = first;
1179 else if (second)
1180 l->next = second;
1181 else
1182 l->next = NULL;
1183
1184 return list;
1185}
1186
1187/**
1188 * Sort data in @p list using the compare function @p compare
1189 * @param list The list.
1190 * @param compare The function to compare the data of @p list
1191 * @param order The sort direction, possible values are ECORE_SORT_MIN and
1192 * ECORE_SORT_MAX
1193 * @return true on success
1194 *
1195 * Heapsort is a unstable sorting algorithm, it needs to allocate extra memomry,
1196 * but there for it is for a great number of nodes faster than mergesort
1197 */
1198EAPI int
1199ecore_list_heapsort(Ecore_List *list, Ecore_Compare_Cb compare, char order)
1200{
1201 Ecore_Sheap *heap;
1202 Ecore_List_Node *node;
1203 void *data;
1204
1205 CHECK_PARAM_POINTER_RETURN("list", list, 0);
1206 /*
1207 * Push the data into a heap.
1208 */
1209 heap = ecore_sheap_new(compare, list->nodes);
1210 if (!heap)
1211 return 0;
1212
1213 ecore_sheap_order_set(heap, order);
1214 _ecore_list_first_goto(list);
1215 while ((data = _ecore_list_next(list)))
1216 {
1217 ecore_sheap_insert(heap, data);
1218 }
1219
1220 /*
1221 * Extract in sorted order.
1222 */
1223 node = list->first;
1224 while (node)
1225 {
1226 node->data = ecore_sheap_extract(heap);
1227 node = node->next;
1228 }
1229
1230 ecore_sheap_destroy(heap);
1231
1232 _ecore_list_first_goto(list);
1233 return 1;
1234}
1235
1236/* Initialize a node to starting values */
1237EAPI int
1238ecore_list_node_init(Ecore_List_Node *node)
1239{
1240 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
1241
1242 node->next = NULL;
1243 node->data = NULL;
1244
1245 return TRUE;
1246}
1247
1248/**
1249 @defgroup Ecore_Data_List_Node_Group List Node Functions
1250
1251 Functions that are used in the creation, maintenance and destruction of
1252 Ecore_List nodes.
1253 */
1254
1255/**
1256 * Allocates and initializes a new list node.
1257 * @return A new Ecore_List_Node on success, @c NULL otherwise.
1258 * @ingroup Ecore_Data_List_Node_Group
1259 */
1260EAPI Ecore_List_Node *
1261ecore_list_node_new()
1262{
1263 Ecore_List_Node *new_node;
1264
1265 new_node = malloc(sizeof(Ecore_List_Node));
1266
1267 if (!ecore_list_node_init(new_node))
1268 {
1269 FREE(new_node);
1270 return NULL;
1271 }
1272
1273 return new_node;
1274}
1275
1276/**
1277 * Calls the function to free the data and the node.
1278 * @param node Node to destroy.
1279 * @param free_func Function to call if @p node points to data to free.
1280 * @return @c TRUE.
1281 * @ingroup Ecore_Data_List_Node_Group
1282 */
1283EAPI int
1284ecore_list_node_destroy(Ecore_List_Node *node, Ecore_Free_Cb free_func)
1285{
1286 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
1287
1288 if (free_func && node->data)
1289 free_func(node->data);
1290
1291 FREE(node);
1292
1293 return TRUE;
1294}
1295
1296/**
1297 * @defgroup Ecore_Data_DList_Creation_Group Doubly Linked List Creation/Destruction Functions
1298 *
1299 * Functions used to create, initialize and destroy @c Ecore_DLists.
1300 */
1301
1302/**
1303 * Creates and initialises a new doubly linked list.
1304 * @return A new initialised doubly linked list on success, @c NULL
1305 * on failure.
1306 * @ingroup Ecore_Data_DList_Creation_Group
1307 */
1308EAPI Ecore_DList *
1309ecore_dlist_new()
1310{
1311 Ecore_DList *list = NULL;
1312
1313 list = (Ecore_DList *)malloc(sizeof(Ecore_DList));
1314 if (!list)
1315 return NULL;
1316
1317 if (!ecore_dlist_init(list))
1318 {
1319 IF_FREE(list);
1320 return NULL;
1321 }
1322
1323 return list;
1324}
1325
1326/**
1327 * Initialises a list to some sane starting values.
1328 * @param list The doubly linked list to initialise.
1329 * @return @c TRUE if successful, @c FALSE if an error occurs.
1330 * @ingroup Ecore_Data_DList_Creation_Group
1331 */
1332EAPI int
1333ecore_dlist_init(Ecore_DList *list)
1334{
1335 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1336
1337 memset(list, 0, sizeof(Ecore_DList));
1338
1339 return TRUE;
1340}
1341
1342/**
1343 * Frees a doubly linked list and all of its nodes.
1344 * @param list The doubly linked list to be freed.
1345 * @ingroup Ecore_Data_DList_Creation_Group
1346 */
1347EAPI void
1348ecore_dlist_destroy(Ecore_DList *list)
1349{
1350 void *data;
1351 CHECK_PARAM_POINTER("list", list);
1352
1353 while (list->first)
1354 {
1355 data = _ecore_dlist_first_remove(list);
1356 if (list->free_func)
1357 list->free_func(data);
1358 }
1359
1360 FREE(list);
1361}
1362
1363/**
1364 * Sets the function used for freeing data stored in a doubly linked list.
1365 * @param list The doubly linked list that will use this function when
1366 * nodes are destroyed.
1367 * @param free_func The function that will free the key data
1368 * @return @c TRUE on success, @c FALSE on failure.
1369 * @ingroup Ecore_Data_DList_Creation_Group
1370 */
1371EAPI int
1372ecore_dlist_free_cb_set(Ecore_DList *list, Ecore_Free_Cb free_func)
1373{
1374 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1375
1376 return ecore_list_free_cb_set(ECORE_LIST(list), free_func);
1377}
1378
1379/**
1380 * Returns whether there is anything in the given doubly linked list.
1381 * @param list The given doubly linked list.
1382 * @return @c TRUE if there are nodes, @c FALSE otherwise.
1383 */
1384EAPI int
1385ecore_dlist_empty_is(Ecore_DList *list)
1386{
1387 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1388
1389 return ecore_list_empty_is(ECORE_LIST(list));
1390}
1391
1392/**
1393 * Retrieves the index of the current node of the given doubly linked list.
1394 * @param list The given doubly linked list.
1395 * @return The index of the current node.
1396 */
1397EAPI inline int
1398ecore_dlist_index(Ecore_DList *list)
1399{
1400 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1401
1402 return ecore_list_index(ECORE_LIST(list));
1403}
1404
1405/**
1406 * @defgroup Ecore_Data_DList_Add_Item_Group Doubly Linked List Adding Functions
1407 *
1408 * Functions that are used to add nodes to an Ecore_DList.
1409 */
1410
1411/**
1412 * Appends data to the given doubly linked list.
1413 * @param list The given doubly linked list.
1414 * @param data The data to append.
1415 * @return @c TRUE if the data is successfully appended, @c FALSE otherwise.
1416 * @ingroup Ecore_Data_DList_Add_Item_Group
1417 */
1418EAPI int
1419ecore_dlist_append(Ecore_DList *list, void *data)
1420{
1421 int ret;
1422 Ecore_DList_Node *prev;
1423 Ecore_DList_Node *node;
1424
1425 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1426
1427 node = ecore_dlist_node_new();
1428 ECORE_LIST_NODE(node)->data = data;
1429
1430 prev = ECORE_DLIST_NODE(ECORE_LIST(list)->last);
1431 ret = _ecore_list_append_0(ECORE_LIST(list), ECORE_LIST_NODE(node));
1432 if (ret)
1433 node->previous = prev;
1434
1435 return ret;
1436}
1437
1438/**
1439 * Adds data to the very beginning of the given doubly linked list.
1440 * @param list The given doubly linked list.
1441 * @param data The data to prepend.
1442 * @return @c TRUE if the data is successfully prepended, @c FALSE otherwise.
1443 * @ingroup Ecore_Data_DList_Add_Item_Group
1444 */
1445EAPI int
1446ecore_dlist_prepend(Ecore_DList *list, void *data)
1447{
1448 int ret;
1449 Ecore_DList_Node *prev;
1450 Ecore_DList_Node *node;
1451
1452 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1453
1454 node = ecore_dlist_node_new();
1455 ECORE_LIST_NODE(node)->data = data;
1456
1457 prev = ECORE_DLIST_NODE(ECORE_LIST(list)->first);
1458 ret = _ecore_list_prepend_0(ECORE_LIST(list), ECORE_LIST_NODE(node));
1459 if (ret && prev)
1460 prev->previous = node;
1461
1462 return ret;
1463}
1464
1465/**
1466 * Inserts data at the current point in the given doubly linked list.
1467 * @param list The given doubly linked list.
1468 * @param data The data to be inserted.
1469 * @return @c TRUE on success, @c FALSE otherwise.
1470 * @ingroup Ecore_Data_DList_Add_Item_Group
1471 */
1472EAPI int
1473ecore_dlist_insert(Ecore_DList *list, void *data)
1474{
1475 int ret = TRUE;
1476 Ecore_DList_Node *prev;
1477 Ecore_DList_Node *node;
1478
1479 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1480
1481 /*
1482 * Identify and shortcut the end cases.
1483 */
1484 if (!ECORE_LIST(list)->current)
1485 return ecore_dlist_append(list, data);
1486
1487 if (ECORE_LIST(list)->current == ECORE_LIST(list)->first)
1488 return ecore_dlist_prepend(list, data);
1489
1490 node = ecore_dlist_node_new();
1491 ECORE_LIST_NODE(node)->data = data;
1492
1493 /* Setup the fields of the new node */
1494 ECORE_LIST_NODE(node)->next = ECORE_LIST(list)->current;
1495
1496 /* And hook the node into the list */
1497 prev = ECORE_DLIST_NODE(ECORE_LIST(list)->current)->previous;
1498 ECORE_LIST_NODE(prev)->next = ECORE_LIST_NODE(node);
1499 ECORE_DLIST_NODE(ECORE_LIST(list)->current)->previous = node;
1500 node->previous = prev;
1501
1502 /* Now move the current item to the inserted item */
1503 ECORE_LIST(list)->current = ECORE_LIST_NODE(node);
1504 ECORE_LIST(list)->nodes++;
1505
1506 return ret;
1507}
1508
1509/**
1510 * Appends a list to the given doubly linked list.
1511 * @param list The given doubly linked list.
1512 * @param append The list to append.
1513 * @return @c TRUE if the data is successfully appended, @c FALSE otherwise.
1514 * @ingroup Ecore_Data_DList_Add_Item_Group
1515 */
1516EAPI int
1517ecore_dlist_append_list(Ecore_DList *list, Ecore_DList *append)
1518{
1519 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1520 CHECK_PARAM_POINTER_RETURN("append", append, FALSE);
1521
1522 if (ecore_dlist_empty_is(append))
1523 return TRUE;
1524
1525 if (ecore_dlist_empty_is(list))
1526 {
1527 list->first = append->first;
1528 list->current = NULL;
1529 list->last = append->last;
1530 list->nodes = append->nodes;
1531 }
1532 else
1533 {
1534 list->last->next = append->first;
1535 ECORE_DLIST_NODE(append->first)->previous = ECORE_DLIST_NODE(list->last);
1536 list->last = append->last;
1537 list->nodes += append->nodes;
1538 }
1539
1540 ecore_dlist_init(append);
1541 return TRUE;
1542}
1543
1544/**
1545 * Adds a list to the very beginning of the given doubly linked list.
1546 * @param list The given doubly linked list.
1547 * @param prepend The list to prepend.
1548 * @return @c TRUE if the data is successfully prepended, @c FALSE otherwise.
1549 * @ingroup Ecore_Data_DList_Add_Item_Group
1550 */
1551EAPI int
1552ecore_dlist_prepend_list(Ecore_DList *list, Ecore_DList *prepend)
1553{
1554 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1555 CHECK_PARAM_POINTER_RETURN("prepend", prepend, FALSE);
1556
1557 if (ecore_dlist_empty_is(prepend))
1558 return TRUE;
1559
1560 if (ecore_dlist_empty_is(list))
1561 {
1562 list->first = prepend->first;
1563 list->current = NULL;
1564 list->last = prepend->last;
1565 list->nodes = prepend->nodes;
1566 }
1567 else
1568 {
1569 prepend->last->next = list->first;
1570 ECORE_DLIST_NODE(list->first)->previous = ECORE_DLIST_NODE(
1571 prepend->last);
1572 list->first = prepend->first;
1573 list->nodes += prepend->nodes;
1574 list->index += prepend->nodes;
1575 }
1576
1577 ecore_dlist_init(prepend);
1578 return TRUE;
1579}
1580
1581/**
1582 * @defgroup Ecore_Data_DList_Remove_Item_Group Doubly Linked List Removing Functions
1583 *
1584 * Functions that remove nodes from an @c Ecore_DList.
1585 */
1586
1587/**
1588 * Removes the current item from the given doubly linked list.
1589 * @param list The given doubly linked list.
1590 * @return A pointer to the removed data on success, @c NULL otherwise.
1591 * @ingroup Ecore_Data_DList_Remove_Item_Group
1592 */
1593EAPI void *
1594ecore_dlist_remove(Ecore_DList *list)
1595{
1596 void *ret;
1597 Ecore_List *l2 = ECORE_LIST(list);
1598 Ecore_DList_Node *node;
1599
1600 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1601
1602 if (l2->current)
1603 {
1604 node = ECORE_DLIST_NODE(list->current->next);
1605 if (node)
1606 node->previous = ECORE_DLIST_NODE(l2->current)->previous;
1607 }
1608
1609 ret = _ecore_list_remove_0(list);
1610
1611 return ret;
1612}
1613
1614/**
1615 * Removes the first item from the given doubly linked list.
1616 * @param list The given doubly linked list.
1617 * @return A pointer to the removed data on success, @c NULL on failure.
1618 * @ingroup Ecore_Data_DList_Remove_Item_Group
1619 */
1620EAPI void *
1621ecore_dlist_first_remove(Ecore_DList *list)
1622{
1623 void *ret;
1624
1625 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1626
1627 ret = _ecore_dlist_first_remove(list);
1628
1629 return ret;
1630}
1631
1632/**
1633 * Removes and frees the data at the current position in the given doubly
1634 * linked list.
1635 * @param list The given doubly linked list.
1636 * @return @c TRUE on success, @c FALSE otherwise.
1637 * @ingroup Ecore_Data_DList_Remove_Item_Group
1638 */
1639EAPI int
1640ecore_dlist_remove_destroy(Ecore_DList *list)
1641{
1642 void *data;
1643
1644 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1645
1646 data = ecore_dlist_remove(list);
1647 if (!data)
1648 return FALSE;
1649
1650 if (list->free_func)
1651 list->free_func(data);
1652
1653 return TRUE;
1654}
1655
1656static void *
1657_ecore_dlist_first_remove(Ecore_DList *list)
1658{
1659 void *ret;
1660
1661 if (!list)
1662 return NULL;
1663
1664 ret = _ecore_list_first_remove(list);
1665 if (ret && ECORE_LIST(list)->first)
1666 ECORE_DLIST_NODE(ECORE_LIST(list)->first)->previous = NULL;
1667
1668 return ret;
1669}
1670
1671/**
1672 * Removes the last item from the given doubly linked list.
1673 * @param list The given doubly linked list.
1674 * @return A pointer to the removed data on success, @c NULL otherwise.
1675 * @ingroup Ecore_Data_DList_Remove_Item_Group
1676 */
1677EAPI void *
1678ecore_dlist_last_remove(Ecore_DList *list)
1679{
1680 void *ret;
1681 Ecore_List_Node *node;
1682
1683 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1684
1685 if (ecore_list_empty_is(list))
1686 return NULL;
1687
1688 node = list->last;
1689 list->last = ECORE_LIST_NODE(ECORE_DLIST_NODE(node)->previous);
1690 if (list->last)
1691 list->last->next = NULL;
1692
1693 if (list->first == node)
1694 list->first = NULL;
1695
1696 if (list->current == node)
1697 list->current = NULL;
1698
1699 ret = node->data;
1700 ecore_list_node_destroy(node, NULL);
1701
1702 list->nodes--;
1703 if (list->index >= list->nodes)
1704 list->index--;
1705
1706 return ret;
1707}
1708
1709/**
1710 * Moves the current item to the index number in the given doubly linked list.
1711 * @param list The given doubly linked list.
1712 * @param idx The position to move the current item
1713 * @return The node at specified index on success, @c NULL on error.
1714 */
1715EAPI void *
1716ecore_dlist_index_goto(Ecore_DList *list, int idx)
1717{
1718 void *ret;
1719
1720 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1721
1722 ret = _ecore_dlist_index_goto(list, idx);
1723
1724 return ret;
1725}
1726
1727/* This is the non-threadsafe version, use this inside internal functions that
1728 * already lock the list */
1729static void *
1730_ecore_dlist_index_goto(Ecore_DList *list, int idx)
1731{
1732 int i, increment;
1733
1734 if (!list)
1735 return NULL;
1736
1737 if (ecore_list_empty_is(ECORE_LIST(list)))
1738 return NULL;
1739
1740 if (idx > ecore_list_count(ECORE_LIST(list)) || idx < 0)
1741 return NULL;
1742
1743 if (ECORE_LIST(list)->index >= ECORE_LIST(list)->nodes)
1744 _ecore_list_last_goto(ECORE_LIST(list));
1745
1746 if (idx < ECORE_LIST(list)->index)
1747 increment = -1;
1748 else
1749 increment = 1;
1750
1751 for (i = ECORE_LIST(list)->index; i != idx; i += increment)
1752 {
1753 if (increment > 0)
1754 _ecore_list_next(list);
1755 else
1756 _ecore_dlist_previous(list);
1757 }
1758
1759 return _ecore_list_current(list);
1760}
1761
1762/**
1763 * @brief Move the current item to the node that contains data
1764 * @param list: the list to move the current item in
1765 * @param data: the data to find and set the current item to
1766 *
1767 * @return Returns specified data on success, NULL on error
1768 */
1769EAPI void *
1770ecore_dlist_goto(Ecore_DList *list, void *data)
1771{
1772 void *ret;
1773
1774 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1775
1776 ret = _ecore_list_goto(ECORE_LIST(list), data);
1777
1778 return ret;
1779}
1780
1781/**
1782 * @brief Move the current pointer to the first item in the list
1783 * @param list: the list to change the current to the first item
1784 *
1785 * @return Returns a pointer to the first item on success, NULL on failure.
1786 */
1787EAPI void *
1788ecore_dlist_first_goto(Ecore_DList *list)
1789{
1790 void *ret;
1791
1792 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1793
1794 ret = _ecore_list_first_goto(list);
1795
1796 return ret;
1797}
1798
1799/**
1800 * @brief Move the pointer to the current item to the last item
1801 * @param list: the list to move the current item pointer to the last
1802 * @return Returns a pointer to the last item in the list , NULL if empty.
1803 */
1804EAPI void *
1805ecore_dlist_last_goto(Ecore_DList *list)
1806{
1807 void *ret;
1808
1809 CHECK_PARAM_POINTER_RETURN("list", list, NULL);
1810
1811 ret = _ecore_list_last_goto(ECORE_LIST(list));
1812
1813 return ret;
1814}
1815
1816/**
1817 * @brief Return the data in the current list item
1818 * @param list: the list to the return the current data
1819 * @return Returns value of the current data item, NULL if no current item
1820 */
1821EAPI void *
1822ecore_dlist_current(Ecore_DList *list)
1823{
1824 void *ret;
1825
1826 ret = _ecore_list_current(ECORE_LIST(list));
1827
1828 return ret;
1829}
1830
1831/**
1832 * @brief Move to the next item in the list and return current item
1833 * @param list: the list to move to the next item in.
1834 * @return Returns data in the current list node, or NULL on error
1835 */
1836EAPI void *
1837ecore_dlist_next(Ecore_DList *list)
1838{
1839 void *data;
1840
1841 data = _ecore_list_next(list);
1842
1843 return data;
1844}
1845
1846/**
1847 * @brief Move to the previous item and return current item
1848 * @param list: the list to move to the previous item in.
1849 * @return Returns data in the current list node, or NULL on error
1850 */
1851EAPI void *
1852ecore_dlist_previous(Ecore_DList *list)
1853{
1854 void *data;
1855
1856 data = _ecore_dlist_previous(list);
1857
1858 return data;
1859}
1860
1861static void *
1862_ecore_dlist_previous(Ecore_DList *list)
1863{
1864 void *data = NULL;
1865
1866 if (!list)
1867 return NULL;
1868
1869 if (ECORE_LIST(list)->current)
1870 {
1871 data = ECORE_LIST(list)->current->data;
1872 ECORE_LIST(list)->
1873 current = ECORE_LIST_NODE(ECORE_DLIST_NODE(
1874 ECORE_LIST(list)->
1875 current)->previous);
1876 ECORE_LIST(list)->index
1877 --;
1878 }
1879 else
1880 _ecore_list_last_goto(
1881 ECORE_LIST(list));
1882
1883 return data;
1884}
1885
1886/**
1887 * @brief Remove all nodes from the list.
1888 * @param list: the list to remove all nodes from
1889 *
1890 * @return Returns TRUE on success, FALSE on errors
1891 */
1892EAPI int
1893ecore_dlist_clear(Ecore_DList *list)
1894{
1895 CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
1896
1897 ecore_list_clear(ECORE_LIST(list));
1898
1899 return TRUE;
1900}
1901
1902/**
1903 * Sort data in @p list using the compare function @p compare
1904 * @param list The list.
1905 * @param compare The function to compare the data of @p list
1906 * @param order The sort direction, possible values are ECORE_SORT_MIN and
1907 * ECORE_SORT_MAX
1908 * @return true on success
1909 *
1910 * This is a wrapper function for mergesort and heapsort. It
1911 * tries to choose the fastest algorithm depending on the
1912 * number of notes. Note: The sort may be unstable.
1913 */
1914EAPI int
1915ecore_dlist_sort(Ecore_List *list, Ecore_Compare_Cb compare, char order)
1916{
1917 CHECK_PARAM_POINTER_RETURN("list", list, 0);
1918
1919 if (list->nodes < 2)
1920 return 1;
1921
1922 if (list->nodes < ECORE_MERGESORT_LIMIT)
1923 return ecore_dlist_mergesort(list, compare, order);
1924
1925 if (!ecore_dlist_heapsort(list, compare, order))
1926 return ecore_dlist_mergesort(list, compare, order);
1927
1928 return 1;
1929}
1930
1931/**
1932 * Sort data in @p list using the compare function @p compare
1933 * @param list The list.
1934 * @param compare The function to compare the data of @p list
1935 * @param order The sort direction, possible values are ECORE_SORT_MIN and
1936 * ECORE_SORT_MAX
1937 * @return true on success
1938 *
1939 * Mergesort is a stable, in-place sorting algorithm
1940 */
1941EAPI int
1942ecore_dlist_mergesort(Ecore_DList *list, Ecore_Compare_Cb compare, char order)
1943{
1944 Ecore_List_Node *node;
1945
1946 CHECK_PARAM_POINTER_RETURN("list", list, 0);
1947 if (list->nodes < 2)
1948 return 1;
1949
1950 if (order == ECORE_SORT_MIN)
1951 order = 1;
1952 else
1953 order = -1;
1954
1955 node = _ecore_dlist_node_mergesort(list->first, list->nodes, compare, order);
1956 list->first = node;
1957
1958 /* maybe there is a better way to do that but our last node has changed */
1959 while (node->next)
1960 node = node->next;
1961 list->last = node;
1962
1963 _ecore_list_first_goto(list);
1964
1965 return 1;
1966}
1967
1968/**
1969 * Merge the @p l2 into the @p list using the compare function @p compare.
1970 * Both lists need to be sorted else a corrupt list could be the result.
1971 * @param list The list.
1972 * @param l2 The second list, this list will be empty after the merge
1973 * @param compare The function to compare the data of @p list and @p l2
1974 * @param order The sort direction, possible values are ECORE_SORT_MIN and
1975 * ECORE_SORT_MAX
1976 */
1977EAPI void
1978ecore_dlist_merge(Ecore_DList *list,
1979 Ecore_DList *l2,
1980 Ecore_Compare_Cb compare,
1981 char order)
1982{
1983 CHECK_PARAM_POINTER("list", list);
1984 CHECK_PARAM_POINTER("l2", l2);
1985
1986 if (ecore_dlist_empty_is(l2))
1987 return;
1988
1989 if (ecore_dlist_empty_is(list))
1990 {
1991 ecore_dlist_append_list(list, l2);
1992 return;
1993 }
1994
1995 if (order == ECORE_SORT_MIN)
1996 order = 1;
1997 else
1998 order = -1;
1999
2000 list->first = _ecore_dlist_node_merge(list->first, l2->first, compare, order);
2001
2002 if ((order * compare(list->last->data, l2->last->data)) < 0)
2003 list->last = l2->last;
2004
2005 list->nodes += l2->nodes;
2006 ecore_dlist_init(l2);
2007}
2008
2009/* this is the internal recrusive function for the merge sort */
2010static Ecore_List_Node *
2011_ecore_dlist_node_mergesort(Ecore_List_Node *first, int n,
2012 Ecore_Compare_Cb compare, int order)
2013{
2014 Ecore_List_Node *middle;
2015 Ecore_List_Node *premid;
2016 int mid;
2017 int i;
2018
2019 mid = n / 2;
2020
2021 if (n < 2)
2022 return first;
2023 else if (n == 2)
2024 {
2025 if (compare(first->data, first->next->data) * order > 0)
2026 {
2027 /* swap the data */
2028 void *data;
2029 data = first->next->data;
2030 first->next->data = first->data;
2031 first->data = data;
2032 }
2033
2034 return first;
2035 }
2036
2037 /* first find the premiddle node*/
2038 for (premid = first, i = 0; i < mid - 1; i++)
2039 premid = premid->next;
2040
2041 /* split the list */
2042 middle = premid->next;
2043 premid->next = NULL;
2044 ECORE_DLIST_NODE(middle)->previous = NULL;
2045
2046 /* sort the the partial lists */
2047 first = _ecore_dlist_node_mergesort(first, mid, compare, order);
2048 middle = _ecore_dlist_node_mergesort(middle, n - mid, compare, order);
2049
2050 return _ecore_dlist_node_merge(first, middle, compare, order);
2051}
2052
2053/* this function is used to merge the partial sorted lists */
2054static Ecore_List_Node *
2055_ecore_dlist_node_merge(Ecore_List_Node *first, Ecore_List_Node *second,
2056 Ecore_Compare_Cb compare, int order)
2057{
2058 Ecore_List_Node *list;
2059 Ecore_List_Node *l;
2060
2061 /* select the first node outside the loop, because we need to keep
2062 * a pointer to it */
2063 if (compare(first->data, second->data) * order > 0)
2064 {
2065 list = l = second;
2066 second = second->next;
2067 }
2068 else
2069 {
2070 list = l = first;
2071 first = first->next;
2072 }
2073
2074 /* and now start the merging */
2075 while (first && second)
2076 {
2077 if (compare(first->data, second->data) * order > 0)
2078 {
2079 ECORE_DLIST_NODE(second)->previous = ECORE_DLIST_NODE(l);
2080 l = l->next = second;
2081 second = second->next;
2082 }
2083 else
2084 {
2085 ECORE_DLIST_NODE(first)->previous = ECORE_DLIST_NODE(l);
2086 l = l->next = first;
2087 first = first->next;
2088 }
2089 }
2090
2091 /* append the rest or set it to NULL */
2092 if (first)
2093 {
2094 ECORE_DLIST_NODE(first)->previous = ECORE_DLIST_NODE(l);
2095 l->next = first;
2096 }
2097 else if (second)
2098 {
2099 ECORE_DLIST_NODE(second)->previous = ECORE_DLIST_NODE(l);
2100 l->next = second;
2101 }
2102 else
2103 l->next = NULL;
2104
2105 return list;
2106}
2107
2108/*
2109 * @brief Initialize a node to sane starting values
2110 * @param node: the node to initialize
2111 * @return Returns TRUE on success, FALSE on errors
2112 */
2113EAPI int
2114ecore_dlist_node_init(Ecore_DList_Node *node)
2115{
2116 int ret;
2117
2118 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
2119
2120 ret = ecore_list_node_init(ECORE_LIST_NODE(node));
2121 if (ret)
2122 node->previous = NULL;
2123
2124 return ret;
2125}
2126
2127/*
2128 * @brief Allocate and initialize a new list node
2129 * @return Returns NULL on error, new list node on success
2130 */
2131EAPI Ecore_DList_Node *
2132ecore_dlist_node_new()
2133{
2134 Ecore_DList_Node *new_node;
2135
2136 new_node = malloc(sizeof(Ecore_DList_Node));
2137
2138 if (!new_node)
2139 return NULL;
2140
2141 if (!ecore_dlist_node_init(new_node))
2142 {
2143 FREE(new_node);
2144 return NULL;
2145 }
2146
2147 return new_node;
2148}
2149
2150/*
2151 * @brief Call the data's free callback function, then free the node
2152 * @param node: the node to be freed
2153 * @param free_func: the callback function to execute on the data
2154 * @return Returns TRUE on success, FALSE on error
2155 */
2156EAPI int
2157ecore_dlist_node_destroy(Ecore_DList_Node *node, Ecore_Free_Cb free_func)
2158{
2159 CHECK_PARAM_POINTER_RETURN("node", node, FALSE);
2160
2161 return ecore_list_node_destroy(ECORE_LIST_NODE(node), free_func);
2162}
diff --git a/libraries/eina/src/tests/ecore_sheap.c b/libraries/eina/src/tests/ecore_sheap.c
new file mode 100644
index 0000000..448be97
--- /dev/null
+++ b/libraries/eina/src/tests/ecore_sheap.c
@@ -0,0 +1,467 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Ecore_Data.h"
9
10#define HEAP_INCREMENT 4096
11
12#define PARENT(i) (i / 2)
13#define LEFT(i) (2 * i)
14#define RIGHT(i) (2 * i + 1)
15
16static void _ecore_sheap_heapify(Ecore_Sheap *heap, int i);
17static void _ecore_sheap_update_data(Ecore_Sheap *heap);
18
19/**
20 * Allocate and initialize a new binary heap
21 * @param compare The function for comparing keys, NULL for direct comparison
22 * @param size The number of elements to allow in the heap
23 * @return A pointer to the newly allocated binary heap on success, NULL on
24 * failure.
25 */
26EAPI Ecore_Sheap *
27ecore_sheap_new(Ecore_Compare_Cb compare, int size)
28{
29 Ecore_Sheap *heap = NULL;
30
31 heap = (Ecore_Sheap *)malloc(sizeof(Ecore_Sheap));
32 if (!heap)
33 return NULL;
34
35 memset(heap, 0, sizeof(Ecore_Sheap));
36
37 if (!ecore_sheap_init(heap, compare, size))
38 {
39 FREE(heap);
40 return NULL;
41 }
42
43 return heap;
44}
45
46/**
47 * Initialize a binary heap to default values
48 * @param heap The heap to initialize
49 * @param compare The function for comparing keys, NULL for direct comparison
50 * @param size The number of elements to allow in the heap
51 * @return TRUE on success, FALSE on failure
52 */
53EAPI int
54ecore_sheap_init(Ecore_Sheap *heap, Ecore_Compare_Cb compare, int size)
55{
56 CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
57
58 heap->space = size;
59 if (!compare)
60 heap->compare = ecore_direct_compare;
61 else
62 heap->compare = compare;
63
64 heap->order = ECORE_SORT_MIN;
65
66 heap->data = (void **)malloc(heap->space * sizeof(void *));
67 if (!heap->data)
68 return FALSE;
69
70 memset(heap->data, 0, heap->space * sizeof(void *));
71
72 return TRUE;
73}
74
75/**
76 * Free up the memory used by the heap
77 *
78 * Frees the memory used by @a heap, calls the destroy function on each data
79 * item if necessary.
80 *
81 * @param heap The heap to be freed
82 */
83EAPI void
84ecore_sheap_destroy(Ecore_Sheap *heap)
85{
86 int i;
87
88 CHECK_PARAM_POINTER("heap", heap);
89
90 /*
91 * Free data in heap
92 */
93 if (heap->free_func)
94 for (i = 0; i < heap->size; i++)
95 heap->free_func(heap->data[i]);
96
97 FREE(heap->data);
98
99 FREE(heap);
100}
101
102/**
103 * Set the function for freeing data.
104 * @param heap The heap that will use this function when nodes are
105 * destroyed.
106 * @param free_func The function that will free the key data.
107 * @return @c TRUE on successful set, @c FALSE otherwise.
108 */
109EAPI int
110ecore_sheap_free_cb_set(Ecore_Sheap *heap, Ecore_Free_Cb free_func)
111{
112 CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
113
114 heap->free_func = free_func;
115
116 return TRUE;
117}
118
119/**
120 * Insert new data into the heap.
121 * @param heap The heap to insert @a data.
122 * @param data The data to add to @a heap.
123 * @return TRUE on success, NULL on failure. Increases the size of the heap if
124 * it becomes larger than available space.
125 */
126EAPI int
127ecore_sheap_insert(Ecore_Sheap *heap, void *data)
128{
129 int i;
130 void *temp;
131 int parent;
132 int position;
133
134 CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
135
136 /*
137 * Increase the size of the allocated data area if there isn't enough
138 * space available to add this data
139 */
140 if (heap->size >= heap->space)
141 return FALSE;
142
143 heap->sorted = FALSE;
144
145 /*
146 * Place the data at the end of the heap initially. Then determine the
147 * parent and position in the array of it's parent.
148 */
149 heap->data[heap->size] = data;
150 position = heap->size;
151 heap->size++;
152 i = heap->size;
153 parent = PARENT(i) - 1;
154
155 /*
156 * Check the order of the heap to decide where to place the inserted
157 * data. The loop is placed inside the if statement to reduce the
158 * number of branching decisions that must be predicted.
159 */
160 if (heap->order == ECORE_SORT_MIN)
161 while ((position > 0) && heap->compare(heap->data[parent],
162 heap->data[position]) > 0)
163 {
164
165 /*
166 * Swap the data with it's parents to move it up in
167 * the heap.
168 */
169 temp = heap->data[position];
170 heap->data[position] = heap->data[parent];
171 heap->data[parent] = temp;
172
173 /*
174 * Now determine the new position for the next
175 * iteration of the loop, as well as it's parents
176 * position.
177 */
178 i = PARENT(i);
179 position = i - 1;
180 parent = PARENT(i) - 1;
181 }
182 else
183 while ((position > 0) && heap->compare(heap->data[parent],
184 heap->data[position]) < 0)
185 {
186
187 /*
188 * Swap the data with it's parents to move it up in
189 * the heap.
190 */
191 temp = heap->data[position];
192 heap->data[position] = heap->data[PARENT(i) - 1];
193 heap->data[PARENT(i) - 1] = temp;
194
195 /*
196 * Now determine the new position for the next
197 * iteration of the loop, as well as it's parents
198 * position.
199 */
200 i = PARENT(i);
201 position = i - 1;
202 parent = PARENT(i) - 1;
203 }
204
205 return TRUE;
206}
207
208/**
209 * Extract the item at the top of the heap
210 * @param heap The heap to remove the top item
211 * @return The top item of the heap on success, NULL on failure.
212 * @note The extract function maintains the heap properties after the
213 * extract.
214 */
215EAPI void *
216ecore_sheap_extract(Ecore_Sheap *heap)
217{
218 void *extreme;
219
220 if (heap->size < 1)
221 return NULL;
222
223 heap->sorted = FALSE;
224
225 extreme = heap->data[0];
226 heap->size--;
227 heap->data[0] = heap->data[heap->size];
228
229 _ecore_sheap_heapify(heap, 1);
230
231 return extreme;
232}
233
234/**
235 * Examine the item at the top of the heap
236 * @param heap The heap to examine the top item
237 * @return The top item of the heap on success, NULL on failure.
238 * @note The function does not alter the heap.
239 */
240EAPI void *
241ecore_sheap_extreme(Ecore_Sheap *heap)
242{
243 if (heap->size < 1)
244 return NULL;
245
246 return heap->data[0];
247}
248
249/**
250 * Change the value of the specified item in the heap
251 * @param heap The heap to search for the item to change
252 * @param item The item in the heap to change
253 * @param newval The new value assigned to the item in the heap
254 * @return TRUE on success, FALSE on failure.
255 * @note The heap does not free the old data since it must be passed
256 * in, so the caller can perform the free if desired.
257 */
258EAPI int
259ecore_sheap_change(Ecore_Sheap *heap, void *item, void *newval)
260{
261 int i;
262
263 CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
264
265 for (i = 0; i < heap->size && heap->compare(heap->data[i], item); i++) ;
266
267 if (i < heap->size)
268 heap->data[i] = newval;
269 else
270 return FALSE;
271
272 /*
273 * FIXME: This is not the correct procedure when a change occurs.
274 */
275 _ecore_sheap_heapify(heap, 1);
276
277 return TRUE;
278}
279
280/**
281 * Change the comparison function for the heap
282 * @param heap The heap to change comparison function
283 * @param compare The new function for comparing nodes
284 * @return TRUE on success, FALSE on failure.
285 *
286 * The comparison function is changed to @compare and the heap is heapified
287 * by the new comparison.
288 */
289EAPI int
290ecore_sheap_compare_set(Ecore_Sheap *heap, Ecore_Compare_Cb compare)
291{
292 CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
293
294 if (!compare)
295 heap->compare = ecore_direct_compare;
296 else
297 heap->compare = compare;
298
299 _ecore_sheap_update_data(heap);
300
301 return TRUE;
302}
303
304/**
305 * Change the order of the heap
306 * @param heap The heap to change the order
307 * @param order The new order of the heap
308 *
309 * Changes the heap order of @heap and re-heapifies the data to this new
310 * order. The default order is a min heap.
311 */
312EAPI void
313ecore_sheap_order_set(Ecore_Sheap *heap, char order)
314{
315 CHECK_PARAM_POINTER("heap", heap);
316
317 heap->order = order;
318
319 _ecore_sheap_update_data(heap);
320}
321
322/**
323 * Sort the data in the heap
324 * @param heap The heap to be sorted
325 *
326 * Sorts the data in the heap into the order that is used for the heap's
327 * data.
328 */
329EAPI void
330ecore_sheap_sort(Ecore_Sheap *heap)
331{
332 int i = 0;
333 void **new_data;
334
335 CHECK_PARAM_POINTER("heap", heap);
336
337 new_data = (void **)malloc(heap->size * sizeof(void *));
338
339 /*
340 * Extract the heap and insert into the new data array in order.
341 */
342 while (heap->size > 0)
343 new_data[i++] = ecore_sheap_extract(heap);
344
345 /*
346 * Free the old data array and update the heap with the new data, also
347 * mark as sorted.
348 */
349 FREE(heap->data);
350 heap->data = new_data;
351 heap->size = i;
352 heap->sorted = TRUE;
353}
354
355/*
356 * Access the item at the ith position in the heap
357 * @param heap The heap to access the internal data
358 * @param i The index of the data within the heap
359 * @return The data located at the ith position within @heap on success,
360 * NULL on failure.
361 * @note The data is guaranteed to be in sorted order.
362 */
363EAPI inline void *
364ecore_sheap_item(Ecore_Sheap *heap, int i)
365{
366 if (i >= heap->size)
367 return NULL;
368
369 /*
370 * Make sure the data is sorted so we return the correct value.
371 */
372 if (!heap->sorted)
373 ecore_sheap_sort(heap);
374
375 return heap->data[i];
376}
377
378/*
379 * Regain the heap properties starting at position i
380 * @param heap The heap to regain heap properties
381 * @param i The position to start heapifying
382 */
383static void
384_ecore_sheap_heapify(Ecore_Sheap *heap, int i)
385{
386 int extreme;
387 int left = LEFT(i);
388 int right = RIGHT(i);
389
390 if (heap->order == ECORE_SORT_MIN)
391 {
392 if (left <= heap->size && heap->compare(heap->data[left - 1],
393 heap->data[i - 1]) < 0)
394 extreme = left;
395 else
396 extreme = i;
397
398 if (right <= heap->size && heap->compare(heap->data[right - 1],
399 heap->data[extreme - 1]) < 0)
400 extreme = right;
401 }
402 else
403 {
404 if (left <= heap->size && heap->compare(heap->data[left - 1],
405 heap->data[i - 1]) > 0)
406 extreme = left;
407 else
408 extreme = i;
409
410 if (right <= heap->size && heap->compare(heap->data[right - 1],
411 heap->data[extreme - 1]) > 0)
412 extreme = right;
413 }
414
415 /*
416 * If the data needs to be swapped down the heap, recurse on
417 * heapifying it's new placement.
418 */
419 if (extreme != i)
420 {
421 void *temp;
422
423 temp = heap->data[extreme - 1];
424 heap->data[extreme - 1] = heap->data[i - 1];
425 heap->data[i - 1] = temp;
426
427 _ecore_sheap_heapify(heap, extreme);
428 }
429}
430
431static void
432_ecore_sheap_update_data(Ecore_Sheap *heap)
433{
434 int i, old_size;
435 void **data;
436
437 /*
438 * Track the old values from the heap
439 */
440 old_size = heap->size;
441 data = heap->data;
442
443 heap->size = 0;
444 heap->data = malloc(heap->space * sizeof(void *));
445
446 for (i = 0; i < old_size; i++)
447 ecore_sheap_insert(heap, data[i]);
448
449 FREE(data);
450}
451
452int
453ecore_direct_compare(const void *key1, const void *key2)
454{
455 unsigned long k1, k2;
456
457 k1 = (unsigned long)key1;
458 k2 = (unsigned long)key2;
459
460 if (k1 > k2)
461 return 1;
462
463 if (k1 < k2)
464 return -1;
465
466 return 0;
467}
diff --git a/libraries/eina/src/tests/ecore_strings.c b/libraries/eina/src/tests/ecore_strings.c
new file mode 100644
index 0000000..d76e4c5
--- /dev/null
+++ b/libraries/eina/src/tests/ecore_strings.c
@@ -0,0 +1,160 @@
1#include <stdlib.h>
2#include <string.h>
3
4#include "Ecore_Data.h"
5
6static void ecore_string_free_cb(void *data);
7
8static Ecore_Hash *ecore_strings = NULL;
9static int ecore_string_init_count = 0;
10
11/**
12 * @defgroup Ecore_String_Group String Instance Functions
13 *
14 * These functions allow you to store one copy of a string, and use it
15 * throughout your program.
16 *
17 * This is a method to reduce the number of duplicated strings kept in
18 * memory. It's pretty common for the same strings to be dynamically
19 * allocated repeatedly between applications and libraries, especially in
20 * circumstances where you could have multiple copies of a structure that
21 * allocates the string. So rather than duplicating and freeing these
22 * strings, you request a read-only pointer to an existing string and
23 * only incur the overhead of a hash lookup.
24 *
25 * It sounds like micro-optimizing, but profiling has shown this can have
26 * a significant impact as you scale the number of copies up. It improves
27 * string creation/destruction speed, reduces memory use and decreases
28 * memory fragmentation, so a win all-around.
29 */
30
31/**
32 * Initialize the ecore string internal structure.
33 * @return Zero on failure, non-zero on successful initialization.
34 */
35EAPI int
36ecore_string_init()
37{
38 /*
39 * No strings have been loaded at this point, so create the hash
40 * table for storing string info for later.
41 */
42 if (!ecore_string_init_count)
43 {
44 ecore_strings = ecore_hash_new(ecore_str_hash, ecore_str_compare);
45 if (!ecore_strings)
46 return 0;
47
48 ecore_hash_free_value_cb_set(ecore_strings, ecore_string_free_cb);
49 }
50
51 ecore_string_init_count++;
52
53 return 1;
54}
55
56/**
57 * Retrieves an instance of a string for use in an ecore program.
58 * @param string The string to retrieve an instance of.
59 * @return A pointer to an instance of the string on success.
60 * @c NULL on failure.
61 * @ingroup Ecore_String_Group
62 */
63EAPI const char *
64ecore_string_instance(const char *string)
65{
66 Ecore_String *str;
67
68 CHECK_PARAM_POINTER_RETURN("string", string, NULL);
69
70 /*
71 * Check for a previous instance of the string, if not found, create
72 * it.
73 */
74 str = ecore_hash_get(ecore_strings, string);
75 if (!str)
76 {
77 int length;
78
79 /*
80 * Allocate and initialize a new string reference.
81 */
82 length = strlen(string) + 1;
83
84 str =
85 (Ecore_String *)malloc(sizeof(Ecore_String) + length * sizeof(char));
86
87 str->string = (char *)(str + 1);
88 str->references = 0;
89
90 memcpy(str->string, string, length);
91
92 ecore_hash_set(ecore_strings, str->string, str);
93 }
94
95 str->references++;
96
97 return str->string;
98}
99
100/**
101 * Notes that the given string has lost an instance.
102 *
103 * It will free the string if no other instances are left.
104 *
105 * @param string The given string.
106 * @ingroup Ecore_String_Group
107 */
108EAPI void
109ecore_string_release(const char *string)
110{
111 Ecore_String *str;
112
113 CHECK_PARAM_POINTER("string", string);
114
115 str = ecore_hash_get(ecore_strings, (char *)string);
116 if (!str)
117 return;
118
119 str->references--;
120 if (str->references < 1)
121 {
122 ecore_hash_remove(ecore_strings, (char *)string);
123 FREE(str);
124 }
125}
126
127EAPI void
128ecore_string_hash_dump_graph(void)
129{
130 ecore_hash_dump_graph(ecore_strings);
131}
132
133EAPI void
134ecore_string_hash_dump_stats(void)
135{
136 ecore_hash_dump_stats(ecore_strings);
137}
138
139/**
140 * Shutdown the ecore string internal structures
141 */
142EAPI void
143ecore_string_shutdown()
144{
145 --ecore_string_init_count;
146 if (!ecore_string_init_count)
147 {
148 ecore_hash_destroy(ecore_strings);
149 ecore_strings = NULL;
150 }
151}
152
153static void
154ecore_string_free_cb(void *data)
155{
156 Ecore_String *str;
157
158 str = data;
159 FREE(str);
160}
diff --git a/libraries/eina/src/tests/eina_bench.c b/libraries/eina/src/tests/eina_bench.c
new file mode 100644
index 0000000..a4eadbe
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench.c
@@ -0,0 +1,105 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <limits.h>
26
27#include "eina_bench.h"
28#include "Eina.h"
29
30typedef struct _Eina_Benchmark_Case Eina_Benchmark_Case;
31struct _Eina_Benchmark_Case
32{
33 const char *bench_case;
34 void (*build)(Eina_Benchmark *bench);
35};
36
37static const Eina_Benchmark_Case etc[] = {
38 { "Hash", eina_bench_hash },
39 /* { "Array vs List vs Inlist", eina_bench_array }, */
40 /* { "Stringshare", eina_bench_stringshare }, */
41 /* { "Convert", eina_bench_convert }, */
42 /* { "Sort", eina_bench_sort }, */
43 /* { "Mempool", eina_bench_mempool }, */
44 /* { "Rectangle_Pool", eina_bench_rectangle_pool }, */
45 // { "Render Loop", eina_bench_quadtree },
46 { NULL, NULL }
47};
48
49/* FIXME this is a copy from eina_test_mempool
50 * we should remove the duplication
51 */
52static Eina_Array *_modules;
53static void _mempool_init(void)
54{
55 eina_init();
56 /* force modules to be loaded in case they are not installed */
57 _modules = eina_module_list_get(NULL,
58 PACKAGE_BUILD_DIR "/src/modules",
59 EINA_TRUE,
60 NULL,
61 NULL);
62 eina_module_list_load(_modules);
63}
64
65static void _mempool_shutdown(void)
66{
67 eina_module_list_free(_modules);
68 /* TODO delete the list */
69 eina_shutdown();
70}
71
72int
73main(int argc, char **argv)
74{
75 Eina_Benchmark *test;
76 Eina_Array *ea;
77 unsigned int i;
78
79 if (argc != 2)
80 return -1;
81
82 _mempool_init();
83
84 eina_init();
85
86 for (i = 0; etc[i].bench_case; ++i)
87 {
88 test = eina_benchmark_new(etc[i].bench_case, argv[1]);
89 if (!test)
90 continue;
91
92 etc[i].build(test);
93
94 ea = eina_benchmark_run(test);
95
96 eina_benchmark_free(test);
97 }
98
99 eina_bench_e17();
100
101 eina_shutdown();
102
103 _mempool_shutdown();
104 return 0;
105}
diff --git a/libraries/eina/src/tests/eina_bench.h b/libraries/eina/src/tests/eina_bench.h
new file mode 100644
index 0000000..d575822
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench.h
@@ -0,0 +1,36 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_BENCH_H_
20#define EINA_BENCH_H_
21
22#include "eina_benchmark.h"
23
24void eina_bench_hash(Eina_Benchmark *bench);
25void eina_bench_array(Eina_Benchmark *bench);
26void eina_bench_stringshare(Eina_Benchmark *bench);
27void eina_bench_convert(Eina_Benchmark *bench);
28void eina_bench_sort(Eina_Benchmark *bench);
29void eina_bench_mempool(Eina_Benchmark *bench);
30void eina_bench_rectangle_pool(Eina_Benchmark *bench);
31void eina_bench_quadtree(Eina_Benchmark *bench);
32
33/* Specific benchmark. */
34void eina_bench_e17(void);
35
36#endif
diff --git a/libraries/eina/src/tests/eina_bench_array.c b/libraries/eina/src/tests/eina_bench_array.c
new file mode 100644
index 0000000..425eddd
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_array.c
@@ -0,0 +1,699 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <time.h>
26
27#ifdef EINA_BENCH_HAVE_GLIB
28# include <glib.h>
29#endif
30
31#include "Evas_Data.h"
32#include "Ecore_Data.h"
33
34#include "eina_bench.h"
35#include "eina_array.h"
36#include "eina_list.h"
37#include "eina_inlist.h"
38#include "eina_main.h"
39
40typedef struct _Eina_Bench_Object Eina_Bench_Object;
41struct _Eina_Bench_Object
42{
43 EINA_INLIST;
44
45 void *somewhere;
46 int data;
47 Eina_Bool keep;
48};
49
50static Eina_Bool keep(void *data, __UNUSED__ void *gdata)
51{
52 Eina_Bench_Object *bo = data;
53
54 if (bo->keep == EINA_TRUE)
55 return EINA_TRUE;
56
57 free(bo);
58 return EINA_FALSE;
59}
60
61static void
62eina_bench_array_4evas_render_inline(int request)
63{
64 Eina_Array *array;
65 Eina_Bench_Object *ebo;
66 Eina_Array_Iterator it;
67 unsigned int i;
68 unsigned int j;
69
70 srand(time(NULL));
71
72 eina_init();
73
74 array = eina_array_new(64);
75
76 for (i = 0; i < 1000; ++i)
77 {
78 for (j = 0; j < (unsigned int)request; ++j)
79 {
80 ebo = malloc(sizeof (Eina_Bench_Object));
81 if (!ebo)
82 continue;
83
84 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
85
86 eina_array_push(array, ebo);
87 }
88
89 if (i == 500)
90 {
91 EINA_ARRAY_ITER_NEXT(array, j, ebo, it)
92 free(ebo);
93
94 eina_array_clean(array);
95 }
96 else if (i % 30 == 0)
97 eina_array_remove(array, keep, NULL);
98
99 EINA_ARRAY_ITER_NEXT(array, j, ebo, it)
100 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
101 }
102
103 EINA_ARRAY_ITER_NEXT(array, j, ebo, it)
104 free(ebo);
105
106 eina_array_free(array);
107
108 eina_shutdown();
109}
110
111static Eina_Bool
112eina_iterator_ebo_free(__UNUSED__ const Eina_Array *array,
113 Eina_Bench_Object *ebo, __UNUSED__ void *fdata)
114{
115 free(ebo);
116 return EINA_TRUE;
117}
118
119static Eina_Bool
120eina_iterator_ebo_rand(__UNUSED__ const void *container,
121 Eina_Bench_Object *ebo, __UNUSED__ void *fdata)
122{
123 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
124 return EINA_TRUE;
125}
126
127static void
128eina_bench_array_4evas_render_iterator(int request)
129{
130 Eina_Array *array;
131 Eina_Bench_Object *ebo;
132 Eina_Iterator *it;
133 unsigned int i;
134 unsigned int j;
135
136 srand(time(NULL));
137
138 eina_init();
139
140 array = eina_array_new(64);
141
142 for (i = 0; i < 1000; ++i)
143 {
144 for (j = 0; j < (unsigned int)request; ++j)
145 {
146 ebo = malloc(sizeof (Eina_Bench_Object));
147 if (!ebo)
148 continue;
149
150 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
151
152 eina_array_push(array, ebo);
153 }
154
155 if (i == 500)
156 {
157 it = eina_array_iterator_new(array);
158 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_free), NULL);
159 eina_iterator_free(it);
160
161 eina_array_clean(array);
162 }
163 else if (i % 30 == 0)
164 eina_array_remove(array, keep, NULL);
165
166 it = eina_array_iterator_new(array);
167 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_rand), NULL);
168 eina_iterator_free(it);
169 }
170
171 it = eina_array_iterator_new(array);
172 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_free), NULL);
173 eina_iterator_free(it);
174
175 eina_array_free(array);
176
177 eina_shutdown();
178}
179
180static void
181eina_bench_list_4evas_render(int request)
182{
183 Eina_List *list = NULL;
184 Eina_List *tmp;
185 Eina_Bench_Object *ebo;
186 int i;
187 int j;
188
189 eina_init();
190
191 for (i = 0; i < 1000; ++i)
192 {
193 for (j = 0; j < request; ++j)
194 {
195 ebo = malloc(sizeof (Eina_Bench_Object));
196 if (!ebo)
197 continue;
198
199 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
200
201 list = eina_list_prepend(list, ebo);
202 }
203
204 if (i == 500)
205 while (list)
206 {
207 free(eina_list_data_get(list));
208 list = eina_list_remove_list(list, list);
209 }
210 else if (i % 30 == 0)
211 {
212 tmp = list;
213 while (tmp)
214 {
215 Eina_List *reminder = tmp;
216
217 ebo = eina_list_data_get(reminder);
218 tmp = eina_list_next(tmp);
219
220 if (ebo->keep == EINA_FALSE)
221 {
222 list = eina_list_remove_list(list, reminder);
223 free(ebo);
224 }
225 }
226 }
227
228 for (tmp = list; tmp; tmp = eina_list_next(tmp))
229 {
230 ebo = eina_list_data_get(tmp);
231
232 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
233 }
234 }
235
236 while (list)
237 {
238 free(eina_list_data_get(list));
239 list = eina_list_remove_list(list, list);
240 }
241
242 eina_shutdown();
243}
244
245static void
246eina_bench_list_4evas_render_iterator(int request)
247{
248 Eina_List *list = NULL;
249 Eina_List *tmp;
250 Eina_Bench_Object *ebo;
251 Eina_Iterator *it;
252 int i;
253 int j;
254
255 eina_init();
256
257 for (i = 0; i < 1000; ++i)
258 {
259 for (j = 0; j < request; ++j)
260 {
261 ebo = malloc(sizeof (Eina_Bench_Object));
262 if (!ebo)
263 continue;
264
265 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
266
267 list = eina_list_prepend(list, ebo);
268 }
269
270 if (i == 500)
271 while (list)
272 {
273 free(eina_list_data_get(list));
274 list = eina_list_remove_list(list, list);
275 }
276 else if (i % 30 == 0)
277 {
278 tmp = list;
279 while (tmp)
280 {
281 Eina_List *reminder = tmp;
282
283 ebo = eina_list_data_get(reminder);
284 tmp = eina_list_next(tmp);
285
286 if (ebo->keep == EINA_FALSE)
287 {
288 list = eina_list_remove_list(list, reminder);
289 free(ebo);
290 }
291 }
292 }
293
294 it = eina_list_iterator_new(list);
295 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_rand), NULL);
296 eina_iterator_free(it);
297 }
298
299 while (list)
300 {
301 free(eina_list_data_get(list));
302 list = eina_list_remove_list(list, list);
303 }
304
305 eina_shutdown();
306}
307
308static void
309eina_bench_inlist_4evas_render(int request)
310{
311 Eina_Inlist *head = NULL;
312 Eina_Inlist *tmp;
313 Eina_Bench_Object *ebo;
314 int i;
315 int j;
316
317 for (i = 0; i < 1000; ++i)
318 {
319 for (j = 0; j < request; ++j)
320 {
321 ebo = malloc(sizeof (Eina_Bench_Object));
322 if (!ebo)
323 continue;
324
325 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
326
327 head = eina_inlist_prepend(head, EINA_INLIST_GET(ebo));
328 }
329
330 if (i == 500)
331 while (head)
332 {
333 tmp = head;
334 head = head->next;
335 free(tmp);
336 }
337 else if (i % 30 == 0)
338 {
339 tmp = head;
340 while(tmp)
341 {
342 ebo = (Eina_Bench_Object *)tmp;
343
344 tmp = tmp->next;
345 if (ebo->keep == EINA_FALSE)
346 {
347 head = eina_inlist_remove(head, EINA_INLIST_GET(ebo));
348 free(ebo);
349 }
350 }
351 }
352
353 EINA_INLIST_FOREACH(head, ebo)
354 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
355 }
356
357 while (head)
358 {
359 tmp = head;
360 head = head->next;
361 free(tmp);
362 }
363}
364
365static void
366eina_bench_inlist_4evas_render_iterator(int request)
367{
368 Eina_Inlist *head = NULL;
369 Eina_Inlist *tmp;
370 Eina_Bench_Object *ebo;
371 Eina_Iterator *it;
372 int i;
373 int j;
374
375 for (i = 0; i < 1000; ++i)
376 {
377 for (j = 0; j < request; ++j)
378 {
379 ebo = malloc(sizeof (Eina_Bench_Object));
380 if (!ebo)
381 continue;
382
383 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
384
385 head = eina_inlist_prepend(head, EINA_INLIST_GET(ebo));
386 }
387
388 if (i == 500)
389 while (head)
390 {
391 tmp = head;
392 head = head->next;
393 free(tmp);
394 }
395 else if (i % 30 == 0)
396 {
397 tmp = head;
398 while(tmp)
399 {
400 ebo = (Eina_Bench_Object *)tmp;
401
402 tmp = tmp->next;
403 if (ebo->keep == EINA_FALSE)
404 {
405 head = eina_inlist_remove(head, EINA_INLIST_GET(ebo));
406 free(ebo);
407 }
408 }
409 }
410
411 it = eina_inlist_iterator_new(head);
412 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_ebo_rand), NULL);
413 eina_iterator_free(it);
414 }
415
416 while (head)
417 {
418 tmp = head;
419 head = head->next;
420 free(tmp);
421 }
422}
423
424#ifdef EINA_BENCH_HAVE_GLIB
425static void
426eina_bench_glist_4evas_render(int request)
427{
428 GList *list = NULL;
429 GList *tmp;
430 Eina_Bench_Object *ebo;
431 int i;
432 int j;
433
434 for (i = 0; i < 1000; ++i)
435 {
436 for (j = 0; j < request; ++j)
437 {
438 ebo = malloc(sizeof (Eina_Bench_Object));
439 if (!ebo)
440 continue;
441
442 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
443
444 list = g_list_prepend(list, ebo);
445 }
446
447 if (i == 500)
448 while (list)
449 {
450 free(list->data);
451 list = g_list_delete_link(list, list);
452 }
453 else if (i % 30 == 0)
454 {
455 tmp = list;
456 while (tmp)
457 {
458 GList *reminder = tmp;
459
460 ebo = reminder->data;
461 tmp = g_list_next(tmp);
462
463 if (ebo->keep == EINA_FALSE)
464 {
465 list = g_list_delete_link(list, reminder);
466 free(ebo);
467 }
468 }
469 }
470
471 for (tmp = list; tmp; tmp = g_list_next(tmp))
472 {
473 ebo = tmp->data;
474
475 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
476 }
477 }
478
479 while (list)
480 {
481 free(list->data);
482 list = g_list_delete_link(list, list);
483 }
484}
485
486static void
487eina_bench_gptrarray_4evas_render(int request)
488{
489 GPtrArray *array = NULL;
490 Eina_Bench_Object *ebo;
491 unsigned int j;
492 int i;
493
494 array = g_ptr_array_new();
495
496 for (i = 0; i < 1000; ++i)
497 {
498 for (j = 0; j < (unsigned int)request; ++j)
499 {
500 ebo = malloc(sizeof (Eina_Bench_Object));
501 if (!ebo)
502 continue;
503
504 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
505
506 g_ptr_array_add(array, ebo);
507 }
508
509 if (i == 500)
510 {
511 for (j = 0; j < array->len; ++j)
512 free(g_ptr_array_index(array, j));
513 g_ptr_array_remove_range(array, 0, array->len);
514 }
515 else if (i % 30 == 0)
516 for (j = 0; j < array->len; )
517 {
518 ebo = g_ptr_array_index(array, j);
519
520 if (ebo->keep == EINA_FALSE)
521 free(g_ptr_array_remove_index_fast(array, j));
522 else
523 j++;
524 }
525
526 for (j = 0; j < array->len; ++j)
527 {
528 ebo = g_ptr_array_index(array, j);
529
530 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
531 }
532 }
533
534 for (j = 0; j < array->len; ++j)
535 free(g_ptr_array_index(array, j));
536 g_ptr_array_free(array, TRUE);
537}
538#endif
539
540static void
541eina_bench_evas_list_4evas_render(int request)
542{
543 Evas_List *list = NULL;
544 Evas_List *tmp;
545 Eina_Bench_Object *ebo;
546 int i;
547 int j;
548
549 for (i = 0; i < 1000; ++i)
550 {
551 for (j = 0; j < request; ++j)
552 {
553 ebo = malloc(sizeof (Eina_Bench_Object));
554 if (!ebo)
555 continue;
556
557 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
558
559 list = evas_list_prepend(list, ebo);
560 }
561
562 if (i == 500)
563 while (list)
564 {
565 free(evas_list_data(list));
566 list = evas_list_remove_list(list, list);
567 }
568 else if (i % 30 == 0)
569 {
570 tmp = list;
571 while (tmp)
572 {
573 Evas_List *reminder = tmp;
574
575 ebo = evas_list_data(reminder);
576 tmp = evas_list_next(tmp);
577
578 if (ebo->keep == EINA_FALSE)
579 {
580 list = evas_list_remove_list(list, reminder);
581 free(ebo);
582 }
583 }
584 }
585
586 for (tmp = list; tmp; tmp = evas_list_next(tmp))
587 {
588 ebo = evas_list_data(tmp);
589
590 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
591 }
592 }
593
594 while (list)
595 {
596 free(evas_list_data(list));
597 list = evas_list_remove_list(list, list);
598 }
599}
600
601static void
602_eina_ecore_for_each_remove(void *value, void *user_data)
603{
604 Eina_Bench_Object *ebo = value;
605 Ecore_List *list = user_data;
606
607 if (ebo->keep == EINA_FALSE)
608 ecore_list_remove_destroy(list);
609}
610
611static void
612_eina_ecore_for_each_rand(void *value, __UNUSED__ void *user_data)
613{
614 Eina_Bench_Object *ebo = value;
615
616 ebo->keep = rand() < (RAND_MAX / 2) ? ebo->keep : EINA_FALSE;
617}
618
619static void
620eina_bench_ecore_list_4evas_render(int request)
621{
622 Ecore_List *list = NULL;
623 Eina_Bench_Object *ebo;
624 int i;
625 int j;
626
627 list = ecore_list_new();
628 ecore_list_free_cb_set(list, free);
629
630 for (i = 0; i < 1000; ++i)
631 {
632 for (j = 0; j < request; ++j)
633 {
634 ebo = malloc(sizeof (Eina_Bench_Object));
635 if (!ebo)
636 continue;
637
638 ebo->keep = rand() < (RAND_MAX / 2) ? EINA_TRUE : EINA_FALSE;
639
640 ecore_list_prepend(list, ebo);
641 }
642
643 if (i == 500)
644 ecore_list_clear(list);
645 else if (i % 30 == 0)
646 ecore_list_for_each(list, _eina_ecore_for_each_remove, list);
647
648 ecore_list_for_each(list, _eina_ecore_for_each_rand, list);
649 }
650
651 ecore_list_destroy(list);
652}
653
654void eina_bench_array(Eina_Benchmark *bench)
655{
656 eina_benchmark_register(bench, "array-inline",
657 EINA_BENCHMARK(
658 eina_bench_array_4evas_render_inline), 200,
659 4000, 100);
660 eina_benchmark_register(bench, "array-iterator",
661 EINA_BENCHMARK(
662 eina_bench_array_4evas_render_iterator), 200,
663 4000, 100);
664 eina_benchmark_register(bench, "list",
665 EINA_BENCHMARK(
666 eina_bench_list_4evas_render), 200,
667 4000, 100);
668 eina_benchmark_register(bench, "list-iterator",
669 EINA_BENCHMARK(
670 eina_bench_list_4evas_render_iterator), 200,
671 4000, 100);
672 eina_benchmark_register(bench, "inlist",
673 EINA_BENCHMARK(
674 eina_bench_inlist_4evas_render), 200,
675 4000, 100);
676 eina_benchmark_register(bench, "inlist-iterator",
677 EINA_BENCHMARK(
678 eina_bench_inlist_4evas_render_iterator), 200,
679 4000, 100);
680#ifdef EINA_BENCH_HAVE_GLIB
681 eina_benchmark_register(bench, "glist",
682 EINA_BENCHMARK(
683 eina_bench_glist_4evas_render), 200,
684 4000, 100);
685 eina_benchmark_register(bench, "gptrarray",
686 EINA_BENCHMARK(
687 eina_bench_gptrarray_4evas_render), 200,
688 4000, 100);
689#endif
690 eina_benchmark_register(bench, "evas",
691 EINA_BENCHMARK(
692 eina_bench_evas_list_4evas_render), 200,
693 4000, 100);
694 eina_benchmark_register(bench, "ecore",
695 EINA_BENCHMARK(
696 eina_bench_ecore_list_4evas_render), 200,
697 500, 100);
698}
699
diff --git a/libraries/eina/src/tests/eina_bench_convert.c b/libraries/eina/src/tests/eina_bench_convert.c
new file mode 100644
index 0000000..aafe9ea
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_convert.c
@@ -0,0 +1,183 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <time.h>
26#include <math.h>
27
28#ifdef EINA_BENCH_HAVE_GLIB
29# include <glib.h>
30#endif
31
32#include "eina_bench.h"
33#include "eina_convert.h"
34
35static void
36eina_bench_convert_itoa_10(int request)
37{
38 char tmp[128];
39 int i;
40
41 srand(time(NULL));
42
43 for (i = 0; i < request; ++i)
44 {
45 eina_convert_itoa(rand(), tmp);
46 }
47}
48
49static void
50eina_bench_convert_itoa_16(int request)
51{
52 char tmp[128];
53 int i;
54
55 srand(time(NULL));
56
57 for (i = 0; i < request; ++i)
58 {
59 eina_convert_xtoa(rand(), tmp);
60 }
61}
62
63static void
64eina_bench_convert_snprintf_10(int request)
65{
66 char tmp[128];
67 int i;
68
69 srand(time(NULL));
70
71 for (i = 0; i < request; ++i)
72 {
73 snprintf(tmp, 128, "%i", rand());
74 }
75}
76
77static void
78eina_bench_convert_snprintf_x(int request)
79{
80 char tmp[128];
81 int i;
82
83 srand(time(NULL));
84
85 for (i = 0; i < request; ++i)
86 {
87 snprintf(tmp, 128, "%x", rand());
88 }
89}
90
91static void
92eina_bench_convert_snprintf_a(int request)
93{
94 char tmp[128];
95 double r;
96 int i;
97
98 srand(time(NULL));
99
100 for (i = 0; i < request; ++i)
101 {
102 r = 10000 * (rand() / ((double)RAND_MAX + 1));
103 snprintf(tmp, 128, "%a", r);
104 sscanf(tmp, "%la", &r);
105 }
106}
107
108static void
109eina_bench_convert_dtoa(int request)
110{
111 char tmp[128];
112 long long m;
113 long e;
114 double r;
115 int i;
116
117 srand(time(NULL));
118
119 for (i = 0; i < request; ++i)
120 {
121 r = 10000 * (rand() / ((double)RAND_MAX + 1));
122 eina_convert_dtoa(r, tmp);
123 eina_convert_atod(tmp, 128, &m, &e);
124 r = ldexp((double)m, e);
125 }
126}
127
128#ifdef EINA_BENCH_HAVE_GLIB
129static void
130eina_bench_convert_gstrtod(int request)
131{
132 char tmp[128];
133 double r;
134 int i;
135
136 srand(time(NULL));
137
138 for (i = 0; i < request; ++i)
139 {
140 r = 10000 * (rand() / ((double)RAND_MAX + 1));
141 g_ascii_dtostr(tmp, 128, r);
142 r = g_ascii_strtod(tmp, NULL);
143 }
144}
145#endif
146
147void eina_bench_convert(Eina_Benchmark *bench)
148{
149 eina_benchmark_register(bench, "itoa 10",
150 EINA_BENCHMARK(
151 eina_bench_convert_itoa_10), 1000, 200000,
152 500);
153 eina_benchmark_register(bench, "itoa 16",
154 EINA_BENCHMARK(
155 eina_bench_convert_itoa_16), 1000, 200000,
156 500);
157 eina_benchmark_register(bench, "snprintf 10",
158 EINA_BENCHMARK(
159 eina_bench_convert_snprintf_10), 1000, 200000,
160 500);
161 eina_benchmark_register(bench, "snprintf 16",
162 EINA_BENCHMARK(
163 eina_bench_convert_snprintf_x), 1000, 200000,
164 500);
165 eina_benchmark_register(bench, "snprintf a",
166 EINA_BENCHMARK(
167 eina_bench_convert_snprintf_a), 1000, 200000,
168 500);
169 eina_benchmark_register(bench, "dtoa",
170 EINA_BENCHMARK(
171 eina_bench_convert_dtoa), 1000, 200000,
172 500);
173#ifdef EINA_BENCH_HAVE_GLIB
174 eina_benchmark_register(bench, "gstrtod",
175 EINA_BENCHMARK(
176 eina_bench_convert_gstrtod), 1000, 200000,
177 500);
178#endif
179}
180
181
182
183
diff --git a/libraries/eina/src/tests/eina_bench_hash.c b/libraries/eina/src/tests/eina_bench_hash.c
new file mode 100644
index 0000000..5b42318
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_hash.c
@@ -0,0 +1,545 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26#include <time.h>
27
28#ifdef EINA_BENCH_HAVE_GLIB
29# include <glib.h>
30#endif
31
32#include "Evas_Data.h"
33#include "Ecore_Data.h"
34
35#include "eina_hash.h"
36#include "eina_array.h"
37#include "eina_bench.h"
38#include "eina_rbtree.h"
39#include "eina_convert.h"
40
41#ifdef CITYHASH_BENCH
42// Hash function for a byte array.
43uint64_t CityHash64(const char *buf, size_t len);
44
45static unsigned int
46_eina_string_key_length(const char *key)
47{
48 if (!key)
49 return 0;
50
51 return (int)strlen(key) + 1;
52}
53
54static int
55_eina_string_key_cmp(const char *key1, __UNUSED__ int key1_length,
56 const char *key2, __UNUSED__ int key2_length)
57{
58 return strcmp(key1, key2);
59}
60#endif
61
62
63typedef struct _Eina_Bench_Rbtree Eina_Bench_Rbtree;
64struct _Eina_Bench_Rbtree
65{
66 Eina_Rbtree node;
67 char key[10];
68 int value;
69};
70
71static Eina_Rbtree_Direction
72_eina_bench_rbtree_cmp(const Eina_Bench_Rbtree *left,
73 const Eina_Bench_Rbtree *right,
74 __UNUSED__ void *data)
75{
76 if (!left)
77 return EINA_RBTREE_RIGHT;
78
79 if (!right)
80 return EINA_RBTREE_LEFT;
81
82 return strcmp(left->key,
83 right->key) < 0 ? EINA_RBTREE_LEFT : EINA_RBTREE_RIGHT;
84}
85
86static inline int
87_eina_bench_rbtree_key(const Eina_Bench_Rbtree *node,
88 const char *key,
89 int length,
90 __UNUSED__ void *data)
91{
92 return strncmp(node->key, key, length);
93}
94
95static void
96_eina_bench_rbtree_free(Eina_Rbtree *node, __UNUSED__ void *data)
97{
98 free(node);
99}
100
101static void
102eina_bench_lookup_rbtree(int request)
103{
104 Eina_Rbtree *root = NULL;
105 int i;
106 int j;
107
108 for (i = 0; i < request; ++i)
109 {
110 Eina_Bench_Rbtree *tmp;
111
112 tmp = malloc(sizeof (Eina_Bench_Rbtree));
113 if (!tmp)
114 continue;
115
116 tmp->value = i;
117 eina_convert_itoa(i, tmp->key);
118
119 root = eina_rbtree_inline_insert(root,
120 &tmp->node,
121 EINA_RBTREE_CMP_NODE_CB(
122 _eina_bench_rbtree_cmp),
123 NULL);
124 }
125
126 srand(time(NULL));
127
128 for (j = 0; j < 200; ++j)
129 for (i = 0; i < request; ++i)
130 {
131 Eina_Rbtree *tmp;
132 char tmp_key[10];
133
134 eina_convert_itoa(rand() % request, tmp_key);
135
136 tmp = eina_rbtree_inline_lookup(root,
137 tmp_key,
138 10,
139 EINA_RBTREE_CMP_KEY_CB(
140 _eina_bench_rbtree_key),
141 NULL);
142 }
143
144 eina_rbtree_delete(root, EINA_RBTREE_FREE_CB(_eina_bench_rbtree_free), NULL);
145}
146
147static void
148eina_bench_lookup_murmur(int request)
149{
150 Eina_Hash *hash = NULL;
151 int *tmp_val;
152 unsigned int i;
153 unsigned int j;
154
155 hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
156 EINA_KEY_CMP(_eina_string_key_cmp),
157 EINA_KEY_HASH(eina_hash_murmur3),
158 free,
159 8);
160
161 for (i = 0; i < (unsigned int)request; ++i)
162 {
163 char tmp_key[10];
164
165 tmp_val = malloc(sizeof (int));
166
167 if (!tmp_val)
168 continue;
169
170 eina_convert_itoa(i, tmp_key);
171 *tmp_val = i;
172
173 eina_hash_add(hash, tmp_key, tmp_val);
174 }
175
176 srand(time(NULL));
177
178 for (j = 0; j < 200; ++j)
179 for (i = 0; i < (unsigned int)request; ++i)
180 {
181 char tmp_key[10];
182
183 eina_convert_itoa(rand() % request, tmp_key);
184 tmp_val = eina_hash_find(hash, tmp_key);
185 }
186
187 eina_hash_free(hash);
188}
189
190#ifdef CITYHASH_BENCH
191static void
192eina_bench_lookup_cityhash(int request)
193{
194 Eina_Hash *hash = NULL;
195 int *tmp_val;
196 unsigned int i;
197 unsigned int j;
198
199 hash = eina_hash_new(EINA_KEY_LENGTH(_eina_string_key_length),
200 EINA_KEY_CMP(_eina_string_key_cmp),
201 EINA_KEY_HASH(CityHash64),
202 free,
203 8);
204
205 for (i = 0; i < (unsigned int)request; ++i)
206 {
207 char tmp_key[10];
208
209 tmp_val = malloc(sizeof (int));
210
211 if (!tmp_val)
212 continue;
213
214 eina_convert_itoa(i, tmp_key);
215 *tmp_val = i;
216
217 eina_hash_add(hash, tmp_key, tmp_val);
218 }
219
220 srand(time(NULL));
221
222 for (j = 0; j < 200; ++j)
223 for (i = 0; i < (unsigned int)request; ++i)
224 {
225 char tmp_key[10];
226
227 eina_convert_itoa(rand() % request, tmp_key);
228 tmp_val = eina_hash_find(hash, tmp_key);
229 }
230
231 eina_hash_free(hash);
232}
233#endif
234
235static void
236eina_bench_lookup_superfast(int request)
237{
238 Eina_Hash *hash = NULL;
239 int *tmp_val;
240 unsigned int i;
241 unsigned int j;
242
243 hash = eina_hash_string_superfast_new(free);
244
245 for (i = 0; i < (unsigned int)request; ++i)
246 {
247 char tmp_key[10];
248
249 tmp_val = malloc(sizeof (int));
250
251 if (!tmp_val)
252 continue;
253
254 eina_convert_itoa(i, tmp_key);
255 *tmp_val = i;
256
257 eina_hash_add(hash, tmp_key, tmp_val);
258 }
259
260 srand(time(NULL));
261
262 for (j = 0; j < 200; ++j)
263 for (i = 0; i < (unsigned int)request; ++i)
264 {
265 char tmp_key[10];
266
267 eina_convert_itoa(rand() % request, tmp_key);
268 tmp_val = eina_hash_find(hash, tmp_key);
269 }
270
271 eina_hash_free(hash);
272}
273
274static void
275eina_bench_lookup_djb2(int request)
276{
277 Eina_Hash *hash = NULL;
278 int *tmp_val;
279 unsigned int i;
280 unsigned int j;
281
282 hash = eina_hash_string_djb2_new(free);
283
284 for (i = 0; i < (unsigned int)request; ++i)
285 {
286 char tmp_key[10];
287
288 tmp_val = malloc(sizeof (int));
289
290 if (!tmp_val)
291 continue;
292
293 eina_convert_itoa(i, tmp_key);
294 *tmp_val = i;
295
296 eina_hash_add(hash, tmp_key, tmp_val);
297 }
298
299 srand(time(NULL));
300
301 for (j = 0; j < 200; ++j)
302 for (i = 0; i < (unsigned int)request; ++i)
303 {
304 char tmp_key[10];
305
306 eina_convert_itoa(rand() % request, tmp_key);
307
308 tmp_val = eina_hash_find(hash, tmp_key);
309 }
310
311 eina_hash_free(hash);
312}
313
314typedef struct _Eina_Bench_DJB2 Eina_Bench_DJB2;
315struct _Eina_Bench_DJB2
316{
317 char *key;
318 int value;
319};
320
321static void
322eina_bench_lookup_djb2_inline(int request)
323{
324 Eina_Hash *hash = NULL;
325 Eina_Bench_DJB2 *elm;
326 unsigned int i;
327 unsigned int j;
328
329 hash = eina_hash_string_djb2_new(free);
330
331 for (i = 0; i < (unsigned int)request; ++i)
332 {
333 int length;
334
335 elm = malloc(sizeof (Eina_Bench_DJB2) + 10);
336 if (!elm)
337 continue;
338
339 elm->key = (char *)(elm + 1);
340
341 length = eina_convert_itoa(i, elm->key) + 1;
342 elm->value = i;
343
344 eina_hash_direct_add_by_hash(hash, elm->key, length,
345 eina_hash_djb2(elm->key, length), elm);
346 }
347
348 srand(time(NULL));
349
350 for (j = 0; j < 200; ++j)
351 for (i = 0; i < (unsigned int)request; ++i)
352 {
353 char tmp_key[10];
354 int length = 6;
355
356 length = eina_convert_itoa(rand() % request, tmp_key) + 1;
357
358 elm =
359 eina_hash_find_by_hash(hash, tmp_key, length,
360 eina_hash_djb2(tmp_key, length));
361 }
362
363 eina_hash_free(hash);
364}
365
366#ifdef EINA_BENCH_HAVE_GLIB
367typedef struct _Eina_Bench_Glib Eina_Bench_Glib;
368struct _Eina_Bench_Glib
369{
370 char *key;
371 int value;
372};
373
374static void
375eina_bench_lookup_ghash(int request)
376{
377 Eina_Bench_Glib *elm;
378 GHashTable *hash;
379 unsigned int i;
380 unsigned int j;
381
382 hash = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free);
383
384 for (i = 0; i < (unsigned int)request; ++i)
385 {
386 elm = malloc(sizeof (Eina_Bench_Glib) + 10);
387 if (!elm)
388 continue;
389
390 elm->key = (char *)(elm + 1);
391
392 eina_convert_itoa(i, elm->key);
393 elm->value = i;
394
395 g_hash_table_insert(hash, elm->key, elm);
396 }
397
398 srand(time(NULL));
399
400 for (j = 0; j < 200; ++j)
401 for (i = 0; i < (unsigned int)request; ++i)
402 {
403 char tmp_key[10];
404
405 eina_convert_itoa(rand() % request, tmp_key);
406
407 elm = g_hash_table_lookup(hash, tmp_key);
408 }
409
410 g_hash_table_destroy(hash);
411}
412#endif
413
414static void
415eina_bench_lookup_evas(int request)
416{
417 Evas_Hash *hash = NULL;
418 Eina_Array *array = NULL;
419 int *tmp_val;
420 Eina_Array_Iterator it;
421 unsigned int i;
422 unsigned int j;
423
424 array = eina_array_new(10000);
425
426 for (i = 0; i < (unsigned int)request; ++i)
427 {
428 char tmp_key[10];
429
430 tmp_val = malloc(sizeof (int));
431
432 if (!tmp_val)
433 continue;
434
435 eina_convert_itoa(i, tmp_key);
436 *tmp_val = i;
437
438 hash = evas_hash_add(hash, tmp_key, tmp_val);
439
440 eina_array_push(array, tmp_val);
441 }
442
443 srand(time(NULL));
444
445 for (j = 0; j < 200; ++j)
446 for (i = 0; i < (unsigned int)request; ++i)
447 {
448 char tmp_key[10];
449
450 eina_convert_itoa(rand() % request, tmp_key);
451
452 tmp_val = evas_hash_find(hash, tmp_key);
453 }
454
455 evas_hash_free(hash);
456
457 EINA_ARRAY_ITER_NEXT(array, i, tmp_val, it)
458 free(tmp_val);
459
460 eina_array_free(array);
461}
462
463typedef struct _Eina_Bench_Ecore Eina_Bench_Ecore;
464struct _Eina_Bench_Ecore
465{
466 char *key;
467 int value;
468};
469
470static void
471eina_bench_lookup_ecore(int request)
472{
473 Ecore_Hash *hash = NULL;
474 Eina_Bench_Ecore *elm;
475 unsigned int i;
476 unsigned int j;
477
478 hash = ecore_hash_new(ecore_str_hash, ecore_str_compare);
479
480 ecore_hash_free_key_cb_set(hash, NULL);
481 ecore_hash_free_value_cb_set(hash, free);
482
483 for (i = 0; i < (unsigned int)request; ++i)
484 {
485 elm = malloc(sizeof (Eina_Bench_Ecore) + 10);
486 if (!elm)
487 continue;
488
489 elm->key = (char *)(elm + 1);
490 eina_convert_itoa(i, elm->key);
491 elm->value = i;
492
493 ecore_hash_set(hash, elm->key, elm);
494 }
495
496 srand(time(NULL));
497
498 for (j = 0; j < 200; ++j)
499 for (i = 0; i < (unsigned int)request; ++i)
500 {
501 char tmp_key[10];
502
503 eina_convert_itoa(rand() % request, tmp_key);
504
505 elm = ecore_hash_get(hash, tmp_key);
506 }
507
508 ecore_hash_destroy(hash);
509}
510
511void eina_bench_hash(Eina_Benchmark *bench)
512{
513 eina_benchmark_register(bench, "superfast-lookup",
514 EINA_BENCHMARK(
515 eina_bench_lookup_superfast), 10, 10000, 10);
516 eina_benchmark_register(bench, "djb2-lookup",
517 EINA_BENCHMARK(
518 eina_bench_lookup_djb2), 10, 10000, 10);
519 eina_benchmark_register(bench, "djb2-lookup-inline",
520 EINA_BENCHMARK(
521 eina_bench_lookup_djb2_inline), 10, 10000, 10);
522 eina_benchmark_register(bench, "murmur",
523 EINA_BENCHMARK(
524 eina_bench_lookup_murmur), 10, 10000, 10);
525#ifdef CITYHASH_BENCH
526 eina_benchmark_register(bench, "cityhash",
527 EINA_BENCHMARK(
528 eina_bench_lookup_cityhash), 10, 10000, 10);
529#endif
530 eina_benchmark_register(bench, "rbtree",
531 EINA_BENCHMARK(
532 eina_bench_lookup_rbtree), 10, 10000, 10);
533#ifdef EINA_BENCH_HAVE_GLIB
534 eina_benchmark_register(bench, "ghash-lookup",
535 EINA_BENCHMARK(
536 eina_bench_lookup_ghash), 10, 10000, 10);
537#endif
538 eina_benchmark_register(bench, "evas-lookup",
539 EINA_BENCHMARK(
540 eina_bench_lookup_evas), 10, 10000, 10);
541 eina_benchmark_register(bench, "ecore-lookup",
542 EINA_BENCHMARK(
543 eina_bench_lookup_ecore), 10, 10000, 10);
544
545}
diff --git a/libraries/eina/src/tests/eina_bench_mempool.c b/libraries/eina/src/tests/eina_bench_mempool.c
new file mode 100644
index 0000000..d7e2c62
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_mempool.c
@@ -0,0 +1,188 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#ifdef EINA_BENCH_HAVE_GLIB
24# include <glib.h>
25#endif
26
27#include "eina_bench.h"
28#include "Eina.h"
29
30static void
31_eina_mempool_bench(Eina_Mempool *mp, int request)
32{
33 Eina_Array *array;
34 int i;
35 int j;
36
37 eina_init();
38 array = eina_array_new(32);
39
40 for (i = 0; i < 100; ++i)
41 {
42 for (j = 0; j < request; ++j)
43 {
44 eina_array_push(array, eina_mempool_malloc(mp, sizeof (int)));
45 }
46
47 for (j = 0; j < request; ++j)
48 {
49 eina_mempool_free(mp, eina_array_pop(array));
50 }
51 }
52
53 eina_array_free(array);
54 eina_shutdown();
55}
56
57#ifdef EINA_BUILD_CHAINED_POOL
58static void
59eina_mempool_chained_mempool(int request)
60{
61 Eina_Mempool *mp;
62
63 mp = eina_mempool_add("chained_mempool", "test", NULL, sizeof (int), 256);
64 _eina_mempool_bench(mp, request);
65 eina_mempool_del(mp);
66}
67#endif
68
69#ifdef EINA_BUILD_PASS_THROUGH
70static void
71eina_mempool_pass_through(int request)
72{
73 Eina_Mempool *mp;
74
75 mp = eina_mempool_add("pass_through", "test", NULL, sizeof (int), 8, 0);
76 _eina_mempool_bench(mp, request);
77 eina_mempool_del(mp);
78}
79#endif
80
81#ifdef EINA_BUILD_FIXED_BITMAP
82static void
83eina_mempool_fixed_bitmap(int request)
84{
85 Eina_Mempool *mp;
86
87 mp = eina_mempool_add("fixed_bitmap", "test", NULL, sizeof (int));
88 _eina_mempool_bench(mp, request);
89 eina_mempool_del(mp);
90}
91#endif
92
93#ifdef EINA_BUILD_EMEMOA_FIXED
94static void
95eina_mempool_ememoa_fixed(int request)
96{
97 Eina_Mempool *mp;
98
99 mp = eina_mempool_add("ememoa_fixed", "test", NULL, sizeof (int), 8, 0);
100 _eina_mempool_bench(mp, request);
101 eina_mempool_del(mp);
102}
103#endif
104
105#ifdef EINA_BUILD_EMEMOA_UNKNOWN
106static void
107eina_mempool_ememoa_unknown(int request)
108{
109 Eina_Mempool *mp;
110
111 mp = eina_mempool_add("ememoa_unknown",
112 "test",
113 NULL,
114 0,
115 2,
116 sizeof (int),
117 8,
118 sizeof (int) * 2,
119 8);
120 _eina_mempool_bench(mp, request);
121 eina_mempool_del(mp);
122}
123#endif
124
125#ifdef EINA_BENCH_HAVE_GLIB
126static void
127eina_mempool_glib(int request)
128{
129 Eina_Array *array;
130 int i;
131 int j;
132
133 eina_init();
134 array = eina_array_new(32);
135
136 for (i = 0; i < 100; ++i)
137 {
138 for (j = 0; j < request; ++j)
139 {
140 eina_array_push(array, g_slice_alloc(sizeof (int)));
141 }
142
143 for (j = 0; j < request; ++j)
144 {
145 g_slice_free1(sizeof (int), eina_array_pop(array));
146 }
147 }
148
149 eina_array_free(array);
150 eina_shutdown();
151
152}
153#endif
154
155void
156eina_bench_mempool(Eina_Benchmark *bench)
157{
158#ifdef EINA_BUILD_CHAINED_POOL
159 eina_benchmark_register(bench, "chained mempool",
160 EINA_BENCHMARK(
161 eina_mempool_chained_mempool), 10, 10000, 10);
162#endif
163#ifdef EINA_BUILD_PASS_THROUGH
164 eina_benchmark_register(bench, "pass through",
165 EINA_BENCHMARK(
166 eina_mempool_pass_through), 10, 10000, 10);
167#endif
168#ifdef EINA_BUILD_FIXED_BITMAP
169 eina_benchmark_register(bench, "fixed bitmap",
170 EINA_BENCHMARK(
171 eina_mempool_fixed_bitmap), 10, 10000, 10);
172#endif
173#ifdef EINA_BUILD_EMEMOA_FIXED
174 eina_benchmark_register(bench, "ememoa fixed",
175 EINA_BENCHMARK(
176 eina_mempool_ememoa_fixed), 10, 10000, 10);
177#endif
178#ifdef EINA_BUILD_EMEMOA_UNKNOWN
179 eina_benchmark_register(bench, "ememoa unknown",
180 EINA_BENCHMARK(
181 eina_mempool_ememoa_unknown), 10, 10000, 10);
182#endif
183#ifdef EINA_BENCH_HAVE_GLIB
184 eina_benchmark_register(bench, "gslice",
185 EINA_BENCHMARK(
186 eina_mempool_glib), 10, 10000, 10);
187#endif
188}
diff --git a/libraries/eina/src/tests/eina_bench_quad.c b/libraries/eina/src/tests/eina_bench_quad.c
new file mode 100644
index 0000000..76d6667
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_quad.c
@@ -0,0 +1,318 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Cedric BAIL
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#define WIDTH 720
20#define HEIGHT 576
21
22#include "eina_main.h"
23#include "eina_mempool.h"
24#include "eina_rectangle.h"
25#include "eina_quadtree.h"
26#include "eina_list.h"
27#include "eina_bench.h"
28
29static void
30eina_bench_render_loop(int request)
31{
32 Eina_List *objects = NULL;
33 Eina_Rectangle *r;
34 int i;
35 int j;
36
37 eina_init();
38
39 for (i = 0; i < request; ++i)
40 objects = eina_list_append(objects,
41 eina_rectangle_new((rand() * WIDTH) / RAND_MAX,
42 (rand() *
43 HEIGHT) / RAND_MAX,
44 (rand() * WIDTH /
45 2) / RAND_MAX,
46 (rand() * HEIGHT /
47 2) / RAND_MAX));
48
49 for (j = 0; j < 100; ++j)
50 {
51 Eina_Rectangle *collide;
52 Eina_List *collided = NULL;
53 Eina_List *changed = NULL;
54 Eina_List *l;
55
56 /* Delete 25% of all objects */
57 i = request * 25 / 100;
58 for (; i > 0; --i)
59 {
60 eina_rectangle_free(eina_list_data_get(objects));
61 objects = eina_list_remove_list(objects, objects);
62 }
63
64 /* Add them back */
65 i = request * 25 / 100;
66 for (; i > 0; --i)
67 {
68 r = eina_rectangle_new((rand() * WIDTH) / RAND_MAX,
69 (rand() * HEIGHT) / RAND_MAX,
70 (rand() * WIDTH / 3) / RAND_MAX,
71 (rand() * HEIGHT / 3) / RAND_MAX);
72 objects = eina_list_prepend(objects, r);
73 changed = eina_list_append(changed, r);
74 }
75
76 /* Do one collide search */
77 collide = eina_rectangle_new((rand() * WIDTH) / RAND_MAX,
78 (rand() * HEIGHT) / RAND_MAX,
79 (rand() * WIDTH / 4) / RAND_MAX,
80 (rand() * HEIGHT / 4) / RAND_MAX);
81 EINA_LIST_FOREACH(objects, l, r)
82 if (eina_rectangles_intersect(r, collide))
83 collided = eina_list_append(collided, r);
84
85 collided = eina_list_free(collided);
86 eina_rectangle_free(collide);
87
88 /* Modify 50% of all objects */
89 i = request * 50 / 100;
90 for (; i > 0; --i)
91 {
92 r = eina_list_data_get(eina_list_last(objects));
93 objects = eina_list_remove_list(objects, eina_list_last(objects));
94
95 r->x = (rand() * WIDTH) / RAND_MAX;
96 r->y = (rand() * HEIGHT) / RAND_MAX;
97 r->w = (rand() * WIDTH / 3) / RAND_MAX;
98 r->h = (rand() * HEIGHT / 3) / RAND_MAX;
99
100 objects = eina_list_prepend(objects, r);
101 changed = eina_list_append(changed, r);
102 }
103
104 /* Emulating the render loop by colliding all modified
105 object with all intersecting object */
106 EINA_LIST_FREE(changed, r)
107 {
108 EINA_LIST_FOREACH(objects, l, collide)
109 if (r != collide && eina_rectangles_intersect(collide, r))
110 collided = eina_list_append(collided, collide);
111
112 collided = eina_list_append(collided, r);
113 }
114
115 /* Ok, we compute it, now it's done */
116 collided = eina_list_free(collided);
117 }
118
119 EINA_LIST_FREE(objects, r)
120 eina_rectangle_free(r);
121
122 eina_shutdown();
123}
124
125typedef struct _Eina_Bench_Quad Eina_Bench_Quad;
126struct _Eina_Bench_Quad
127{
128 Eina_Rectangle r;
129 Eina_QuadTree_Item *item;
130};
131
132static Eina_Quad_Direction
133_eina_bench_quadtree_vertical(const void *object, size_t middle)
134{
135 const Eina_Bench_Quad *b = object;
136 size_t y;
137
138 y = b->r.y < 0 ? 0 : (size_t)b->r.y;
139
140 if (y + b->r.h < middle)
141 return EINA_QUAD_LEFT;
142
143 if (y > middle)
144 return EINA_QUAD_RIGHT;
145
146 return EINA_QUAD_BOTH;
147}
148
149static Eina_Quad_Direction
150_eina_bench_quadtree_horizontal(const void *object, size_t middle)
151{
152 const Eina_Bench_Quad *b = object;
153 size_t x;
154
155 x = b->r.x < 0 ? 0 : (size_t)b->r.x;
156
157 if (x + b->r.w < middle)
158 return EINA_QUAD_LEFT;
159
160 if (x > middle)
161 return EINA_QUAD_RIGHT;
162
163 return EINA_QUAD_BOTH;
164}
165
166static void
167eina_bench_quadtree_render_loop(int request)
168{
169 Eina_List *objects = NULL;
170 Eina_Inlist *possibility;
171 Eina_Bench_Quad *b;
172 Eina_QuadTree *q;
173 Eina_Mempool *mp;
174 int i;
175 int j;
176
177 eina_init();
178
179 mp = eina_mempool_add("chained_mempool", "bench-quad", NULL,
180 sizeof (Eina_Bench_Quad), 320);
181
182 q = eina_quadtree_new(WIDTH, HEIGHT,
183 _eina_bench_quadtree_vertical,
184 _eina_bench_quadtree_horizontal);
185
186 /* Create requested object */
187 for (i = 0; i < request; ++i)
188 {
189 b = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad));
190 EINA_RECTANGLE_SET(&b->r,
191 (rand() * WIDTH) / RAND_MAX,
192 (rand() * HEIGHT) / RAND_MAX,
193 (rand() * WIDTH / 2) / RAND_MAX,
194 (rand() * HEIGHT / 2) / RAND_MAX);
195 b->item = eina_quadtree_add(q, b);
196
197 objects = eina_list_append(objects, b);
198 }
199
200 for (j = 0; j < 100; ++j)
201 {
202 Eina_Bench_Quad *collide;
203 Eina_List *changed = NULL;
204 Eina_List *collided = NULL;
205
206 /* Delete 25% of all objects */
207 i = request * 25 / 100;
208 for (; i > 0; --i)
209 {
210 b = eina_list_data_get(objects);
211 eina_quadtree_del(b->item);
212 eina_mempool_free(mp, b);
213
214 objects = eina_list_remove_list(objects, objects);
215 }
216
217 /* Add them back */
218 i = request * 25 / 100;
219 for (; i > 0; --i)
220 {
221 b = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad));
222 EINA_RECTANGLE_SET(&b->r,
223 (rand() * WIDTH) / RAND_MAX,
224 (rand() * HEIGHT) / RAND_MAX,
225 (rand() * WIDTH / 3) / RAND_MAX,
226 (rand() * HEIGHT / 3) / RAND_MAX);
227 b->item = eina_quadtree_add(q, b);
228
229 objects = eina_list_prepend(objects, b);
230 changed = eina_list_append(changed, b);
231 }
232
233 /* Do one collide search */
234 collide = eina_mempool_malloc(mp, sizeof (Eina_Bench_Quad));
235 EINA_RECTANGLE_SET(&collide->r,
236 (rand() * WIDTH) / RAND_MAX,
237 (rand() * HEIGHT) / RAND_MAX,
238 (rand() * WIDTH / 4) / RAND_MAX,
239 (rand() * HEIGHT / 4) / RAND_MAX);
240 possibility = eina_quadtree_collide(q,
241 collide->r.x, collide->r.y,
242 collide->r.w, collide->r.h);
243 while (possibility)
244 {
245 b = eina_quadtree_object(possibility);
246 possibility = possibility->next;
247
248 if (eina_rectangles_intersect(&b->r, &collide->r))
249 collided = eina_list_append(collided, b);
250 }
251
252 collided = eina_list_free(collided);
253 eina_mempool_free(mp, collide);
254
255 /* Modify 50% of all objects */
256 i = request * 50 / 100;
257 for (; i > 0; --i)
258 {
259 b = eina_list_data_get(eina_list_last(objects));
260 objects = eina_list_remove_list(objects, eina_list_last(objects));
261
262 b->r.x = (rand() * WIDTH) / RAND_MAX;
263 b->r.y = (rand() * HEIGHT) / RAND_MAX;
264 b->r.w = (rand() * WIDTH / 3) / RAND_MAX;
265 b->r.h = (rand() * HEIGHT / 3) / RAND_MAX;
266
267 eina_quadtree_change(b->item);
268
269 objects = eina_list_prepend(objects, b);
270 changed = eina_list_append(changed, b);
271 }
272
273 /* Emulating the render loop by colliding all modified
274 object with all intersecting object */
275 EINA_LIST_FREE(changed, b)
276 {
277 possibility = eina_quadtree_collide(q,
278 b->r.x, b->r.y, b->r.w, b->r.h);
279 while (possibility)
280 {
281 collide = eina_quadtree_object(possibility);
282 possibility = possibility->next;
283
284 if (collide != b &&
285 eina_rectangles_intersect(&b->r, &collide->r))
286 collided = eina_list_append(collided, collide);
287 }
288
289 collided = eina_list_append(collided, b);
290 }
291
292 /* Ok, we compute it, now it's done */
293 collided = eina_list_free(collided);
294 }
295
296 EINA_LIST_FREE(objects, b)
297 {
298 eina_quadtree_del(b->item);
299 eina_mempool_free(mp, b);
300 }
301
302 eina_mempool_del(mp);
303
304 eina_quadtree_free(q);
305
306 eina_shutdown();
307}
308
309void
310eina_bench_quadtree(Eina_Benchmark *bench)
311{
312 eina_benchmark_register(bench, "collide-all",
313 EINA_BENCHMARK(eina_bench_render_loop),
314 100, 1500, 50);
315 eina_benchmark_register(bench, "collide-quad-tree",
316 EINA_BENCHMARK(eina_bench_quadtree_render_loop),
317 100, 1500, 50);
318}
diff --git a/libraries/eina/src/tests/eina_bench_rectangle_pool.c b/libraries/eina/src/tests/eina_bench_rectangle_pool.c
new file mode 100644
index 0000000..96d4b1b
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_rectangle_pool.c
@@ -0,0 +1,76 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include "eina_bench.h"
24#include "Eina.h"
25
26static void
27eina_bench_eina_rectangle_pool(int request)
28{
29 Eina_Rectangle_Pool *pool;
30 Eina_Rectangle *rect;
31 Eina_List *list = NULL;
32 int i;
33
34 eina_init();
35 eina_init();
36
37 pool = eina_rectangle_pool_new(2048, 2048);
38 if (!pool)
39 return;
40
41 for (i = 0; i < request; ++i)
42 {
43 rect = NULL;
44
45 while (!rect)
46 {
47 rect = eina_rectangle_pool_request(pool, i & 0xFF, 256 - (i & 0xFF));
48 if (!rect)
49 {
50 rect = eina_list_data_get(list);
51 list = eina_list_remove_list(list, list);
52 if (rect)
53 eina_rectangle_pool_release(rect);
54 }
55 else
56 list = eina_list_append(list, rect);
57
58 if (!(i & 0xFF))
59 break;
60 }
61 }
62
63 eina_rectangle_pool_free(pool);
64 eina_list_free(list);
65
66 eina_shutdown();
67}
68
69void eina_bench_rectangle_pool(Eina_Benchmark *bench)
70{
71 eina_benchmark_register(bench, "eina",
72 EINA_BENCHMARK(
73 eina_bench_eina_rectangle_pool), 10, 4000, 100);
74}
75
76
diff --git a/libraries/eina/src/tests/eina_bench_sort.c b/libraries/eina/src/tests/eina_bench_sort.c
new file mode 100644
index 0000000..c3c9d9f
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_sort.c
@@ -0,0 +1,222 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <string.h>
25
26#ifdef EINA_BENCH_HAVE_GLIB
27# include <glib.h>
28#endif
29
30#include "Evas_Data.h"
31#include "Ecore_Data.h"
32
33#include "eina_bench.h"
34#include "eina_convert.h"
35#include "eina_list.h"
36#include "eina_main.h"
37
38static int
39_eina_cmp_str(const char *a, const char *b)
40{
41 return strcmp(a, b);
42}
43
44static void
45eina_bench_sort_eina(int request)
46{
47 Eina_List *list = NULL;
48 int i;
49
50 eina_init();
51
52 srand(time(NULL));
53
54 for (i = 0; i < request; ++i)
55 {
56 char buffer[10];
57
58 eina_convert_itoa(rand() % request, buffer);
59
60 list = eina_list_prepend(list, strdup(buffer));
61 }
62
63 list = eina_list_sort(list, -1, EINA_COMPARE_CB(_eina_cmp_str));
64
65 while (list)
66 {
67 free(eina_list_data_get(list));
68 list = eina_list_remove_list(list, list);
69 }
70
71 eina_shutdown();
72}
73
74static void
75eina_bench_sort_evas(int request)
76{
77 Evas_List *list = NULL;
78 int i;
79
80 srand(time(NULL));
81
82 for (i = 0; i < request; ++i)
83 {
84 char buffer[10];
85
86 eina_convert_itoa(rand() % request, buffer);
87
88 list = evas_list_prepend(list, strdup(buffer));
89 }
90
91 list = evas_list_sort(list, -1, (void *)_eina_cmp_str);
92
93 while (list)
94 {
95 free(evas_list_data(list));
96 list = evas_list_remove_list(list, list);
97 }
98}
99
100#ifdef EINA_BENCH_HAVE_GLIB
101static void
102eina_bench_sort_glist(int request)
103{
104 GList *list = NULL;
105 int i;
106
107 srand(time(NULL));
108
109 for (i = 0; i < request; ++i)
110 {
111 char buffer[10];
112
113 eina_convert_itoa(rand() % request, buffer);
114
115 list = g_list_prepend(list, strdup(buffer));
116 }
117
118 list = g_list_sort(list, (void *)_eina_cmp_str);
119
120 while (list)
121 {
122 free(list->data);
123 list = g_list_delete_link(list, list);
124 }
125}
126#endif
127
128static void
129eina_bench_sort_ecore_default(int request)
130{
131 Ecore_List *list = NULL;
132 int i;
133
134 list = ecore_list_new();
135 ecore_list_free_cb_set(list, free);
136
137 for (i = 0; i < request; ++i)
138 {
139 char buffer[10];
140
141 eina_convert_itoa(rand() % request, buffer);
142
143 ecore_list_prepend(list, strdup(buffer));
144 }
145
146 ecore_list_sort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0);
147
148 ecore_list_destroy(list);
149}
150
151static void
152eina_bench_sort_ecore_merge(int request)
153{
154 Ecore_List *list = NULL;
155 int i;
156
157 list = ecore_list_new();
158 ecore_list_free_cb_set(list, free);
159
160 for (i = 0; i < request; ++i)
161 {
162 char buffer[10];
163
164 eina_convert_itoa(rand() % request, buffer);
165
166 ecore_list_prepend(list, strdup(buffer));
167 }
168
169 ecore_list_mergesort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0);
170
171 ecore_list_destroy(list);
172}
173
174static void
175eina_bench_sort_ecore_heap(int request)
176{
177 Ecore_List *list = NULL;
178 int i;
179
180 list = ecore_list_new();
181 ecore_list_free_cb_set(list, free);
182
183 for (i = 0; i < request; ++i)
184 {
185 char buffer[10];
186
187 eina_convert_itoa(rand() % request, buffer);
188
189 ecore_list_prepend(list, strdup(buffer));
190 }
191
192 ecore_list_heapsort(list, ECORE_COMPARE_CB(_eina_cmp_str), 0);
193
194 ecore_list_destroy(list);
195}
196
197void eina_bench_sort(Eina_Benchmark *bench)
198{
199 eina_benchmark_register(bench, "eina",
200 EINA_BENCHMARK(
201 eina_bench_sort_eina), 10, 10000, 100);
202#ifdef EINA_BENCH_HAVE_GLIB
203 eina_benchmark_register(bench, "glist",
204 EINA_BENCHMARK(
205 eina_bench_sort_glist), 10, 10000, 100);
206#endif
207 eina_benchmark_register(bench, "ecore",
208 EINA_BENCHMARK(
209 eina_bench_sort_ecore_default), 10, 10000, 100);
210 eina_benchmark_register(bench, "ecore-merge",
211 EINA_BENCHMARK(
212 eina_bench_sort_ecore_merge), 10, 10000, 100);
213 eina_benchmark_register(bench, "ecore-heap",
214 EINA_BENCHMARK(
215 eina_bench_sort_ecore_heap), 10, 10000, 100);
216 eina_benchmark_register(bench, "evas",
217 EINA_BENCHMARK(
218 eina_bench_sort_evas), 10, 10000, 100);
219}
220
221
222
diff --git a/libraries/eina/src/tests/eina_bench_stringshare.c b/libraries/eina/src/tests/eina_bench_stringshare.c
new file mode 100644
index 0000000..a2c7b38
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_stringshare.c
@@ -0,0 +1,177 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <time.h>
26
27#ifdef EINA_BENCH_HAVE_GLIB
28# include <glib.h>
29#endif
30
31#include "Evas_Data.h"
32#include "Ecore_Data.h"
33
34#include "eina_stringshare.h"
35#include "eina_bench.h"
36#include "eina_convert.h"
37#include "eina_main.h"
38
39static void
40eina_bench_stringshare_job(int request)
41{
42 const char *tmp;
43 unsigned int j;
44 int i;
45
46 eina_init();
47
48 for (i = 0; i < request; ++i)
49 {
50 char build[64] = "string_";
51
52 eina_convert_xtoa(i, build + 7);
53 tmp = eina_stringshare_add(build);
54 }
55
56 srand(time(NULL));
57
58 for (j = 0; j < 200; ++j)
59 for (i = 0; i < request; ++i)
60 {
61 char build[64] = "string_";
62
63 eina_convert_xtoa(rand() % request, build + 7);
64 tmp = eina_stringshare_add(build);
65 }
66
67 eina_shutdown();
68}
69
70#ifdef EINA_BENCH_HAVE_GLIB
71static void
72eina_bench_stringchunk_job(int request)
73{
74 GStringChunk *chunk;
75 unsigned int j;
76 int i;
77
78 chunk = g_string_chunk_new(4096);
79
80 for (i = 0; i < request; ++i)
81 {
82 char build[64] = "string_";
83
84 eina_convert_xtoa(i, build + 7);
85 g_string_chunk_insert_const(chunk, build);
86 }
87
88 srand(time(NULL));
89
90 for (j = 0; j < 200; ++j)
91 for (i = 0; i < request; ++i)
92 {
93 char build[64] = "string_";
94
95 eina_convert_xtoa(rand() % request, build + 7);
96 g_string_chunk_insert_const(chunk, build);
97 }
98
99 g_string_chunk_free(chunk);
100}
101#endif
102
103static void
104eina_bench_evas_job(int request)
105{
106 const char *tmp;
107 unsigned int j;
108 int i;
109
110 for (i = 0; i < request; ++i)
111 {
112 char build[64] = "string_";
113
114 eina_convert_xtoa(i, build + 7);
115 tmp = evas_stringshare_add(build);
116 }
117
118 srand(time(NULL));
119
120 for (j = 0; j < 200; ++j)
121 for (i = 0; i < request; ++i)
122 {
123 char build[64] = "string_";
124
125 eina_convert_xtoa(rand() % request, build + 7);
126 tmp = evas_stringshare_add(build);
127 }
128}
129
130static void
131eina_bench_ecore_job(int request)
132{
133 const char *tmp;
134 unsigned int j;
135 int i;
136
137 ecore_string_init();
138
139 for (i = 0; i < request; ++i)
140 {
141 char build[64] = "string_";
142
143 eina_convert_xtoa(i, build + 7);
144 tmp = ecore_string_instance(build);
145 }
146
147 srand(time(NULL));
148
149 for (j = 0; j < 200; ++j)
150 for (i = 0; i < request; ++i)
151 {
152 char build[64] = "string_";
153
154 eina_convert_xtoa(rand() % request, build + 7);
155 tmp = ecore_string_instance(build);
156 }
157
158 ecore_string_shutdown();
159}
160
161void eina_bench_stringshare(Eina_Benchmark *bench)
162{
163 eina_benchmark_register(bench, "stringshare",
164 EINA_BENCHMARK(
165 eina_bench_stringshare_job), 100, 20100, 500);
166#ifdef EINA_BENCH_HAVE_GLIB
167 eina_benchmark_register(bench, "stringchunk (glib)",
168 EINA_BENCHMARK(
169 eina_bench_stringchunk_job), 100, 20100, 500);
170#endif
171 eina_benchmark_register(bench, "stringshare (evas)",
172 EINA_BENCHMARK(
173 eina_bench_evas_job), 100, 20100, 500);
174 eina_benchmark_register(bench, "stringshare (ecore)",
175 EINA_BENCHMARK(
176 eina_bench_ecore_job), 100, 20100, 500);
177}
diff --git a/libraries/eina/src/tests/eina_bench_stringshare_e17.c b/libraries/eina/src/tests/eina_bench_stringshare_e17.c
new file mode 100644
index 0000000..6ab0a80
--- /dev/null
+++ b/libraries/eina/src/tests/eina_bench_stringshare_e17.c
@@ -0,0 +1,118 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <time.h>
26
27#ifdef EINA_BENCH_HAVE_GLIB
28# include <glib.h>
29#endif
30
31#include "Evas_Data.h"
32#include "Ecore_Data.h"
33
34#include "Eina.h"
35
36#if EINA_ENABLE_BENCH_E17
37
38typedef struct _Eina_Stringshare_Test Eina_Stringshare_Test;
39struct _Eina_Stringshare_Test
40{
41 const char *name;
42
43 int (*init)(void);
44 const char *(*add)(const char *str);
45 void (*del)(const char *str);
46 int (*shutdown)(void);
47};
48
49static const char *strings[30000];
50static Eina_Stringshare_Test eina_str = {
51 "eina",
52 eina_init,
53 eina_stringshare_add,
54 eina_stringshare_del,
55 eina_shutdown
56};
57
58static Eina_Stringshare_Test evas_str = {
59 "evas",
60/* evas_stringshare_init, */
61 evas_stringshare_add,
62 evas_stringshare_del
63/* evas_stringshare_shutdown */
64};
65
66static Eina_Stringshare_Test ecore_str = {
67 "ecore",
68 ecore_string_init,
69 ecore_string_instance,
70 ecore_string_release,
71 ecore_string_shutdown
72};
73
74static Eina_Stringshare_Test *str[] = {
75 &eina_str,
76 &evas_str,
77 &ecore_str,
78 NULL
79};
80
81static void
82eina_bench_e17_stringshare(Eina_Stringshare_Test *str)
83{
84 Eina_Counter *cnt;
85
86 cnt = eina_counter_new(str->name);
87
88 eina_counter_start(cnt);
89
90 str->init();
91
92#include "strlog"
93
94 str->shutdown();
95
96 eina_counter_stop(cnt, 1);
97
98 fprintf(stderr, "For `%s`:\n", str->name);
99 eina_counter_dump(cnt);
100
101 eina_counter_free(cnt);
102}
103#endif
104
105void
106eina_bench_e17(void)
107{
108#if EINA_ENABLE_BENCH_E17
109 int i;
110
111 eina_init();
112
113 for (i = 0; str[i]; ++i)
114 eina_bench_e17_stringshare(str[i]);
115
116 eina_shutdown();
117#endif
118}
diff --git a/libraries/eina/src/tests/eina_suite.c b/libraries/eina/src/tests/eina_suite.c
new file mode 100644
index 0000000..9b748fc
--- /dev/null
+++ b/libraries/eina/src/tests/eina_suite.c
@@ -0,0 +1,177 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include "eina_suite.h"
24#include "Eina.h"
25#include <stdio.h>
26#include <string.h>
27
28typedef struct _Eina_Test_Case Eina_Test_Case;
29struct _Eina_Test_Case
30{
31 const char *test_case;
32 void (*build)(TCase *tc);
33};
34
35static const Eina_Test_Case etc[] = {
36 { "FixedPoint", eina_test_fp },
37 { "Array", eina_test_array },
38 { "Binary Share", eina_test_binshare },
39 { "String Share", eina_test_stringshare },
40 { "UString Share", eina_test_ustringshare },
41 { "Log", eina_test_log },
42 { "Error", eina_test_error },
43 { "Magic", eina_test_magic },
44 { "Inlist", eina_test_inlist },
45 { "Lazy alloc", eina_test_lalloc },
46 { "Main", eina_test_main },
47 { "Counter", eina_test_counter },
48 { "Hash", eina_test_hash },
49 { "List", eina_test_list },
50 { "CList", eina_test_clist },
51 { "Iterator", eina_test_iterator },
52 { "Accessor", eina_test_accessor },
53 { "Module", eina_test_module },
54 { "Convert", eina_test_convert },
55 { "Rbtree", eina_test_rbtree },
56 { "File", eina_test_file },
57 { "Benchmark", eina_test_benchmark },
58 { "Mempool", eina_test_mempool },
59 { "Rectangle", eina_test_rectangle },
60 { "Matrix Sparse", eina_test_matrixsparse },
61 { "Eina Tiler", eina_test_tiler },
62 { "Eina Strbuf", eina_test_strbuf },
63 { "Eina Binbuf", eina_test_binbuf },
64 { "String", eina_test_str },
65 { "Unicode String", eina_test_ustr },
66 { "QuadTree", eina_test_quadtree },
67 { "Sched", eina_test_sched },
68 { "Simple Xml Parser", eina_test_simple_xml_parser},
69 { NULL, NULL }
70};
71
72static void
73_list_tests(void)
74{
75 const Eina_Test_Case *itr = etc;
76 fputs("Available Test Cases:\n", stderr);
77 for (; itr->test_case; itr++)
78 fprintf(stderr, "\t%s\n", itr->test_case);
79}
80
81static Eina_Bool
82_use_test(int argc, const char **argv, const char *test_case)
83{
84 if (argc < 1)
85 return 1;
86
87 for (; argc > 0; argc--, argv++)
88 if (strcmp(test_case, *argv) == 0)
89 return 1;
90
91 return 0;
92}
93
94Suite *
95eina_build_suite(int argc, const char **argv)
96{
97 TCase *tc;
98 Suite *s;
99 int i;
100
101 s = suite_create("Eina");
102
103 for (i = 0; etc[i].test_case; ++i)
104 {
105 if (!_use_test(argc, argv, etc[i].test_case))
106 continue;
107
108 tc = tcase_create(etc[i].test_case);
109
110 etc[i].build(tc);
111
112 suite_add_tcase(s, tc);
113 tcase_set_timeout(tc, 0);
114 }
115
116 return s;
117}
118
119/* FIXME this is a copy from eina_test_mempool
120 * we should remove the duplication
121 */
122static Eina_Array *_modules;
123static void _mempool_init(void)
124{
125 eina_init();
126 /* force modules to be loaded in case they are not installed */
127 _modules = eina_module_list_get(NULL,
128 PACKAGE_BUILD_DIR "/src/modules",
129 EINA_TRUE,
130 NULL,
131 NULL);
132 eina_module_list_load(_modules);
133}
134
135static void _mempool_shutdown(void)
136{
137 eina_module_list_free(_modules);
138 /* TODO delete the list */
139 eina_shutdown();
140}
141
142int
143main(int argc, char **argv)
144{
145 Suite *s;
146 SRunner *sr;
147 int i, failed_count;
148
149 for (i = 1; i < argc; i++)
150 if ((strcmp(argv[i], "-h") == 0) ||
151 (strcmp(argv[i], "--help") == 0))
152 {
153 fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n",
154 argv[0]);
155 _list_tests();
156 return 0;
157 }
158 else if ((strcmp(argv[i], "-l") == 0) ||
159 (strcmp(argv[i], "--list") == 0))
160 {
161 _list_tests();
162 return 0;
163 }
164
165 s = eina_build_suite(argc - 1, (const char **)argv + 1);
166 sr = srunner_create(s);
167
168 _mempool_init();
169
170 srunner_run_all(sr, CK_ENV);
171 failed_count = srunner_ntests_failed(sr);
172 srunner_free(sr);
173
174 _mempool_shutdown();
175
176 return (failed_count == 0) ? 0 : 255;
177}
diff --git a/libraries/eina/src/tests/eina_suite.h b/libraries/eina/src/tests/eina_suite.h
new file mode 100644
index 0000000..643d6cc
--- /dev/null
+++ b/libraries/eina/src/tests/eina_suite.h
@@ -0,0 +1,58 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifndef EINA_SUITE_H_
20#define EINA_SUITE_H_
21
22#include <check.h>
23
24void eina_test_stringshare(TCase *tc);
25void eina_test_ustringshare(TCase *tc);
26void eina_test_binshare(TCase *tc);
27void eina_test_array(TCase *tc);
28void eina_test_log(TCase *tc);
29void eina_test_error(TCase *tc);
30void eina_test_magic(TCase *tc);
31void eina_test_inlist(TCase *tc);
32void eina_test_clist(TCase *tc);
33void eina_test_lalloc(TCase *tc);
34void eina_test_main(TCase *tc);
35void eina_test_counter(TCase *tc);
36void eina_test_hash(TCase *tc);
37void eina_test_list(TCase *tc);
38void eina_test_iterator(TCase *tc);
39void eina_test_accessor(TCase *tc);
40void eina_test_module(TCase *tc);
41void eina_test_convert(TCase *tc);
42void eina_test_rbtree(TCase *tc);
43void eina_test_file(TCase *tc);
44void eina_test_benchmark(TCase *tc);
45void eina_test_mempool(TCase *tc);
46void eina_test_rectangle(TCase *tc);
47void eina_test_matrixsparse(TCase *tc);
48void eina_test_tiler(TCase *tc);
49void eina_test_strbuf(TCase *tc);
50void eina_test_binbuf(TCase *tc);
51void eina_test_str(TCase *tc);
52void eina_test_ustr(TCase *tc);
53void eina_test_quadtree(TCase *tc);
54void eina_test_fp(TCase *tc);
55void eina_test_sched(TCase *tc);
56void eina_test_simple_xml_parser(TCase *tc);
57
58#endif /* EINA_SUITE_H_ */
diff --git a/libraries/eina/src/tests/eina_test_accessor.c b/libraries/eina/src/tests/eina_test_accessor.c
new file mode 100644
index 0000000..3c85ef0
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_accessor.c
@@ -0,0 +1,243 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28static Eina_Bool
29eina_accessor_check(__UNUSED__ const Eina_Array *array,
30 int *data, int *fdata)
31{
32 fail_if(*fdata > *data);
33 *fdata = *data;
34
35 return EINA_TRUE;
36}
37
38START_TEST(eina_accessor_array_simple)
39{
40 Eina_Accessor *it;
41 Eina_Array *ea;
42 int *tmp;
43 int i;
44
45 eina_init();
46
47 ea = eina_array_new(11);
48 fail_if(!ea);
49
50 for (i = 0; i < 200; ++i)
51 {
52 tmp = malloc(sizeof(int));
53 fail_if(!tmp);
54 *tmp = i;
55
56 eina_array_push(ea, tmp);
57 }
58
59 it = eina_array_accessor_new(ea);
60 fail_if(!it);
61
62 fail_if(eina_accessor_data_get(it, 100, (void **)&tmp) != EINA_TRUE);
63 fail_if(!tmp);
64 fail_if(*tmp != 100);
65
66 i = 50;
67 eina_accessor_over(it, EINA_EACH_CB(eina_accessor_check), 50, 100, &i);
68 fail_if(i != 99);
69
70 fail_if(eina_accessor_container_get(it) != ea);
71
72 eina_accessor_free(it);
73
74 eina_array_free(ea);
75
76 eina_shutdown();
77}
78END_TEST
79
80typedef struct _Eina_Test_Inlist Eina_Test_Inlist;
81struct _Eina_Test_Inlist
82{
83 EINA_INLIST;
84 int i;
85};
86
87static Eina_Test_Inlist *
88_eina_test_inlist_build(int i)
89{
90 Eina_Test_Inlist *tmp;
91
92 tmp = malloc(sizeof(Eina_Test_Inlist));
93 fail_if(!tmp);
94 tmp->i = i;
95
96 return tmp;
97}
98
99static Eina_Bool
100eina_accessor_inlist_data_check(__UNUSED__ const Eina_Inlist *in_list,
101 Eina_Test_Inlist *data,
102 int *fdata)
103{
104 switch (*fdata)
105 {
106 case 0: fail_if(data->i != 3227); break;
107
108 case 1: fail_if(data->i != 1664); break;
109 }
110
111 (*fdata)++;
112
113 return EINA_TRUE;
114}
115
116START_TEST(eina_accessor_inlist_simple)
117{
118 Eina_Inlist *lst = NULL;
119 Eina_Test_Inlist *tmp;
120 Eina_Test_Inlist *prev;
121 Eina_Accessor *it;
122 int i = 0;
123
124 tmp = _eina_test_inlist_build(42);
125 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
126 fail_if(!lst);
127
128 tmp = _eina_test_inlist_build(1664);
129 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
130 fail_if(!lst);
131 fail_if(((Eina_Test_Inlist *)lst)->i != 42);
132
133 prev = tmp;
134 tmp = _eina_test_inlist_build(3227);
135 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(
136 tmp), EINA_INLIST_GET(prev));
137 fail_if(!lst);
138 fail_if(((Eina_Test_Inlist *)lst)->i != 42);
139
140 tmp = _eina_test_inlist_build(27);
141 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL);
142
143 tmp = _eina_test_inlist_build(81);
144 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL);
145
146 tmp = _eina_test_inlist_build(7);
147 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
148
149 it = eina_inlist_accessor_new(lst);
150 fail_if(!it);
151 fail_if(eina_accessor_container_get(it) != lst);
152
153 eina_accessor_over(it, EINA_EACH_CB(eina_accessor_inlist_data_check), 2, 4, &i);
154
155 fail_if(eina_accessor_data_get(it, 5, (void **)&tmp) != EINA_TRUE);
156 fail_if(eina_accessor_data_get(it, 3, (void **)&tmp) != EINA_TRUE);
157 fail_if(tmp->i != 1664);
158 fail_if(eina_accessor_data_get(it, 3, (void **)&tmp) != EINA_TRUE);
159 fail_if(tmp->i != 1664);
160 fail_if(eina_accessor_data_get(it, 1, (void **)&tmp) != EINA_TRUE);
161 fail_if(tmp->i != 42);
162
163 eina_accessor_free(it);
164
165 fail_if(i != 2);
166}
167END_TEST
168
169static Eina_Bool
170eina_iterator_list_data_check(__UNUSED__ const Eina_List *list,
171 int *data,
172 int *fdata)
173{
174 switch (*fdata)
175 {
176 case 0: fail_if(*data != 9); break;
177
178 case 1: fail_if(*data != 6); break;
179 }
180
181 (*fdata)++;
182
183 return EINA_TRUE;
184}
185
186START_TEST(eina_accessor_list_simple)
187{
188 Eina_List *list = NULL;
189 Eina_Accessor *it;
190 int data[] = { 6, 9, 42, 1, 7, 1337, 81, 1664 };
191 int *j;
192 int i = 0;
193
194 eina_init();
195
196 list = eina_list_append(list, &data[0]);
197 fail_if(list == NULL);
198
199 list = eina_list_prepend(list, &data[1]);
200 fail_if(list == NULL);
201
202 list = eina_list_append(list, &data[2]);
203 fail_if(list == NULL);
204
205 list = eina_list_append(list, &data[3]);
206 fail_if(list == NULL);
207
208 list = eina_list_prepend(list, &data[4]);
209 fail_if(list == NULL);
210
211 list = eina_list_append(list, &data[5]);
212 fail_if(list == NULL);
213
214 list = eina_list_prepend(list, &data[6]);
215 fail_if(list == NULL);
216
217 it = eina_list_accessor_new(list);
218 fail_if(!it);
219
220 eina_accessor_over(it, EINA_EACH_CB(eina_iterator_list_data_check), 2, 4, &i);
221
222 fail_if(eina_accessor_data_get(it, 5, (void **)&j) != EINA_TRUE);
223 fail_if(*j != 1);
224 fail_if(eina_accessor_data_get(it, 3, (void **)&j) != EINA_TRUE);
225 fail_if(*j != 6);
226 fail_if(eina_accessor_data_get(it, 3, (void **)&j) != EINA_TRUE);
227 fail_if(*j != 6);
228 fail_if(eina_accessor_data_get(it, 1, (void **)&j) != EINA_TRUE);
229 fail_if(*j != 7);
230 fail_if(eina_accessor_data_get(it, 5, (void **)&j) != EINA_TRUE);
231 fail_if(*j != 1);
232
233 eina_accessor_free(it);
234}
235END_TEST
236
237void
238eina_test_accessor(TCase *tc)
239{
240 tcase_add_test(tc, eina_accessor_array_simple);
241 tcase_add_test(tc, eina_accessor_inlist_simple);
242 tcase_add_test(tc, eina_accessor_list_simple);
243}
diff --git a/libraries/eina/src/tests/eina_test_array.c b/libraries/eina/src/tests/eina_test_array.c
new file mode 100644
index 0000000..0b054ea
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_array.c
@@ -0,0 +1,191 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28START_TEST(eina_array_simple)
29{
30 Eina_Array *ea;
31 char *tmp;
32 Eina_Array_Iterator it;
33 unsigned int i;
34
35 eina_init();
36
37 ea = eina_array_new(11);
38 fail_if(!ea);
39
40 for (i = 0; i < 201; ++i)
41 {
42 tmp = malloc(sizeof(char) * 10);
43 fail_if(!tmp);
44 eina_convert_itoa(i, tmp);
45
46 eina_array_push(ea, tmp);
47 }
48
49 fail_if(eina_array_data_get(ea, 10) == NULL);
50 fail_if(atoi(eina_array_data_get(ea, 10)) != 10);
51 tmp = eina_array_pop(ea);
52 fail_if(tmp == NULL);
53 fail_if(atoi(tmp) != 200);
54 free(tmp);
55
56 EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
57 {
58 fail_if((unsigned int)atoi(tmp) != i);
59 free(tmp);
60 }
61
62 fail_if(i != 200);
63
64 eina_array_clean(ea);
65 eina_array_flush(ea);
66 eina_array_free(ea);
67
68 eina_shutdown();
69}
70END_TEST
71
72START_TEST(eina_array_static)
73{
74 Eina_Array sea;
75 char *tmp;
76 Eina_Array_Iterator it;
77 unsigned int i;
78
79 eina_init();
80
81 eina_array_step_set(&sea, sizeof(sea), 10);
82
83 for (i = 0; i < 200; ++i)
84 {
85 tmp = malloc(sizeof(char) * 10);
86 fail_if(!tmp);
87 eina_convert_itoa(i, tmp);
88
89 eina_array_push(&sea, tmp);
90 }
91
92 fail_if(eina_array_data_get(&sea, 10) == NULL);
93 fail_if(atoi(eina_array_data_get(&sea, 10)) != 10);
94
95 EINA_ARRAY_ITER_NEXT(&sea, i, tmp, it)
96 {
97 fail_if((unsigned int)atoi(tmp) != i);
98 free(tmp);
99 }
100
101 fail_if(i != 200);
102
103 eina_array_clean(&sea);
104 eina_array_flush(&sea);
105
106 eina_shutdown();
107}
108END_TEST
109
110Eina_Bool
111keep_int(void *data, void *gdata)
112{
113 int *tmp = data;
114
115 fail_if(gdata);
116 fail_if(!tmp);
117
118 if (*tmp == 0)
119 return EINA_FALSE;
120
121 return EINA_TRUE;
122}
123
124START_TEST(eina_array_remove_stuff)
125{
126 Eina_Array *ea;
127 int *tmp;
128 Eina_Array_Iterator it;
129 unsigned int i;
130
131 eina_init();
132
133 ea = eina_array_new(64);
134 fail_if(!ea);
135
136 for (i = 0; i < 1000; ++i)
137 {
138 tmp = malloc(sizeof(int));
139 fail_if(!tmp);
140 *tmp = i;
141
142 eina_array_push(ea, tmp);
143 }
144
145 // Remove the first 10 items
146 for (i = 0; i < 10; ++i)
147 {
148 tmp = eina_array_data_get(ea, i);
149 fail_if(!tmp);
150 *tmp = 0;
151 }
152 fail_if(eina_array_remove(ea, keep_int, NULL) != EINA_TRUE);
153
154 fail_if(eina_array_count_get(ea) != 990);
155 EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
156 fail_if(*tmp == 0);
157
158 // Remove the last items
159 for (i = 980; i < 990; ++i)
160 {
161 tmp = eina_array_data_get(ea, i);
162 fail_if(!tmp);
163 *tmp = 0;
164 }
165 eina_array_remove(ea, keep_int, NULL);
166
167 // Remove all items
168 fail_if(eina_array_count_get(ea) != 980);
169 EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
170 {
171 fail_if(*tmp == 0);
172 *tmp = 0;
173 }
174
175 eina_array_remove(ea, keep_int, NULL);
176
177 fail_if(eina_array_count_get(ea) != 0);
178
179 eina_array_free(ea);
180
181 eina_shutdown();
182}
183END_TEST
184
185void
186eina_test_array(TCase *tc)
187{
188 tcase_add_test(tc, eina_array_simple);
189 tcase_add_test(tc, eina_array_static);
190 tcase_add_test(tc, eina_array_remove_stuff);
191}
diff --git a/libraries/eina/src/tests/eina_test_benchmark.c b/libraries/eina/src/tests/eina_test_benchmark.c
new file mode 100644
index 0000000..4352c16
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_benchmark.c
@@ -0,0 +1,76 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <unistd.h>
24
25#include "eina_suite.h"
26#include "eina_benchmark.h"
27
28static int global_test = 0;
29
30static void
31_eina_benchmark_specimens(int request)
32{
33 int i;
34 int a = 0;
35
36 for (i = 0; i < request; ++i)
37 a += i;
38
39 global_test = a;
40}
41
42START_TEST(eina_benchmark_simple)
43{
44 Eina_Benchmark *eb;
45 Eina_Array_Iterator it;
46 Eina_Array *ea;
47 char *tmp;
48 unsigned int i;
49
50 eb = eina_benchmark_new("benchmark", "test");
51 fail_if(!eb);
52
53 eina_benchmark_register(eb, "specimens_check",
54 EINA_BENCHMARK(_eina_benchmark_specimens),
55 1000, 1100, 100);
56
57 ea = eina_benchmark_run(eb);
58 fail_if(!ea);
59
60 EINA_ARRAY_ITER_NEXT(ea, i, tmp, it)
61 {
62 fail_if(!tmp);
63 fail_if(unlink(tmp));
64 }
65
66 fail_if(global_test != 499500);
67
68 eina_benchmark_free(eb);
69}
70END_TEST
71
72void
73eina_test_benchmark(TCase *tc)
74{
75 tcase_add_test(tc, eina_benchmark_simple);
76}
diff --git a/libraries/eina/src/tests/eina_test_binbuf.c b/libraries/eina/src/tests/eina_test_binbuf.c
new file mode 100644
index 0000000..713e078
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_binbuf.c
@@ -0,0 +1,235 @@
1/* EINA - EFL data type library
2 *
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2.1 of the License, or (at your option) any later version.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library;
15 * if not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifdef HAVE_CONFIG_H
19# include "config.h"
20#endif
21
22#include <stdio.h>
23
24#include "eina_suite.h"
25#include "Eina.h"
26
27START_TEST(binbuf_simple)
28{
29 Eina_Binbuf *buf;
30 char *txt;
31 const char cbuf[] = "Null in the middle \0 and more text afterwards and \0 anotehr null just there and another one \0 here.";
32 size_t size = sizeof(cbuf) - 1; /* We don't care about the real NULL */
33
34
35 eina_init();
36
37 buf = eina_binbuf_new();
38 fail_if(!buf);
39
40 eina_binbuf_append_length(buf, cbuf, size);
41 fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size));
42 fail_if(size != eina_binbuf_length_get(buf));
43
44 eina_binbuf_append_length(buf, cbuf, size);
45 fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size));
46 fail_if(memcmp(eina_binbuf_string_get(buf) + size, cbuf, size));
47 fail_if(2 * size != eina_binbuf_length_get(buf));
48
49 txt = eina_binbuf_string_steal(buf);
50 fail_if(memcmp(txt, cbuf, size));
51 fail_if(memcmp(txt + size, cbuf, size));
52 free(txt);
53 fail_if(eina_binbuf_length_get(buf) != 0);
54
55 eina_binbuf_append_length(buf, cbuf, size);
56 fail_if(memcmp(eina_binbuf_string_get(buf), cbuf, size));
57 fail_if(size != eina_binbuf_length_get(buf));
58
59 eina_binbuf_reset(buf);
60 fail_if(eina_binbuf_length_get(buf) != 0);
61
62 eina_binbuf_free(buf);
63
64 eina_shutdown();
65#undef TEXT
66}
67END_TEST
68
69START_TEST(binbuf_remove)
70{
71 Eina_Binbuf *buf;
72 const char cbuf[] = "12\0 456 78\0 abcthis is some more random junk here!";
73 size_t size = sizeof(cbuf) - 1; /* We don't care about the real NULL */
74
75 eina_init();
76
77 buf = eina_binbuf_new();
78 fail_if(!buf);
79
80 eina_binbuf_append_length(buf, cbuf, size);
81 fail_if(size != eina_binbuf_length_get(buf));
82 eina_binbuf_remove(buf, 0, 4);
83 fail_if(size - 4 != eina_binbuf_length_get(buf));
84 eina_binbuf_remove(buf, 8, 1000);
85 fail_if(8 != eina_binbuf_length_get(buf));
86 eina_binbuf_remove(buf, 7, eina_binbuf_length_get(buf));
87 fail_if(7 != eina_binbuf_length_get(buf));
88 eina_binbuf_remove(buf, 2, 4);
89 fail_if(5 != eina_binbuf_length_get(buf));
90 eina_binbuf_remove(buf, 4, 1);
91 fail_if(5 != eina_binbuf_length_get(buf));
92 eina_binbuf_remove(buf, 0, eina_binbuf_length_get(buf));
93 fail_if(0 != eina_binbuf_length_get(buf));
94
95 eina_binbuf_free(buf);
96
97 eina_shutdown();
98}
99END_TEST
100
101START_TEST(binbuf_insert)
102{
103#if 0
104 Eina_Binbuf *buf;
105
106 eina_init();
107
108 buf = eina_binbuf_new();
109 fail_if(!buf);
110
111 eina_binbuf_insert(buf, "abc", 10);
112 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
113 fail_if(strcmp(eina_binbuf_string_get(buf), "abc"));
114
115 eina_binbuf_insert(buf, "123", 0);
116 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
117 fail_if(strcmp(eina_binbuf_string_get(buf), "123abc"));
118
119 eina_binbuf_insert(buf, "xyz", eina_binbuf_length_get(buf));
120 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
121 fail_if(strcmp(eina_binbuf_string_get(buf), "123abcxyz"));
122
123 eina_binbuf_insert(buf, "xyz", 1);
124 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
125 fail_if(strcmp(eina_binbuf_string_get(buf), "1xyz23abcxyz"));
126
127 eina_binbuf_insert_n(buf, "ABCDEF", 2, 1);
128 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
129 fail_if(strcmp(eina_binbuf_string_get(buf), "1ABxyz23abcxyz"));
130
131 eina_binbuf_insert_n(buf, "EINA", 2, 3);
132 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
133 fail_if(strcmp(eina_binbuf_string_get(buf), "1ABEIxyz23abcxyz"));
134
135 eina_binbuf_insert_escaped(buf, "678", 3);
136 fail_if(strlen(eina_binbuf_string_get(buf)) != eina_binbuf_length_get(buf));
137 fail_if(strncmp(eina_binbuf_string_get(buf) + 3, "678", 3));
138
139 eina_binbuf_insert_escaped(buf, "089 '\\", 9);
140 fail_if(strlen(eina_binbuf_string_get(
141 buf)) != eina_binbuf_length_get(buf));
142 fail_if(strncmp(eina_binbuf_string_get(buf) + 9,
143 "089\\ \\'\\\\",
144 strlen("089\\ \\'\\\\")));
145 eina_binbuf_reset(buf);
146
147 eina_binbuf_free(buf);
148
149 eina_shutdown();
150#endif
151}
152END_TEST
153
154START_TEST(binbuf_realloc)
155{
156 Eina_Binbuf *buf;
157 char pattern[1024 * 16];
158 unsigned int i;
159 size_t sz;
160
161 for (i = 0; i < sizeof(pattern) - 1; i++)
162 {
163 if (i % 27 == 26)
164 pattern[i] = '\0';
165 else
166 pattern[i] = 'a' + (i % 27);
167 }
168 pattern[i] = '\0';
169
170 eina_init();
171
172 buf = eina_binbuf_new();
173 fail_if(!buf);
174
175 sz = 0;
176
177 eina_binbuf_append_length(buf, pattern, 1);
178 fail_if(eina_binbuf_length_get(buf) != sz + 1);
179 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 1));
180 sz += 1;
181
182 eina_binbuf_append_length(buf, pattern, 32);
183 fail_if(eina_binbuf_length_get(buf) != sz + 32);
184 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 32));
185 sz += 32;
186
187 eina_binbuf_append_length(buf, pattern, 64);
188 fail_if(eina_binbuf_length_get(buf) != sz + 64);
189 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 64));
190 sz += 64;
191
192 eina_binbuf_append_length(buf, pattern, 128);
193 fail_if(eina_binbuf_length_get(buf) != sz + 128);
194 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 128));
195 sz += 128;
196
197 eina_binbuf_append_length(buf, pattern, 4096);
198 fail_if(eina_binbuf_length_get(buf) != sz + 4096);
199 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, 4096));
200 sz += 4096;
201
202 eina_binbuf_append_length(buf, pattern, sizeof(pattern) - 1);
203 fail_if(eina_binbuf_length_get(buf) != sz + sizeof(pattern) - 1);
204 fail_if(memcmp(eina_binbuf_string_get(buf) + sz, pattern, sizeof(pattern) -
205 1));
206 sz += sizeof(pattern) - 1;
207
208
209 eina_binbuf_remove(buf, 1024, 1024 + 1234);
210 fail_if(eina_binbuf_length_get(buf) != sz - 1234);
211 sz -= 1234;
212
213 eina_binbuf_remove(buf, 0, 0 + 8192);
214 fail_if(eina_binbuf_length_get(buf) != sz - 8192);
215 sz -= 8192;
216
217 eina_binbuf_remove(buf, 0, 0 + 32);
218 fail_if(eina_binbuf_length_get(buf) != sz - 32);
219 sz -= 32;
220
221
222 eina_binbuf_free(buf);
223
224 eina_shutdown();
225}
226END_TEST
227
228void
229eina_test_binbuf(TCase *tc)
230{
231 tcase_add_test(tc, binbuf_simple);
232 tcase_add_test(tc, binbuf_remove);
233 tcase_add_test(tc, binbuf_insert);
234 tcase_add_test(tc, binbuf_realloc);
235}
diff --git a/libraries/eina/src/tests/eina_test_binshare.c b/libraries/eina/src/tests/eina_test_binshare.c
new file mode 100644
index 0000000..b2e77ae
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_binshare.c
@@ -0,0 +1,199 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26#include <time.h>
27
28#include "eina_suite.h"
29#include "Eina.h"
30
31#define TEST0 "te\0st/0"
32#define TEST0_SIZE 7
33#define TEST1 "te\0st/11"
34#define TEST1_SIZE 8
35
36START_TEST(eina_binshare_simple)
37{
38 const char *t0;
39 const char *t1;
40
41 eina_init();
42
43 t0 = eina_binshare_add_length(TEST0, TEST0_SIZE);
44 t1 = eina_binshare_add_length(TEST1, TEST1_SIZE);
45
46 fail_if(t0 == NULL);
47 fail_if(t1 == NULL);
48 fail_if(memcmp(t0, TEST0, TEST0_SIZE) != 0);
49 fail_if(memcmp(t1, TEST1, TEST1_SIZE) != 0);
50
51 t0 = eina_binshare_ref(t0);
52 fail_if(t0 == NULL);
53 fail_if(memcmp(t0, TEST0, TEST0_SIZE) != 0);
54
55 eina_binshare_del(t0);
56 eina_binshare_del(t0);
57 eina_binshare_del(t1);
58
59 eina_shutdown();
60}
61END_TEST
62
63START_TEST(eina_binshare_small)
64{
65 char buf[4];
66 int i;
67
68 eina_init();
69
70 for (i = 1; i < 3; i++)
71 {
72 const char *t0, *t1;
73 int j;
74
75 for (j = 0; j < i; j++)
76 {
77 char c;
78 for (c = 'a'; c <= 'z'; c++)
79 buf[j] = c;
80 }
81 buf[i] = '\0';
82 t0 = eina_binshare_add_length(buf, i);
83 t1 = eina_binshare_add_length(buf, i);
84
85 fail_if(t0 == NULL);
86 fail_if(t1 == NULL);
87 fail_if(t0 != t1);
88 fail_if(memcmp(t0, buf, i) != 0);
89
90 eina_binshare_del(t0);
91 eina_binshare_del(t1);
92 }
93 eina_shutdown();
94}
95END_TEST
96
97
98START_TEST(eina_binshare_test_share)
99{
100 const char *t0;
101 const char *t1;
102
103 eina_init();
104
105 t0 = eina_binshare_add_length(TEST0, TEST0_SIZE);
106 t1 = eina_binshare_add_length(TEST0, TEST0_SIZE);
107
108 fail_if(t0 == NULL);
109 fail_if(t1 == NULL);
110 fail_if(memcmp(t0, TEST0, TEST0_SIZE) != 0);
111 fail_if(memcmp(t1, TEST0, TEST0_SIZE) != 0);
112 fail_if(t0 != t1);
113 fail_if(TEST0_SIZE != eina_binshare_length(t0));
114
115 eina_binshare_del(t0);
116 eina_binshare_del(t1);
117 eina_shutdown();
118}
119END_TEST
120
121START_TEST(eina_binshare_putstuff)
122{
123 const char *tmp;
124 int i;
125
126 eina_init();
127
128 for (i = 10000; i > 0; --i)
129 {
130 char build[64] = "string_";
131
132 eina_convert_xtoa(i, build + 7);
133 tmp = eina_binshare_add_length(build, strlen(build));
134 fail_if(tmp != eina_binshare_add_length(build, strlen(build)));
135 fail_if((int)strlen(build) != eina_binshare_length(tmp));
136 }
137 eina_shutdown();
138}
139END_TEST
140
141START_TEST(eina_binshare_collision)
142{
143 Eina_Array *ea;
144 char buffer[50];
145 int i;
146
147 srand(time(NULL));
148
149 eina_init();
150
151 ea = eina_array_new(256);
152 fail_if(!ea);
153
154 for (i = 0; i < 10000; ++i)
155 {
156 eina_convert_itoa(rand(), buffer);
157 eina_array_push(ea,
158 (void *)eina_binshare_add_length(buffer, strlen(buffer)));
159 if (rand() > RAND_MAX / 2)
160 {
161 const char *r = eina_binshare_add_length(buffer, strlen(buffer));
162 fail_if(r == NULL);
163 }
164 }
165
166 for (i = 0; i < 10000; ++i)
167 {
168 const char *r;
169
170 eina_convert_itoa(60000 - i, buffer);
171 eina_array_push(ea,
172 (void *)eina_binshare_add_length(buffer, strlen(buffer)));
173 r = eina_binshare_add_length(buffer, strlen(buffer));
174 fail_if(r == NULL);
175 r = eina_binshare_add_length(buffer, strlen(buffer));
176 fail_if(r == NULL);
177 }
178
179 for (i = 0; i < 200; ++i)
180 eina_binshare_del(eina_array_data_get(ea, i));
181
182 for (i = 0; i < 1000; ++i)
183 eina_binshare_del(eina_array_pop(ea));
184
185 eina_shutdown();
186
187 eina_array_free(ea);
188}
189END_TEST
190
191void
192eina_test_binshare(TCase *tc)
193{
194 tcase_add_test(tc, eina_binshare_simple);
195 tcase_add_test(tc, eina_binshare_small);
196 tcase_add_test(tc, eina_binshare_test_share);
197 tcase_add_test(tc, eina_binshare_collision);
198 tcase_add_test(tc, eina_binshare_putstuff);
199}
diff --git a/libraries/eina/src/tests/eina_test_clist.c b/libraries/eina/src/tests/eina_test_clist.c
new file mode 100644
index 0000000..901c0e8
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_clist.c
@@ -0,0 +1,89 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7#include <assert.h>
8
9#include <Eina.h>
10#include "eina_suite.h"
11
12Eina_Clist string_list = EINA_CLIST_INIT(string_list);
13
14struct test_string
15{
16 Eina_Clist entry;
17 const char *string;
18};
19
20static void add_string(const char *foo)
21{
22 struct test_string *t;
23
24 t = malloc(sizeof *t);
25 assert(t != NULL);
26
27 t->string = foo;
28 eina_clist_add_tail(&string_list, &t->entry);
29}
30
31static void print_strings(void)
32{
33 struct test_string *str;
34
35 EINA_CLIST_FOR_EACH_ENTRY(str, &string_list, struct test_string, entry)
36 {
37 printf("%s ", str->string);
38 }
39 printf("\n");
40}
41
42static void free_list(void)
43{
44 struct test_string *str, *tmp;
45
46 EINA_CLIST_FOR_EACH_ENTRY_SAFE(str, tmp, &string_list, struct test_string, entry)
47 {
48 eina_clist_remove(&str->entry);
49 }
50}
51
52START_TEST(eina_clist_basic)
53{
54 unsigned int n = 0;
55
56 add_string("this");
57 n++;
58 add_string("is");
59 n++;
60 add_string("a");
61 n++;
62 add_string("test");
63 n++;
64 add_string("of");
65 n++;
66 add_string("clists");
67 n++;
68 add_string("-");
69 n++;
70 add_string("hello");
71 n++;
72 add_string("world");
73 n++;
74
75 fail_if(eina_clist_count(&string_list) != n);
76
77 print_strings();
78
79 free_list();
80
81 fail_if(eina_clist_count(&string_list) != 0);
82}
83END_TEST
84
85void
86eina_test_clist(TCase *tc)
87{
88 tcase_add_test(tc, eina_clist_basic);
89}
diff --git a/libraries/eina/src/tests/eina_test_convert.c b/libraries/eina/src/tests/eina_test_convert.c
new file mode 100644
index 0000000..8e7f58c
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_convert.c
@@ -0,0 +1,165 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24#include <string.h>
25#include <math.h>
26#include <float.h>
27
28#include "eina_suite.h"
29#include "Eina.h"
30
31START_TEST(eina_convert_simple)
32{
33 char tmp[128];
34
35 fail_if(eina_convert_itoa(0, tmp) != 1);
36 fail_if(strcmp(tmp, "0") != 0);
37
38 fail_if(eina_convert_itoa(-1, tmp) != 2);
39 fail_if(strcmp(tmp, "-1") != 0);
40
41 fail_if(eina_convert_itoa(100, tmp) != 3);
42 fail_if(strcmp(tmp, "100") != 0);
43
44 fail_if(eina_convert_itoa(-100, tmp) != 4);
45 fail_if(strcmp(tmp, "-100") != 0);
46
47 fail_if(eina_convert_itoa(10000000, tmp) != 8);
48 fail_if(strcmp(tmp, "10000000") != 0);
49
50 fail_if(eina_convert_xtoa(0, tmp) != 1);
51 fail_if(strcmp(tmp, "0") != 0);
52
53 fail_if(eina_convert_xtoa(0xA1, tmp) != 2);
54 fail_if(strcmp(tmp, "a1") != 0);
55
56 fail_if(eina_convert_xtoa(0xFF00EF0E, tmp) != 8);
57 fail_if(strcmp(tmp, "ff00ef0e") != 0);
58}
59END_TEST
60
61#define EET_TEST_DOUBLE0 123.45689
62#define EET_TEST_DOUBLE1 1.0
63#define EET_TEST_DOUBLE2 0.25
64#define EET_TEST_DOUBLE3 0.0001234
65#define EET_TEST_DOUBLE4 123456789.9876543210
66
67static void
68_eina_convert_check(double test, int length)
69{
70 char tmp[128];
71 long long int m = 0;
72 long e = 0;
73 double r;
74
75 fail_if(eina_convert_dtoa(test, tmp) != length);
76 fail_if(eina_convert_atod(tmp, 128, &m, &e) != EINA_TRUE);
77 r = ldexp((double)m, e);
78 fail_if(fabs(r - test) > DBL_MIN);
79}
80
81 START_TEST(eina_convert_double)
82{
83 long long int m = 0;
84 long e = 0;
85
86 eina_init();
87
88 _eina_convert_check(EET_TEST_DOUBLE0, 20);
89 _eina_convert_check(-EET_TEST_DOUBLE0, 21);
90 _eina_convert_check(EET_TEST_DOUBLE1, 6);
91 _eina_convert_check(EET_TEST_DOUBLE2, 6);
92 _eina_convert_check(EET_TEST_DOUBLE3, 21);
93 _eina_convert_check(EET_TEST_DOUBLE4, 21);
94
95 fail_if(eina_convert_atod("ah ah ah", 8, &m, &e) != EINA_FALSE);
96 fail_if(eina_convert_atod("0xjo", 8, &m, &e) != EINA_FALSE);
97 fail_if(eina_convert_atod("0xp", 8, &m, &e) != EINA_FALSE);
98
99 eina_shutdown();
100}
101END_TEST
102
103static void
104_eina_convert_fp_check(double d, Eina_F32p32 fp, int length)
105{
106 char tmp1[128];
107 char tmp2[128];
108 Eina_F32p32 fpc;
109 double fpd;
110 int l1;
111 int l2;
112
113 l1 = eina_convert_dtoa(d, tmp1);
114 l2 = eina_convert_fptoa(fp, tmp2);
115/* fprintf(stderr, "[%s](%i) vs [%s](%i)\n", tmp1, l1, tmp2, l2); */
116 fail_if(l1 != l2);
117 fail_if(length != l1);
118 fail_if(strcmp(tmp1, tmp2) != 0);
119
120 fail_if(!eina_convert_atofp(tmp2, l2, &fpc));
121/* fprintf(stderr, "%016x vs %016x\n", fpc, fp); */
122 fail_if(fpc != fp);
123
124 fail_if(!eina_convert_atofp(tmp1, l1, &fpc));
125 fpd = eina_f32p32_double_to(fpc);
126/* fprintf(stderr, "%0.16f vs %0.16f\n", fpd, d); */
127 fail_if(fabs(fpd - d) > DBL_MIN);
128
129 d = -d;
130 fp = -fp;
131
132 l1 = eina_convert_dtoa(d, tmp1);
133 l2 = eina_convert_fptoa(fp, tmp2);
134 fail_if(l1 != l2);
135 fail_if(length + 1 != l1);
136 fail_if(strcmp(tmp1, tmp2) != 0);
137
138 fail_if(!eina_convert_atofp(tmp2, l2, &fpc));
139/* fprintf(stderr, "%016x vs %016x\n", fpc, fp); */
140 fail_if(fpc != fp);
141
142 fail_if(!eina_convert_atofp(tmp1, l1, &fpc));
143 fpd = eina_f32p32_double_to(fpc);
144/* fprintf(stderr, "%0.16f vs %0.16f\n", fpd, d); */
145 fail_if(fabs(fpd - d) > DBL_MIN);
146}
147
148 START_TEST(eina_convert_fp)
149{
150 _eina_convert_fp_check(1.0, 0x0000000100000000, 6);
151 _eina_convert_fp_check(0.5, 0x0000000080000000, 8);
152 _eina_convert_fp_check(0.625, 0x00000000a0000000, 8);
153 _eina_convert_fp_check(256.0, 0x0000010000000000, 6);
154 _eina_convert_fp_check(0.5, 0x0000000080000000, 8);
155 _eina_convert_fp_check(128.625, 0x00000080a0000000, 10);
156}
157END_TEST
158
159void
160eina_test_convert(TCase *tc)
161{
162 tcase_add_test(tc, eina_convert_simple);
163 tcase_add_test(tc, eina_convert_double);
164 tcase_add_test(tc, eina_convert_fp);
165}
diff --git a/libraries/eina/src/tests/eina_test_counter.c b/libraries/eina/src/tests/eina_test_counter.c
new file mode 100644
index 0000000..2a3f30d
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_counter.c
@@ -0,0 +1,108 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24#include <stdlib.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28#include "eina_safety_checks.h"
29
30START_TEST(eina_counter_simple)
31{
32 Eina_Counter *cnt;
33 char *dump;
34 int i;
35
36 eina_init();
37
38 cnt = eina_counter_new("eina_test");
39 fail_if(!cnt);
40
41 eina_counter_start(cnt);
42
43 for (i = 0; i < 100000; ++i)
44 {
45 void *tmp = malloc(sizeof(long int));
46 free(tmp);
47 }
48
49 eina_counter_stop(cnt, i);
50
51 eina_counter_start(cnt);
52
53 for (i = 0; i < 200000; ++i)
54 {
55 void *tmp = malloc(sizeof(long int));
56 free(tmp);
57 }
58
59 eina_counter_stop(cnt, i);
60
61 dump = eina_counter_dump(cnt);
62 fail_if(!dump);
63
64 fprintf(stderr, "%s", dump);
65
66 free(dump);
67
68 eina_counter_free(cnt);
69
70 eina_shutdown();
71}
72END_TEST
73
74START_TEST(eina_counter_break)
75{
76 Eina_Counter *cnt;
77
78 eina_init();
79
80 cnt = eina_counter_new("eina_test");
81 fail_if(!cnt);
82
83 eina_counter_stop(cnt, 10);
84
85 eina_counter_free(cnt);
86
87#ifdef EINA_SAFETY_CHECKS
88 {
89 char *dump;
90
91 fprintf(stderr, "you should have a safety check failure below:\n");
92 dump = eina_counter_dump(NULL);
93 fail_if(dump);
94 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
95 free(dump);
96 }
97#endif
98
99 eina_shutdown();
100}
101END_TEST
102
103void eina_test_counter(TCase *tc)
104{
105 tcase_add_test(tc, eina_counter_simple);
106 tcase_add_test(tc, eina_counter_break);
107}
108
diff --git a/libraries/eina/src/tests/eina_test_error.c b/libraries/eina/src/tests/eina_test_error.c
new file mode 100644
index 0000000..506f406
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_error.c
@@ -0,0 +1,59 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#ifdef HAVE_EVIL
28# include <Evil.h>
29#endif
30
31#include "eina_suite.h"
32#include "Eina.h"
33
34#define TEST_TEXT "The big test\n"
35
36START_TEST(eina_error_errno)
37{
38 int test;
39
40 setenv("EINA_ERROR_LEVEL", "1", 0);
41
42 eina_init();
43
44 test = eina_error_msg_register(TEST_TEXT);
45 fail_if(!eina_error_msg_get(test));
46 fail_if(strcmp(eina_error_msg_get(test), TEST_TEXT) != 0);
47
48 eina_error_set(test);
49 fail_if(eina_error_get() != test);
50
51 eina_shutdown();
52}
53END_TEST
54
55void
56eina_test_error(TCase *tc)
57{
58 tcase_add_test(tc, eina_error_errno);
59}
diff --git a/libraries/eina/src/tests/eina_test_file.c b/libraries/eina/src/tests/eina_test_file.c
new file mode 100644
index 0000000..aeb5461
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_file.c
@@ -0,0 +1,88 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include "eina_suite.h"
28#include "Eina.h"
29#include "eina_safety_checks.h"
30
31START_TEST(eina_file_split_simple)
32{
33 Eina_Array *ea;
34
35 eina_init();
36
37#ifdef EINA_SAFETY_CHECKS
38 fprintf(stderr, "you should have a safety check failure below:\n");
39 ea = eina_file_split(NULL);
40 fail_if(ea);
41 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
42#endif
43
44#ifdef _WIN32
45 ea = eina_file_split(strdup("\\this\\is\\a\\small\\test"));
46#else
47 ea = eina_file_split(strdup("/this/is/a/small/test"));
48#endif
49
50 fail_if(!ea);
51 fail_if(eina_array_count_get(ea) != 5);
52 fail_if(strcmp(eina_array_data_get(ea, 0), "this"));
53 fail_if(strcmp(eina_array_data_get(ea, 1), "is"));
54 fail_if(strcmp(eina_array_data_get(ea, 2), "a"));
55 fail_if(strcmp(eina_array_data_get(ea, 3), "small"));
56 fail_if(strcmp(eina_array_data_get(ea, 4), "test"));
57
58 eina_array_free(ea);
59
60#ifdef _WIN32
61 ea =
62 eina_file_split(strdup(
63 "this\\\\is\\\\\\a \\more\\complex\\\\\\case\\\\\\"));
64#else
65 ea = eina_file_split(strdup("this//is///a /more/complex///case///"));
66#endif
67
68 fail_if(!ea);
69 fail_if(eina_array_count_get(ea) != 6);
70 fail_if(strcmp(eina_array_data_get(ea, 0), "this"));
71 fail_if(strcmp(eina_array_data_get(ea, 1), "is"));
72 fail_if(strcmp(eina_array_data_get(ea, 2), "a "));
73 fail_if(strcmp(eina_array_data_get(ea, 3), "more"));
74 fail_if(strcmp(eina_array_data_get(ea, 4), "complex"));
75 fail_if(strcmp(eina_array_data_get(ea, 5), "case"));
76
77 eina_array_free(ea);
78
79 eina_shutdown();
80}
81END_TEST
82
83void
84eina_test_file(TCase *tc)
85{
86 tcase_add_test(tc, eina_file_split_simple);
87}
88
diff --git a/libraries/eina/src/tests/eina_test_fp.c b/libraries/eina/src/tests/eina_test_fp.c
new file mode 100644
index 0000000..bdb3100
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_fp.c
@@ -0,0 +1,93 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <math.h>
24#include <stdio.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28
29START_TEST(eina_fp_cos)
30{
31 Eina_F32p32 fc;
32 Eina_F32p32 fl;
33 Eina_F32p32 step;
34 Eina_F32p32 fresult;
35 double dc;
36 double dresult;
37 double delta;
38
39 fail_if(!eina_init());
40
41 fl = eina_f32p32_scale(EINA_F32P32_PI, 4);
42 step = eina_f32p32_div(fl, eina_f32p32_int_from(2048));
43
44 for (fc = 0; fc < fl; fc += step)
45 {
46 fresult = eina_f32p32_cos(fc);
47 dc = eina_f32p32_double_to(fc);
48 dresult = cos(dc);
49
50 delta = fabs(dresult - eina_f32p32_double_to(fresult));
51 fail_if(delta > 0.005);
52 }
53
54 eina_shutdown();
55}
56END_TEST
57
58START_TEST(eina_fp_sin)
59{
60 Eina_F32p32 fc;
61 Eina_F32p32 fl;
62 Eina_F32p32 step;
63 Eina_F32p32 fresult;
64 double dc;
65 double dresult;
66 double delta;
67
68 fail_if(!eina_init());
69
70 fl = eina_f32p32_scale(EINA_F32P32_PI, 4);
71 step = eina_f32p32_div(fl, eina_f32p32_int_from(2048));
72
73 for (fc = 0; fc < fl; fc += step)
74 {
75 fresult = eina_f32p32_sin(fc);
76 dc = eina_f32p32_double_to(fc);
77 dresult = sin(dc);
78
79 delta = fabs(dresult - eina_f32p32_double_to(fresult));
80 fail_if(delta > 0.005);
81 }
82
83
84 eina_shutdown();
85}
86END_TEST
87
88void
89eina_test_fp(TCase *tc)
90{
91 tcase_add_test(tc, eina_fp_cos);
92 tcase_add_test(tc, eina_fp_sin);
93}
diff --git a/libraries/eina/src/tests/eina_test_hash.c b/libraries/eina/src/tests/eina_test_hash.c
new file mode 100644
index 0000000..aeeb655
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_hash.c
@@ -0,0 +1,206 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include "eina_suite.h"
28#include "Eina.h"
29
30static Eina_Bool
31eina_foreach_check(__UNUSED__ const Eina_Hash *hash,
32 const void *key,
33 void *data,
34 __UNUSED__ void *fdata)
35{
36 int *j = data;
37 int i;
38
39 if (strlen(key) <= 0)
40 return EINA_TRUE;
41
42 i = atoi(key);
43 fail_if(i != *j);
44
45 return EINA_TRUE;
46}
47
48START_TEST(eina_hash_simple)
49{
50 Eina_Hash *hash = NULL;
51 int *test;
52 int array[] = { 1, 42, 4, 5, 6 };
53
54 /* As mempool is already initialized and it use hash, we should have 2 init. */
55 fail_if(eina_init() != 2);
56
57 hash = eina_hash_string_superfast_new(NULL);
58 fail_if(hash == NULL);
59
60 fail_if(eina_hash_add(hash, "1", &array[0]) != EINA_TRUE);
61 fail_if(eina_hash_add(hash, "42", &array[1]) != EINA_TRUE);
62 fail_if(eina_hash_direct_add(hash, "4", &array[2]) != EINA_TRUE);
63 fail_if(eina_hash_direct_add(hash, "5", &array[3]) != EINA_TRUE);
64 fail_if(eina_hash_add(hash, "", "") != EINA_TRUE);
65
66 test = eina_hash_find(hash, "4");
67 fail_if(!test);
68 fail_if(*test != 4);
69
70 test = eina_hash_find(hash, "42");
71 fail_if(!test);
72 fail_if(*test != 42);
73
74 eina_hash_foreach(hash, eina_foreach_check, NULL);
75
76 test = eina_hash_modify(hash, "5", &array[4]);
77 fail_if(!test);
78 fail_if(*test != 5);
79
80 test = eina_hash_find(hash, "5");
81 fail_if(!test);
82 fail_if(*test != 6);
83
84 fail_if(eina_hash_population(hash) != 5);
85
86 fail_if(eina_hash_find(hash, "120") != NULL);
87
88 fail_if(eina_hash_del(hash, "5", NULL) != EINA_TRUE);
89 fail_if(eina_hash_find(hash, "5") != NULL);
90
91 fail_if(eina_hash_del(hash, NULL, &array[2]) != EINA_TRUE);
92 fail_if(eina_hash_find(hash, "4") != NULL);
93
94 fail_if(eina_hash_del(hash, NULL, &array[2]) != EINA_FALSE);
95
96 fail_if(eina_hash_del(hash, "1", NULL) != EINA_TRUE);
97 fail_if(eina_hash_del(hash, "42", NULL) != EINA_TRUE);
98
99 eina_hash_free(hash);
100
101 /* Same comment as eina_init */
102 fail_if(eina_shutdown() != 1);
103}
104END_TEST
105
106START_TEST(eina_hash_extended)
107{
108 Eina_Hash *hash = NULL;
109 int i;
110
111 fail_if(eina_init() != 2);
112
113 hash = eina_hash_string_djb2_new(NULL);
114 fail_if(hash == NULL);
115
116 fail_if(eina_hash_direct_add(hash, "42", "42") != EINA_TRUE);
117
118 for (i = 43; i < 3043; ++i)
119 {
120 char *tmp = malloc(10);
121 fail_if(!tmp);
122 eina_convert_itoa(i, tmp);
123 fail_if(eina_hash_direct_add(hash, tmp, tmp) != EINA_TRUE);
124 }
125
126 fail_if(eina_hash_find(hash, "42") == NULL);
127
128 eina_hash_free(hash);
129
130 fail_if(eina_shutdown() != 1);
131}
132END_TEST
133
134START_TEST(eina_hash_double_item)
135{
136 Eina_Hash *hash = NULL;
137 int i[] = { 7, 7 };
138 int *test;
139
140 fail_if(eina_init() != 2);
141
142 hash = eina_hash_string_superfast_new(NULL);
143 fail_if(hash == NULL);
144
145 fail_if(eina_hash_add(hash, "7", &i[0]) != EINA_TRUE);
146 fail_if(eina_hash_add(hash, "7", &i[1]) != EINA_TRUE);
147
148 fail_if(eina_hash_del(hash, "7", &i[1]) != EINA_TRUE);
149 test = eina_hash_find(hash, "7");
150 fail_if(test != &i[0]);
151
152 eina_hash_free(hash);
153
154 fail_if(eina_shutdown() != 1);
155}
156END_TEST
157
158START_TEST(eina_hash_all_int)
159{
160 Eina_Hash *hash;
161 int64_t j[] = { 4321312301243122, 6, 7, 128 };
162 int i[] = { 42, 6, 7, 0 };
163 int64_t *test2;
164 int *test;
165 int it;
166
167 fail_if(eina_init() != 2);
168
169 hash = eina_hash_int32_new(NULL);
170 fail_if(hash == NULL);
171
172 for (it = 0; it < 4; ++it)
173 fail_if(eina_hash_add(hash, &i[it], &i[it]) != EINA_TRUE);
174
175 fail_if(eina_hash_del(hash, &i[1], &i[1]) != EINA_TRUE);
176 test = eina_hash_find(hash, &i[2]);
177 fail_if(test != &i[2]);
178
179 test = eina_hash_find(hash, &i[3]);
180 fail_if(test != &i[3]);
181
182 eina_hash_free(hash);
183
184 hash = eina_hash_int64_new(NULL);
185 fail_if(hash == NULL);
186
187 for (it = 0; it < 4; ++it)
188 fail_if(eina_hash_add(hash, &j[it], &j[it]) != EINA_TRUE);
189
190 fail_if(eina_hash_del(hash, &j[1], &j[1]) != EINA_TRUE);
191 test2 = eina_hash_find(hash, &j[0]);
192 fail_if(test2 != &j[0]);
193
194 eina_hash_free(hash);
195
196 fail_if(eina_shutdown() != 1);
197}
198END_TEST
199
200void eina_test_hash(TCase *tc)
201{
202 tcase_add_test(tc, eina_hash_simple);
203 tcase_add_test(tc, eina_hash_extended);
204 tcase_add_test(tc, eina_hash_double_item);
205 tcase_add_test(tc, eina_hash_all_int);
206}
diff --git a/libraries/eina/src/tests/eina_test_inlist.c b/libraries/eina/src/tests/eina_test_inlist.c
new file mode 100644
index 0000000..c27f393
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_inlist.c
@@ -0,0 +1,254 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28#include "eina_safety_checks.h"
29
30typedef struct _Eina_Test_Inlist Eina_Test_Inlist;
31struct _Eina_Test_Inlist
32{
33 int i;
34 EINA_INLIST;
35};
36
37static Eina_Test_Inlist *
38_eina_test_inlist_build(int i)
39{
40 Eina_Test_Inlist *tmp;
41
42 tmp = malloc(sizeof(Eina_Test_Inlist));
43 fail_if(!tmp);
44 tmp->i = i;
45
46 return tmp;
47}
48
49START_TEST(eina_inlist_simple)
50{
51 Eina_Inlist *lst = NULL;
52 Eina_Test_Inlist *tmp;
53 Eina_Test_Inlist *prev;
54 int i = 0;
55
56 fail_if(!eina_init());
57
58 tmp = _eina_test_inlist_build(42);
59 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
60 fail_if(!lst);
61
62 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
63 lst = eina_inlist_prepend(lst, EINA_INLIST_GET(tmp));
64
65 tmp = _eina_test_inlist_build(1664);
66 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
67 fail_if(!lst);
68 fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42);
69
70 prev = tmp;
71 tmp = _eina_test_inlist_build(3227);
72 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(
73 tmp), EINA_INLIST_GET(prev));
74 fail_if(!lst);
75 fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42);
76
77 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
78
79 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
80 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
81
82 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), lst);
83
84 tmp = _eina_test_inlist_build(27);
85 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL);
86
87 tmp = _eina_test_inlist_build(81);
88 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL);
89
90 EINA_INLIST_FOREACH(lst, tmp)
91 {
92 switch (i)
93 {
94 case 0: fail_if(tmp->i != 27); break;
95
96 case 1: fail_if(tmp->i != 3227); break;
97
98 case 2: fail_if(tmp->i != 42); break;
99
100 case 3: fail_if(tmp->i != 1664); break;
101
102 case 4: fail_if(tmp->i != 81); break;
103 }
104
105 ++i;
106 }
107
108#ifdef EINA_SAFETY_CHECKS
109 fprintf(stderr, "you should have a safety check failure below:\n");
110 {
111 Eina_Inlist *tmp2 = eina_inlist_remove(NULL, EINA_INLIST_GET(tmp));
112 fail_if(tmp2 != NULL);
113 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
114 }
115
116 fprintf(stderr, "you should have a safety check failure below:\n");
117 lst = eina_inlist_remove(lst, NULL);
118 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
119#endif
120
121 tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist);
122 lst = eina_inlist_demote(lst, lst);
123 fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist) == tmp);
124
125 lst = eina_inlist_promote(lst, EINA_INLIST_GET(tmp));
126 fail_if(lst != EINA_INLIST_GET(tmp));
127
128 tmp = EINA_INLIST_CONTAINER_GET(eina_inlist_find(lst, EINA_INLIST_GET(
129 prev)), Eina_Test_Inlist);
130 lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp));
131 prev = (Eina_Test_Inlist *)eina_inlist_find(lst, EINA_INLIST_GET(tmp));
132 tmp = prev ? EINA_INLIST_CONTAINER_GET(prev, Eina_Test_Inlist) : NULL;
133 fail_if(tmp != NULL);
134
135 while (lst)
136 lst = eina_inlist_remove(lst, lst);
137
138 eina_shutdown();
139}
140END_TEST
141
142typedef struct _Eina_Test_Inlist_Sorted Eina_Test_Inlist_Sorted;
143struct _Eina_Test_Inlist_Sorted
144{
145 EINA_INLIST;
146
147 int value;
148};
149
150static int
151_eina_test_inlist_cmp(const void *d1, const void *d2)
152{
153 const Eina_Test_Inlist_Sorted *t1 = d1;
154 const Eina_Test_Inlist_Sorted *t2 = d2;
155
156 return t1->value - t2->value;
157}
158
159static void
160_eina_test_inlist_check(const Eina_Inlist *list)
161{
162 const Eina_Test_Inlist_Sorted *t;
163 int last_value = 0;
164
165 EINA_INLIST_FOREACH(list, t)
166 {
167 fail_if(t->value < last_value);
168 last_value = t->value;
169 }
170}
171
172START_TEST(eina_inlist_sorted)
173{
174 Eina_Test_Inlist_Sorted *tmp;
175 Eina_Inlist *list = NULL;
176 Eina_Inlist *sorted = NULL;
177 int i;
178
179 fail_if(!eina_init());
180
181 srand(time(NULL));
182
183 for (i = 0; i < 2000; ++i)
184 {
185 tmp = malloc(sizeof (Eina_Test_Inlist_Sorted));
186 if (!tmp) continue ;
187
188 tmp->value = rand();
189
190 list = eina_inlist_prepend(list, EINA_INLIST_GET(tmp));
191 }
192
193 list = eina_inlist_sort(list, _eina_test_inlist_cmp);
194
195 _eina_test_inlist_check(list);
196
197 EINA_INLIST_FOREACH(list, tmp)
198 tmp->value = rand();
199
200 i = 0;
201 while (list)
202 {
203 Eina_Inlist *p = list;
204
205 list = eina_inlist_remove(list, list);
206
207 sorted = eina_inlist_sorted_insert(sorted, p, _eina_test_inlist_cmp);
208 _eina_test_inlist_check(sorted);
209 }
210
211 _eina_test_inlist_check(sorted);
212
213 eina_shutdown();
214}
215END_TEST
216
217START_TEST(eina_inlist_sorted_state)
218{
219 Eina_Test_Inlist_Sorted *tmp;
220 Eina_Inlist_Sorted_State *state;
221 Eina_Inlist *list = NULL;
222 int i;
223
224 fail_if(!eina_init());
225
226 state = eina_inlist_sorted_state_new();
227 fail_if(!state);
228
229 for (i = 0; i < 2000; ++i)
230 {
231 tmp = malloc(sizeof (Eina_Test_Inlist_Sorted));
232 if (!tmp) continue ;
233
234 tmp->value = rand();
235
236 list = eina_inlist_sorted_state_insert(list, EINA_INLIST_GET(tmp), _eina_test_inlist_cmp, state);
237 _eina_test_inlist_check(list);
238 }
239
240 _eina_test_inlist_check(list);
241
242 eina_inlist_sorted_state_free(state);
243
244 eina_shutdown();
245}
246END_TEST
247
248void
249eina_test_inlist(TCase *tc)
250{
251 tcase_add_test(tc, eina_inlist_simple);
252 tcase_add_test(tc, eina_inlist_sorted);
253 tcase_add_test(tc, eina_inlist_sorted_state);
254}
diff --git a/libraries/eina/src/tests/eina_test_iterator.c b/libraries/eina/src/tests/eina_test_iterator.c
new file mode 100644
index 0000000..84bb336
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_iterator.c
@@ -0,0 +1,465 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28static Eina_Bool
29eina_iterator_array_check(__UNUSED__ const Eina_Array *array,
30 int *data, int *fdata)
31{
32 fail_if(*fdata > *data);
33 *fdata = *data;
34
35 return EINA_TRUE;
36}
37
38START_TEST(eina_iterator_array_simple)
39{
40 Eina_Iterator *it;
41 Eina_Array *ea;
42 int *tmp;
43 int i;
44
45 eina_init();
46
47 ea = eina_array_new(11);
48 fail_if(!ea);
49
50 for (i = 0; i < 200; ++i)
51 {
52 tmp = malloc(sizeof(int));
53 fail_if(!tmp);
54 *tmp = i;
55
56 eina_array_push(ea, tmp);
57 }
58
59 it = eina_array_iterator_new(ea);
60 fail_if(!it);
61
62 i = -1;
63 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_array_check), &i);
64 fail_if(i != 199);
65
66 fail_if(eina_iterator_container_get(it) != ea);
67 fail_if(eina_iterator_next(it, (void **)&tmp) != EINA_FALSE);
68
69 eina_iterator_free(it);
70
71 eina_array_free(ea);
72
73 eina_shutdown();
74}
75END_TEST
76
77static Eina_Bool
78eina_iterator_hash_key_check(const Eina_Hash *hash,
79 const char *key,
80 __UNUSED__ void *fdata)
81{
82 fail_if(eina_hash_find(hash, key) == NULL);
83
84 return EINA_TRUE;
85}
86static Eina_Bool
87eina_iterator_hash_data_check(const Eina_Hash *hash,
88 int *data,
89 __UNUSED__ void *fdata)
90{
91 char tmp[10];
92
93 snprintf(tmp, 10, "%i", *data);
94 fail_if(eina_hash_find(hash, tmp) != data);
95
96 return EINA_TRUE;
97}
98static Eina_Bool
99eina_iterator_hash_tuple_check(__UNUSED__ const Eina_Hash *hash,
100 Eina_Hash_Tuple *tuple,
101 __UNUSED__ void *fdata)
102{
103 fail_if(atoi((char *)tuple->key) != *((int *)tuple->data));
104
105 return EINA_TRUE;
106}
107
108START_TEST(eina_iterator_hash_simple)
109{
110 Eina_Iterator *it;
111 Eina_Hash *hash;
112 int array[] = { 1, 42, 7, 8, 6 };
113
114 eina_init();
115
116 hash = eina_hash_string_superfast_new(NULL);
117 fail_if(hash == NULL);
118
119 fail_if(eina_hash_add(hash, "1", &array[0]) != EINA_TRUE);
120 fail_if(eina_hash_add(hash, "42", &array[1]) != EINA_TRUE);
121 fail_if(eina_hash_add(hash, "7", &array[2]) != EINA_TRUE);
122 fail_if(eina_hash_add(hash, "8", &array[3]) != EINA_TRUE);
123 fail_if(eina_hash_add(hash, "6", &array[4]) != EINA_TRUE);
124
125 it = eina_hash_iterator_key_new(hash);
126 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_hash_key_check), NULL);
127 eina_iterator_free(it);
128
129 it = eina_hash_iterator_data_new(hash);
130 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_hash_data_check), NULL);
131 eina_iterator_free(it);
132
133 it = eina_hash_iterator_tuple_new(hash);
134 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_hash_tuple_check), NULL);
135 eina_iterator_free(it);
136
137 eina_hash_free(hash);
138
139 eina_shutdown();
140}
141END_TEST
142
143typedef struct _Eina_Test_Inlist Eina_Test_Inlist;
144struct _Eina_Test_Inlist
145{
146 EINA_INLIST;
147 int i;
148};
149
150static Eina_Test_Inlist *
151_eina_test_inlist_build(int i)
152{
153 Eina_Test_Inlist *tmp;
154
155 tmp = malloc(sizeof(Eina_Test_Inlist));
156 fail_if(!tmp);
157 tmp->i = i;
158
159 return tmp;
160}
161
162static Eina_Bool
163eina_iterator_inlist_data_check(__UNUSED__ const Eina_Inlist *in_list,
164 Eina_Test_Inlist *data,
165 int *fdata)
166{
167 switch (*fdata)
168 {
169 case 0: fail_if(data->i != 27); break;
170
171 case 1: fail_if(data->i != 42); break;
172
173 case 2: fail_if(data->i != 3227); break;
174
175 case 3: fail_if(data->i != 1664); break;
176
177 case 4: fail_if(data->i != 81); break;
178 }
179
180 (*fdata)++;
181
182 return EINA_TRUE;
183}
184
185START_TEST(eina_iterator_inlist_simple)
186{
187 Eina_Inlist *lst = NULL;
188 Eina_Test_Inlist *tmp;
189 Eina_Test_Inlist *prev;
190 Eina_Iterator *it;
191 int i = 0;
192
193 tmp = _eina_test_inlist_build(42);
194 lst = eina_inlist_append(lst, EINA_INLIST_GET(tmp));
195 fail_if(!lst);
196
197 tmp = _eina_test_inlist_build(1664);
198 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst);
199 fail_if(!lst);
200 fail_if(((Eina_Test_Inlist *)lst)->i != 42);
201
202 prev = tmp;
203 tmp = _eina_test_inlist_build(3227);
204 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(
205 tmp), EINA_INLIST_GET(prev));
206 fail_if(!lst);
207 fail_if(((Eina_Test_Inlist *)lst)->i != 42);
208
209 tmp = _eina_test_inlist_build(27);
210 lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), NULL);
211
212 tmp = _eina_test_inlist_build(81);
213 lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), NULL);
214
215 it = eina_inlist_iterator_new(lst);
216 fail_if(!it);
217
218 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_inlist_data_check), &i);
219 eina_iterator_free(it);
220
221 fail_if(i != 5);
222}
223END_TEST
224
225static Eina_Bool
226eina_iterator_list_data_check(__UNUSED__ const Eina_List *list,
227 int *data,
228 int *fdata)
229{
230 switch (*fdata)
231 {
232 case 0: fail_if(*data != 81); break;
233
234 case 1: fail_if(*data != 7); break;
235
236 case 2: fail_if(*data != 9); break;
237
238 case 3: fail_if(*data != 6); break;
239
240 case 4: fail_if(*data != 42); break;
241
242 case 5: fail_if(*data != 1); break;
243
244 case 6: fail_if(*data != 1337); break;
245 }
246
247 (*fdata)++;
248
249 return EINA_TRUE;
250}
251
252START_TEST(eina_iterator_list_simple)
253{
254 Eina_List *list = NULL;
255 Eina_Iterator *it;
256 int data[] = { 6, 9, 42, 1, 7, 1337, 81, 1664 };
257 int i = 0;
258
259 eina_init();
260
261 list = eina_list_append(list, &data[0]);
262 fail_if(list == NULL);
263
264 list = eina_list_prepend(list, &data[1]);
265 fail_if(list == NULL);
266
267 list = eina_list_append(list, &data[2]);
268 fail_if(list == NULL);
269
270 list = eina_list_append(list, &data[3]);
271 fail_if(list == NULL);
272
273 list = eina_list_prepend(list, &data[4]);
274 fail_if(list == NULL);
275
276 list = eina_list_append(list, &data[5]);
277 fail_if(list == NULL);
278
279 list = eina_list_prepend(list, &data[6]);
280 fail_if(list == NULL);
281
282 it = eina_list_iterator_new(list);
283 fail_if(!it);
284
285 eina_iterator_foreach(it, EINA_EACH_CB(eina_iterator_list_data_check), &i);
286 eina_iterator_free(it);
287}
288END_TEST
289
290typedef struct _Eina_Rbtree_Int Eina_Rbtree_Int;
291struct _Eina_Rbtree_Int
292{
293 Eina_Rbtree node;
294 int value;
295};
296
297static Eina_Rbtree_Direction
298eina_rbtree_int_cmp(const Eina_Rbtree_Int *left, const Eina_Rbtree_Int *right)
299{
300 fail_if(!left);
301 fail_if(!right);
302
303 if (left->value < right->value)
304 return EINA_RBTREE_LEFT;
305
306 return EINA_RBTREE_RIGHT;
307}
308
309static Eina_Rbtree *
310_eina_rbtree_int_new(int value)
311{
312 Eina_Rbtree_Int *it;
313
314 it = malloc(sizeof (Eina_Rbtree_Int));
315 fail_if(!it);
316
317 it->value = value;
318
319 return &it->node;
320}
321
322static Eina_Bool
323eina_iterator_rbtree_data_check_sorted(__UNUSED__ const Eina_List *list,
324 Eina_Rbtree_Int *data,
325 int *fdata)
326{
327 switch (*fdata)
328 {
329 case 0: fail_if(data->value != 10); break;
330
331 case 1: fail_if(data->value != 27); break;
332
333 case 2: fail_if(data->value != 42); break;
334
335 case 3: fail_if(data->value != 69); break;
336
337 case 4: fail_if(data->value != 1337); break;
338 }
339
340 (*fdata)++;
341
342 return EINA_TRUE;
343}
344
345static Eina_Bool
346eina_iterator_rbtree_data_check_prefix(__UNUSED__ const Eina_List *list,
347 Eina_Rbtree_Int *data,
348 int *fdata)
349{
350 switch (*fdata)
351 {
352 case 0: fail_if(data->value != 27); break;
353
354 case 1: fail_if(data->value != 10); break;
355
356 case 2: fail_if(data->value != 69); break;
357
358 case 3: fail_if(data->value != 42); break;
359
360 case 4: fail_if(data->value != 1337); break;
361 }
362
363 (*fdata)++;
364
365 return EINA_TRUE;
366}
367
368static Eina_Bool
369eina_iterator_rbtree_data_check_postfix(__UNUSED__ const Eina_List *list,
370 Eina_Rbtree_Int *data,
371 int *fdata)
372{
373 switch (*fdata)
374 {
375 case 0: fail_if(data->value != 10); break;
376
377 case 1: fail_if(data->value != 42); break;
378
379 case 2: fail_if(data->value != 1337); break;
380
381 case 3: fail_if(data->value != 69); break;
382
383 case 4: fail_if(data->value != 27); break;
384 }
385
386 (*fdata)++;
387
388 return EINA_TRUE;
389}
390
391START_TEST(eina_iterator_rbtree_simple)
392{
393 Eina_Rbtree *root = NULL;
394 Eina_Iterator *it;
395 int i;
396
397 root = eina_rbtree_inline_insert(NULL,
398 _eina_rbtree_int_new(10),
399 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp),
400 NULL);
401 fail_if(!root);
402
403 root = eina_rbtree_inline_insert(root,
404 _eina_rbtree_int_new(1337),
405 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp),
406 NULL);
407 fail_if(!root);
408
409 root = eina_rbtree_inline_insert(root,
410 _eina_rbtree_int_new(27),
411 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp),
412 NULL);
413 fail_if(!root);
414
415 root = eina_rbtree_inline_insert(root,
416 _eina_rbtree_int_new(69),
417 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp),
418 NULL);
419 fail_if(!root);
420
421 root = eina_rbtree_inline_insert(root,
422 _eina_rbtree_int_new(42),
423 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp),
424 NULL);
425 fail_if(!root);
426
427 i = 0;
428 it = eina_rbtree_iterator_prefix(root);
429 fail_if(!it);
430
431 eina_iterator_foreach(it,
432 EINA_EACH_CB(eina_iterator_rbtree_data_check_prefix),
433 &i);
434 eina_iterator_free(it);
435
436 /* This will return the item sorted. */
437 i = 0;
438 it = eina_rbtree_iterator_infix(root);
439 fail_if(!it);
440
441 eina_iterator_foreach(it,
442 EINA_EACH_CB(eina_iterator_rbtree_data_check_sorted),
443 &i);
444 eina_iterator_free(it);
445
446 i = 0;
447 it = eina_rbtree_iterator_postfix(root);
448 fail_if(!it);
449
450 eina_iterator_foreach(it,
451 EINA_EACH_CB(eina_iterator_rbtree_data_check_postfix),
452 &i);
453 eina_iterator_free(it);
454}
455END_TEST
456
457void
458eina_test_iterator(TCase *tc)
459{
460 tcase_add_test(tc, eina_iterator_array_simple);
461 tcase_add_test(tc, eina_iterator_hash_simple);
462 tcase_add_test(tc, eina_iterator_inlist_simple);
463 tcase_add_test(tc, eina_iterator_list_simple);
464 tcase_add_test(tc, eina_iterator_rbtree_simple);
465}
diff --git a/libraries/eina/src/tests/eina_test_lalloc.c b/libraries/eina/src/tests/eina_test_lalloc.c
new file mode 100644
index 0000000..13fd607
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_lalloc.c
@@ -0,0 +1,89 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28
29typedef struct _Eina_Lazy_Allocator_Test Eina_Lazy_Allocator_Test;
30struct _Eina_Lazy_Allocator_Test
31{
32 void *data;
33 int num;
34};
35
36static Eina_Bool
37_test_alloc(Eina_Lazy_Allocator_Test *elat, int num)
38{
39 if (elat->num == 10 && num == 1)
40 return EINA_FALSE;
41
42 if (elat->num == 122 && num == 128)
43 return EINA_FALSE;
44
45 elat->num += num;
46 elat->data = realloc(elat->data, elat->num);
47
48 return EINA_TRUE;
49}
50
51static void
52_test_free(Eina_Lazy_Allocator_Test *elat)
53{
54 free(elat->data);
55 elat->data = NULL;
56 elat->num = 0;
57}
58
59START_TEST(eina_lalloc_simple)
60{
61 Eina_Lazy_Allocator_Test *elat;
62 Eina_Lalloc *test;
63 int i;
64
65 elat = calloc(1, sizeof (Eina_Lazy_Allocator_Test));
66 fail_if(!elat);
67
68 test = eina_lalloc_new(elat, EINA_LALLOC_ALLOC(
69 _test_alloc), EINA_LALLOC_FREE(_test_free), 10);
70 fail_if(!test);
71
72 for (i = 0; i < 10; ++i)
73 fail_if(eina_lalloc_element_add(test) != EINA_TRUE);
74 fail_if(eina_lalloc_element_add(test) != EINA_FALSE);
75 fail_if(eina_lalloc_elements_add(test, 5) != EINA_TRUE);
76 for (i = 0; i < 21; ++i)
77 fail_if(eina_lalloc_element_add(test) != EINA_TRUE);
78
79 fail_if(eina_lalloc_elements_add(test, 50) != EINA_FALSE);
80
81 eina_lalloc_free(test);
82}
83END_TEST
84
85void
86eina_test_lalloc(TCase *tc)
87{
88 tcase_add_test(tc, eina_lalloc_simple);
89}
diff --git a/libraries/eina/src/tests/eina_test_list.c b/libraries/eina/src/tests/eina_test_list.c
new file mode 100644
index 0000000..6e08847
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_list.c
@@ -0,0 +1,347 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28static Eina_Bool eina_list_sorted_check(const Eina_List *list)
29{
30 const Eina_List *n;
31 void *d;
32 int last = *(int *)list->data;
33
34 EINA_LIST_FOREACH(list->next, n, d)
35 {
36 int current = *(int *)d;
37 if (last > current)
38 {
39 fprintf(stderr, "list is not sorted: last=%d, current=%d\n",
40 last, current);
41 return 0;
42 }
43
44 last = current;
45 }
46
47 return 1;
48}
49
50static int eina_int_cmp(const void *a, const void *b)
51{
52 const int *ia = a;
53 const int *ib = b;
54
55 return *ia - *ib;
56}
57
58START_TEST(eina_test_simple)
59{
60 Eina_List *list = NULL;
61 Eina_List *tmp;
62 int *test1;
63 int *test2;
64 int *test3;
65 int data[] = { 6, 9, 42, 1, 7, 9, 81, 1664, 1337 };
66 int result[] = { 81, 9, 9, 7, 1 };
67 int i;
68
69 eina_init();
70
71 list = eina_list_append(list, &data[0]);
72 fail_if(list == NULL);
73
74 list = eina_list_prepend(list, &data[1]);
75 fail_if(list == NULL);
76
77 list = eina_list_append(list, &data[2]);
78 fail_if(list == NULL);
79
80 list = eina_list_remove(list, &data[0]);
81 fail_if(list == NULL);
82
83 list = eina_list_remove(list, &data[0]);
84 fail_if(list == NULL);
85
86 tmp = eina_list_data_find_list(list, &data[2]);
87 fail_if(tmp == NULL);
88
89 list = eina_list_append_relative_list(list, &data[3], tmp);
90 fail_if(list == NULL);
91
92 list = eina_list_prepend_relative_list(list, &data[4], tmp);
93 fail_if(list == NULL);
94
95 list = eina_list_promote_list(list, tmp);
96 fail_if(list == NULL);
97
98 list = eina_list_append_relative(list, &data[5], &data[2]);
99 fail_if(list == NULL);
100
101 list = eina_list_prepend_relative(list, &data[6], &data[2]);
102 fail_if(list == NULL);
103
104 list = eina_list_remove_list(list, tmp);
105 fail_if(list == NULL);
106
107 fail_if(eina_list_data_find_list(list, &data[2]) != NULL);
108 fail_if(eina_list_data_find(list, &data[2]) != NULL);
109 fail_if(eina_list_data_find(list, &data[5]) != &data[5]);
110
111 fail_if(eina_list_count(list) != 5);
112 fail_if(eina_list_nth(list, 4) != &data[3]);
113 fail_if(eina_list_nth(list, 10) != NULL);
114 fail_if(eina_list_nth_list(list, 10) != NULL);
115
116 for (tmp = list, i = 0; tmp != NULL; tmp = eina_list_next(tmp), ++i)
117 {
118 int *d = eina_list_data_get(tmp);
119 fail_if(d == NULL);
120 fail_if(*d != result[i]);
121 }
122
123 list = eina_list_reverse(list);
124
125 for (tmp = list; tmp != NULL; tmp = eina_list_next(tmp), --i)
126 {
127 int *d = eina_list_data_get(tmp);
128 fail_if(d == NULL);
129 fail_if(*d != result[i - 1]);
130 }
131
132 list = eina_list_append_relative(list, &data[7], &data[7]);
133 fail_if(list == NULL);
134
135 list = eina_list_prepend_relative(list, &data[8], &data[8]);
136 fail_if(list == NULL);
137
138 list = eina_list_sort(list, 2, eina_int_cmp);
139
140 list = eina_list_sort(list, 2, eina_int_cmp);
141
142 test1 = eina_list_nth(list, 0);
143 test2 = eina_list_nth(list, 1);
144 test3 = eina_list_nth(list, 2);
145
146 fail_if(test1 == NULL || test2 == NULL || test3 == NULL);
147 fail_if(*test1 > *test2);
148 fail_if(*test3 == *test2);
149
150 list = eina_list_sort(list, 5, eina_int_cmp);
151
152 test1 = eina_list_nth(list, 3);
153 test2 = eina_list_nth(list, 4);
154 test3 = eina_list_nth(list, 5);
155
156 fail_if(test1 == NULL || test2 == NULL || test3 == NULL);
157 fail_if(*test1 > *test2);
158 fail_if(*test3 > *test2);
159
160 list = eina_list_append(list, &data[8]);
161 fail_if(list == NULL);
162
163 list = eina_list_append(list, &data[7]);
164 fail_if(list == NULL);
165
166 list = eina_list_sort(list, -1, eina_int_cmp);
167
168 test1 = eina_list_nth(list, 0);
169 for (tmp = list; tmp != NULL; tmp = eina_list_next(tmp))
170 {
171 int *d = eina_list_data_get(tmp);
172 fail_if(*test1 > *d);
173
174 test1 = d;
175 }
176
177 test3 = eina_list_nth(list, 5);
178 fail_if(test3 == NULL);
179
180 list = eina_list_promote_list(list, list);
181 fail_if(list == NULL);
182
183 list = eina_list_promote_list(list, eina_list_last(list));
184 fail_if(list == NULL);
185
186 test1 = eina_list_nth(list, 0);
187 test2 = eina_list_nth(list, 1);
188
189 list = eina_list_promote_list(eina_list_next(list), list);
190 fail_if(list == NULL);
191 fail_if(eina_list_data_get(list) != test1);
192 fail_if(eina_list_data_get(eina_list_next(list)) != test2);
193
194 list = eina_list_remove_list(list, list);
195 fail_if(list == NULL);
196
197 list = eina_list_remove_list(list, eina_list_last(list));
198 fail_if(list == NULL);
199
200 list = eina_list_free(list);
201 fail_if(list != NULL);
202
203 eina_shutdown();
204}
205END_TEST
206
207START_TEST(eina_test_merge)
208{
209 Eina_List *l1;
210 Eina_List *l2;
211 Eina_List *l3;
212 Eina_List *l4;
213 Eina_List *l5;
214 int data[] = { 6, 9, 42, 1, 7, 9, 81, 1664, 1337, 3, 21, 10, 0, 5, 2008 };
215 int i;
216
217 eina_init();
218
219 l1 = eina_list_append(NULL, &data[0]);
220 l1 = eina_list_append(l1, &data[1]);
221 l1 = eina_list_append(l1, &data[2]);
222 l1 = eina_list_append(l1, &data[3]);
223 fail_if(l1 == NULL);
224
225 l2 = eina_list_append(NULL, &data[4]);
226 l2 = eina_list_append(l2, &data[5]);
227 fail_if(l2 == NULL);
228
229 l1 = eina_list_merge(l1, l2);
230 fail_if(l1 == NULL);
231 fail_if(eina_list_count(l1) != 6);
232 for (i = 0, l2 = l1; ((l2 != NULL) && (i < 6)); ++i, l2 = l2->next)
233 fail_if(l2->data != &data[i]);
234 fail_if(i != 6);
235 fail_if(l2 != NULL);
236
237 eina_list_free(l1);
238
239 l1 = eina_list_append(NULL, &data[0]);
240 l1 = eina_list_append(l1, &data[1]);
241 fail_if(l1 == NULL);
242
243 l2 = eina_list_append(NULL, &data[2]);
244 l2 = eina_list_append(l2, &data[3]);
245 l2 = eina_list_append(l2, &data[4]);
246 l2 = eina_list_append(l2, &data[5]);
247 fail_if(l2 == NULL);
248
249 l1 = eina_list_merge(l1, l2);
250 fail_if(l1 == NULL);
251 fail_if(eina_list_count(l1) != 6);
252 for (i = 0, l2 = l1; ((l2 != NULL) && (i < 6)); ++i, l2 = l2->next)
253 fail_if(l2->data != &data[i]);
254 fail_if(i != 6);
255 fail_if(l2 != NULL);
256
257 l3 = eina_list_append(NULL, &data[6]);
258 l3 = eina_list_append(l3, &data[7]);
259 l3 = eina_list_append(l3, &data[8]);
260
261 l4 = eina_list_append(NULL, &data[9]);
262 l4 = eina_list_append(l4, &data[10]);
263 l4 = eina_list_append(l4, &data[11]);
264
265 l5 = eina_list_append(NULL, &data[12]);
266 l5 = eina_list_append(l5, &data[13]);
267 l5 = eina_list_append(l5, &data[14]);
268
269 l1 = eina_list_sort(l1, -1, eina_int_cmp);
270 l3 = eina_list_sort(l3, -1, eina_int_cmp);
271 l4 = eina_list_sort(l4, -1, eina_int_cmp);
272 l5 = eina_list_sort(l5, -1, eina_int_cmp);
273
274 l1 = eina_list_sorted_merge(l1, l3, eina_int_cmp);
275 fail_if(l1 == NULL);
276 fail_if(eina_list_count(l1) != 9);
277
278 l1 = eina_list_sorted_merge(l1, l4, eina_int_cmp);
279 fail_if(l1 == NULL);
280 fail_if(eina_list_count(l1) != 12);
281
282 l1 = eina_list_sorted_merge(l1, l5, eina_int_cmp);
283 fail_if(l1 == NULL);
284 fail_if(eina_list_count(l1) != 15);
285
286 fail_if(!eina_list_sorted_check(l1));
287
288 eina_shutdown();
289}
290END_TEST
291
292START_TEST(eina_test_sorted_insert)
293{
294 const int data[] = {6, 9, 42, 1, 7, 9, 81, 1664, 1337, 3, 21, 10, 0, 5, 2008};
295 const int data2[] = {5, 0, 3, 2, 1, 0, 1, 2, 3, 4, 5};
296 int i, count;
297 Eina_List *l1, *l2, *itr;
298 void *d;
299
300 eina_init();
301
302 count = sizeof(data) / sizeof(data[0]);
303
304 l1 = NULL;
305 for (i = 0; i < count; i++)
306 l1 = eina_list_sorted_insert(l1, eina_int_cmp, data + i);
307
308 fail_if(l1 == NULL);
309 fail_if(!eina_list_sorted_check(l1));
310
311 l2 = NULL;
312 EINA_LIST_FOREACH(l1, itr, d)
313 l2 = eina_list_sorted_insert(l2, eina_int_cmp, d);
314
315 fail_if(l2 == NULL);
316 fail_if(!eina_list_sorted_check(l2));
317 eina_list_free(l2);
318
319 l2 = NULL;
320 EINA_LIST_REVERSE_FOREACH(l1, itr, d)
321 l2 = eina_list_sorted_insert(l2, eina_int_cmp, d);
322
323 fail_if(l2 == NULL);
324 fail_if(!eina_list_sorted_check(l2));
325 eina_list_free(l2);
326 eina_list_free(l1);
327
328 count = sizeof(data2) / sizeof(data2[0]);
329 l1 = NULL;
330 for (i = 0; i < count; i++)
331 l1 = eina_list_sorted_insert(l1, eina_int_cmp, data2 + i);
332
333 fail_if(l1 == NULL);
334 fail_if(!eina_list_sorted_check(l1));
335 eina_list_free(l1);
336
337 eina_shutdown();
338}
339END_TEST
340
341void
342eina_test_list(TCase *tc)
343{
344 tcase_add_test(tc, eina_test_simple);
345 tcase_add_test(tc, eina_test_merge);
346 tcase_add_test(tc, eina_test_sorted_insert);
347}
diff --git a/libraries/eina/src/tests/eina_test_log.c b/libraries/eina/src/tests/eina_test_log.c
new file mode 100644
index 0000000..ba17d5f
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_log.c
@@ -0,0 +1,235 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include "eina_suite.h"
28#include "Eina.h"
29
30 START_TEST(eina_log_macro)
31{
32 fail_if(!eina_init());
33
34 eina_log_level_set(EINA_LOG_LEVEL_DBG);
35 eina_log_print_cb_set(eina_log_print_cb_file, stderr);
36
37 EINA_LOG_CRIT("Critical message\n");
38 EINA_LOG_ERR("An error\n");
39 EINA_LOG_INFO("An info\n");
40 EINA_LOG_WARN("A warning\n");
41 EINA_LOG_DBG("A debug\n");
42
43 eina_shutdown();
44}
45END_TEST
46
47START_TEST(eina_log_domains_macros)
48{
49 fail_if(!eina_init());
50
51 int d = eina_log_domain_register("MyDomain", EINA_COLOR_GREEN);
52 fail_if(d < 0);
53
54 EINA_LOG_DOM_CRIT(d, "A critical message\n");
55 EINA_LOG_DOM_ERR(d, "An error\n");
56 EINA_LOG_DOM_WARN(d, "A warning\n");
57 EINA_LOG_DOM_DBG(d, "A debug\n");
58 EINA_LOG_DOM_INFO(d, "An info\n");
59
60 eina_shutdown();
61}
62END_TEST
63
64START_TEST(eina_log_domains_registry)
65{
66 fail_if(!eina_init());
67
68 int i;
69 int d[50];
70
71 for (i = 0; i < 50; i++)
72 {
73 d[i] = eina_log_domain_register("Test", EINA_COLOR_GREEN);
74 fail_if(d[i] < 0);
75 }
76
77 for (i = 0; i < 50; i++)
78 eina_log_domain_unregister(d[i]);
79
80 eina_shutdown();
81}
82END_TEST
83
84START_TEST(eina_log_domains_slot_reuse)
85{
86 fail_if(!eina_init());
87 fail_if(!eina_threads_init());
88
89 // Create 9 domains
90 int idx[9];
91 int i;
92
93 for (i = 0; i < 9; i++)
94 {
95 idx[i] = eina_log_domain_register("Test1", EINA_COLOR_GREEN);
96 fail_if(idx[i] < 0);
97 }
98
99 // Slot 0 by default contains the global logger. The above code created
100 // domains for slots indexes from 1 to 9.
101 //
102 // The global logger allocated the first 8 initial slots. The 8th domain
103 // registered on the for loop will create 8 more slots.
104 //
105 // Test will just unregister a domain between 1 and 9 and assure that a new
106 // domain register will be placed on the available slot and not at the end.
107
108 int removed = idx[5];
109 eina_log_domain_unregister(removed);
110
111 int new = eina_log_domain_register("Test Slot", EINA_COLOR_GREEN);
112
113 // Check for slot reuse
114 fail_if(new != removed);
115
116 eina_threads_shutdown();
117 eina_shutdown();
118}
119END_TEST
120
121START_TEST(eina_log_level_indexes)
122{
123 fail_if(!eina_init());
124 fail_if(!eina_threads_init());
125 fail_if(!eina_threads_init());
126
127 int d = eina_log_domain_register("Levels", EINA_COLOR_GREEN);
128 fail_if(d < 0);
129
130 // Displayed unless user sets level lower than -1
131 EINA_LOG(d, -1, "Negative index message\n");
132
133 // Displayed only if user sets level 6 or higher
134 EINA_LOG(d, 6, "Higher level debug\n");
135
136 eina_threads_shutdown();
137 eina_threads_shutdown();
138 eina_shutdown();
139}
140END_TEST
141
142START_TEST(eina_log_customize)
143{
144 int d;
145
146 /* please don't define EINA_LOG_LEVELS for it */
147#define TEST_DOM "_Test_Log_Dom"
148
149 fail_if(!eina_init());
150
151#define test_set_get(func, val) \
152 eina_log_ ## func ## _set(val); \
153 fail_if(eina_log_ ## func ## _get() != val)
154
155 test_set_get(level, -1234);
156 test_set_get(level, 4567);
157
158#define test_set_get_bool(func) \
159 test_set_get(func, EINA_FALSE); \
160 test_set_get(func, EINA_TRUE)
161
162 test_set_get_bool(color_disable);
163 test_set_get_bool(file_disable);
164 test_set_get_bool(function_disable);
165 test_set_get_bool(abort_on_critical);
166
167 test_set_get(abort_on_critical_level, -1234);
168 test_set_get(abort_on_critical_level, 4567);
169
170 fail_if(eina_log_domain_level_get(TEST_DOM) != eina_log_level_get());
171
172 eina_log_domain_level_set(TEST_DOM, -123);
173 fail_if(eina_log_domain_level_get(TEST_DOM) != -123);
174
175 eina_log_domain_level_set(TEST_DOM, 890);
176 fail_if(eina_log_domain_level_get(TEST_DOM) != 890);
177
178 d = eina_log_domain_register(TEST_DOM, EINA_COLOR_GREEN);
179 fail_if(d < 0);
180
181 fail_if(eina_log_domain_level_get(TEST_DOM) != 890);
182 fail_if(eina_log_domain_registered_level_get(d) != 890);
183
184 eina_log_domain_unregister(d);
185 fputs("NOTE: You should see a failed safety check or "
186 "a crash if compiled without safety checks support.\n",
187 stderr);
188 eina_log_abort_on_critical_set(EINA_FALSE);
189 fail_if(eina_log_domain_registered_level_get(d) != EINA_LOG_LEVEL_UNKNOWN);
190
191#undef test_set_get_bool
192#undef test_set_get
193
194 eina_shutdown();
195}
196END_TEST
197
198START_TEST(eina_log_level_name)
199{
200 char name[4];
201
202 fail_if(!eina_init());
203
204#define tst(level, str) \
205 eina_log_level_name_get(level, name); \
206 fail_if(strcmp(name, str) != 0)
207
208 tst(0, "CRI");
209 tst(1, "ERR");
210 tst(2, "WRN");
211 tst(3, "INF");
212 tst(4, "DBG");
213 tst(5, "005");
214 tst(12, "012");
215 tst(369, "369");
216 tst(-1, "-01");
217 tst(-48, "-48");
218
219#undef tst
220
221 eina_shutdown();
222}
223END_TEST
224
225void
226eina_test_log(TCase *tc)
227{
228 tcase_add_test(tc, eina_log_macro);
229 tcase_add_test(tc, eina_log_domains_macros);
230 tcase_add_test(tc, eina_log_domains_registry);
231 tcase_add_test(tc, eina_log_domains_slot_reuse);
232 tcase_add_test(tc, eina_log_level_indexes);
233 tcase_add_test(tc, eina_log_customize);
234 tcase_add_test(tc, eina_log_level_name);
235}
diff --git a/libraries/eina/src/tests/eina_test_magic.c b/libraries/eina/src/tests/eina_test_magic.c
new file mode 100644
index 0000000..d2c3d49
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_magic.c
@@ -0,0 +1,96 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#define EINA_MAGIC_DEBUG
28
29#include "eina_suite.h"
30#include "Eina.h"
31#include "eina_safety_checks.h"
32
33#define EINA_MAGIC_TEST 0x7781fee7
34#define EINA_MAGIC_TEST2 0x42241664
35#define EINA_MAGIC_STRING "Eina Magic Test"
36
37typedef struct _Eina_Magic_Struct Eina_Magic_Struct;
38struct _Eina_Magic_Struct
39{
40 EINA_MAGIC
41};
42
43START_TEST(eina_magic_simple)
44{
45 Eina_Magic_Struct *ems = NULL;
46
47 eina_init();
48
49 eina_magic_string_set(EINA_MAGIC_TEST, EINA_MAGIC_STRING);
50
51#ifdef EINA_SAFETY_CHECKS
52 fprintf(stderr, "you should have a safety check failure below:\n");
53 eina_magic_string_set(EINA_MAGIC_TEST2, NULL);
54 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
55
56 fprintf(stderr, "you should have a safety check failure below:\n");
57 eina_magic_string_set(EINA_MAGIC_TEST2, NULL);
58 fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED);
59#endif
60
61 eina_magic_string_set(EINA_MAGIC_TEST2, EINA_MAGIC_STRING);
62
63 fail_if(eina_magic_string_get(EINA_MAGIC_TEST) == NULL);
64 fail_if(strcmp(eina_magic_string_get(
65 EINA_MAGIC_TEST), EINA_MAGIC_STRING) != 0);
66
67#ifdef EINA_MAGIC_DEBUG
68 fail_if(EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST));
69 fprintf(stderr, "you should see 'Input handle pointer is NULL' below\n");
70 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
71
72 ems = malloc(sizeof (Eina_Magic_Struct));
73 fail_if(!ems);
74 EINA_MAGIC_SET(ems, EINA_MAGIC_TEST);
75
76 fail_if(!EINA_MAGIC_CHECK(ems, EINA_MAGIC_TEST));
77
78 EINA_MAGIC_SET(ems, EINA_MAGIC_NONE);
79 fprintf(stderr,
80 "you should see 'Input handle has already been freed' below\n");
81 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
82
83 EINA_MAGIC_SET(ems, 42424242);
84 fprintf(stderr, "you should see 'Input handle is wrong type' below\n");
85 EINA_MAGIC_FAIL(ems, EINA_MAGIC_TEST);
86#endif
87
88 eina_shutdown();
89}
90END_TEST
91
92void eina_test_magic(TCase *tc)
93{
94 tcase_add_test(tc, eina_magic_simple);
95}
96
diff --git a/libraries/eina/src/tests/eina_test_main.c b/libraries/eina/src/tests/eina_test_main.c
new file mode 100644
index 0000000..04364a1
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_main.c
@@ -0,0 +1,62 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28 START_TEST(eina_simple)
29{
30 fail_if(eina_init() != 2); /* one init by test suite */
31 fail_if(eina_shutdown() != 1);
32}
33END_TEST
34
35START_TEST(eina_cpu)
36{
37 fail_if(eina_init() != 2); /* one init by test suite */
38
39 fail_if(eina_cpu_count() <= 0);
40
41 eina_cpu_features_get();
42
43 fail_if(eina_shutdown() != 1);
44}
45END_TEST
46
47START_TEST(eina_hamster)
48{
49 fail_if(eina_init() != 2); /* one init by test suite */
50
51 fail_if(eina_hamster_count() <= 0);
52
53 fail_if(eina_shutdown() != 1);
54}
55END_TEST
56
57void eina_test_main(TCase *tc)
58{
59 tcase_add_test(tc, eina_simple);
60 tcase_add_test(tc, eina_cpu);
61 tcase_add_test(tc, eina_hamster);
62}
diff --git a/libraries/eina/src/tests/eina_test_matrixsparse.c b/libraries/eina/src/tests/eina_test_matrixsparse.c
new file mode 100644
index 0000000..e07b1ee
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_matrixsparse.c
@@ -0,0 +1,489 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6
7#include "eina_suite.h"
8#include "Eina.h"
9
10#define MAX_ROWS 10
11#define MAX_COLS 10
12
13static void eina_matrixsparse_free_cell_cb(void *user_data __UNUSED__,
14 void *cell_data __UNUSED__)
15{
16}
17
18static void matrixsparse_initialize(Eina_Matrixsparse *matrix,
19 long data[MAX_ROWS][MAX_COLS],
20 unsigned long nrows,
21 unsigned long ncols)
22{
23 unsigned long i, j;
24 Eina_Bool r;
25
26 for (i = 0; i < nrows; i++)
27 for (j = 0; j < ncols; j++)
28 if (data[i][j] != 0)
29 {
30 r = eina_matrixsparse_data_idx_set(matrix, i, j, &data[i][j]);
31 fail_if(r == EINA_FALSE);
32 }
33
34}
35
36static void matrixsparse_check(Eina_Matrixsparse *matrix,
37 long data[MAX_ROWS][MAX_COLS],
38 unsigned long nrows __UNUSED__,
39 unsigned long ncols __UNUSED__)
40{
41 unsigned long i, j;
42 long *test1;
43
44 for (i = 0; i < MAX_ROWS; i++)
45 for (j = 0; j < MAX_COLS; j++)
46 {
47 if (data[i][j] != 0)
48 {
49 test1 = eina_matrixsparse_data_idx_get(matrix, i, j);
50 fail_if(test1 == NULL || *test1 != data[i][j]);
51 }
52 else
53 {
54 test1 = eina_matrixsparse_data_idx_get(matrix, i, j);
55 fail_if(test1 != NULL);
56 }
57 }
58}
59
60START_TEST(eina_test_simple)
61{
62 Eina_Matrixsparse *matrix = NULL;
63 Eina_Matrixsparse_Cell *cell = NULL;
64 Eina_Bool r;
65 long *test1, value, value2, value3, value4;
66 unsigned long i, j;
67 unsigned long row, col;
68
69 long data[MAX_ROWS][MAX_COLS];
70
71 for (i = 0; i < MAX_ROWS; i++)
72 for (j = 0; j < MAX_COLS; j++)
73 data[i][j] = 0;
74
75 data[0][3] = 3;
76 data[1][3] = 13;
77 data[1][6] = 16;
78 data[1][9] = 19;
79 data[1][8] = 18;
80 data[1][7] = 17;
81 data[2][8] = 28;
82 data[2][7] = 27;
83 data[2][6] = 26;
84 data[3][5] = 35;
85 data[3][6] = 36;
86 data[3][7] = 37;
87 data[3][9] = 39;
88 data[3][0] = 30;
89 data[4][6] = 46;
90 data[4][8] = 48;
91 data[4][2] = 42;
92 data[4][3] = 43;
93 data[4][7] = 47;
94 data[5][3] = 53;
95 data[6][3] = 63;
96 data[6][4] = 64;
97 data[6][6] = 66;
98 data[7][3] = 73;
99 data[7][7] = 77;
100 data[8][8] = 88;
101
102 value = -1;
103 value2 = -2;
104 value3 = -3;
105 value4 = -4;
106
107 eina_init();
108
109 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
110 eina_matrixsparse_free_cell_cb, data);
111 fail_if(matrix == NULL);
112
113 r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell);
114 fail_if(r == EINA_FALSE);
115 fail_if(cell != NULL);
116
117 matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS);
118
119 /* data fetching */
120 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 0);
121 fail_if(test1 == NULL);
122 fail_if(*test1 != data[3][0]);
123
124 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5);
125 fail_if(test1 == NULL);
126 fail_if(*test1 != data[3][5]);
127
128 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 6);
129 fail_if(test1 == NULL);
130 fail_if(*test1 != data[3][6]);
131
132 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 1);
133 fail_if(test1 != NULL);
134
135 r = eina_matrixsparse_cell_idx_get(matrix, 3, 5, &cell);
136 fail_if(r == EINA_FALSE);
137 fail_if(cell == NULL);
138
139 test1 = eina_matrixsparse_cell_data_get(cell);
140 fail_if(test1 == NULL);
141 fail_if(*test1 != data[3][5]);
142
143 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
144 fail_if(r == EINA_FALSE);
145 fail_if(row != 3 || col != 5);
146
147 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
148 fail_if(*test1 != data[4][3]);
149
150 test1 = eina_matrixsparse_data_idx_get(matrix, 1, 3);
151 fail_if(*test1 != data[1][3]);
152
153 /* data changing */
154 r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]);
155 fail_if(r == EINA_FALSE);
156
157 r = eina_matrixsparse_data_idx_replace(matrix, 4, 3, &value, (void **)&test1);
158 fail_if(r == EINA_FALSE);
159 fail_if(test1 == NULL);
160 fail_if(*test1 != data[4][3]);
161 data[4][3] = value;
162
163 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
164 fail_if(test1 == NULL || *test1 != value);
165
166 r = eina_matrixsparse_cell_data_replace(cell, &value2, (void **)&test1);
167 fail_if(r == EINA_FALSE);
168 fail_if(test1 == NULL);
169 fail_if(*test1 != data[3][5]);
170 data[3][5] = value2;
171
172 test1 = eina_matrixsparse_data_idx_get(matrix, 3, 5);
173 fail_if(test1 == NULL);
174 fail_if(*test1 != value2);
175
176 r = eina_matrixsparse_cell_idx_get(matrix, 4, 2, &cell);
177 fail_if(r == EINA_FALSE || cell == NULL);
178
179 r = eina_matrixsparse_cell_data_set(cell, &value3);
180 fail_if(r == EINA_FALSE);
181 data[4][2] = value3;
182
183 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 2);
184 fail_if(test1 == NULL || *test1 != value3);
185
186 r = eina_matrixsparse_data_idx_replace(matrix,
187 6,
188 5,
189 &value4,
190 (void **)&test1);
191 fail_if(r == EINA_FALSE || test1 != NULL);
192 data[6][5] = value4;
193
194
195 /* cell deletion */
196 r = eina_matrixsparse_row_idx_clear(matrix, 4);
197 fail_if(r == EINA_FALSE);
198 data[4][6] = 0;
199 data[4][8] = 0;
200 data[4][2] = 0;
201 data[4][3] = 0;
202 data[4][7] = 0;
203
204 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 3);
205 fail_if(test1 != NULL);
206
207 test1 = eina_matrixsparse_data_idx_get(matrix, 4, 8);
208 fail_if(test1 != NULL);
209
210 test1 = eina_matrixsparse_data_idx_get(matrix, 5, 3);
211 fail_if(*test1 != data[5][3]);
212
213 r = eina_matrixsparse_column_idx_clear(matrix, 3);
214 fail_if(r != EINA_TRUE);
215 data[0][3] = 0;
216 data[1][3] = 0;
217 data[4][3] = 0;
218 data[5][3] = 0;
219 data[6][3] = 0;
220 data[7][3] = 0;
221
222 r = eina_matrixsparse_cell_idx_clear(matrix, 3, 5);
223 fail_if(r != EINA_TRUE);
224 data[3][5] = 0;
225
226 r = eina_matrixsparse_cell_idx_clear(matrix, 3, 9);
227 fail_if(r != EINA_TRUE);
228 data[3][9] = 0;
229
230 r = eina_matrixsparse_cell_idx_clear(matrix, 4, 3);
231 fail_if(r != EINA_TRUE);
232 data[4][3] = 0;
233
234 r = eina_matrixsparse_cell_idx_get(matrix, 3, 7, &cell);
235 fail_if(r == EINA_FALSE);
236 fail_if(cell == NULL);
237
238 r = eina_matrixsparse_cell_clear(cell);
239 fail_if(r == EINA_FALSE);
240 data[3][7] = 0;
241
242 r = eina_matrixsparse_cell_idx_get(matrix, 2, 7, &cell);
243 fail_if(r == EINA_FALSE);
244
245 r = eina_matrixsparse_cell_idx_clear(matrix, 2, 8);
246 fail_if(r == EINA_FALSE);
247 data[2][8] = 0;
248
249 r = eina_matrixsparse_cell_idx_clear(matrix, 2, 7);
250 fail_if(r == EINA_FALSE);
251 data[2][7] = 0;
252
253 r = eina_matrixsparse_cell_idx_get(matrix, 7, 7, &cell);
254 fail_if(r == EINA_FALSE);
255
256 r = eina_matrixsparse_row_idx_clear(matrix, 8);
257 fail_if(r == EINA_FALSE);
258 data[8][8] = 0;
259
260 r = eina_matrixsparse_row_idx_clear(matrix, 7);
261 fail_if(r == EINA_FALSE);
262 data[7][3] = 0;
263 data[7][7] = 0;
264
265 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
266 eina_matrixsparse_free(matrix);
267
268 eina_shutdown();
269}
270END_TEST
271
272START_TEST(eina_test_resize)
273{
274 Eina_Matrixsparse *matrix = NULL;
275 Eina_Bool r;
276 unsigned long i, j;
277 unsigned long nrows, ncols;
278
279 long data[MAX_ROWS][MAX_COLS];
280
281 for (i = 0; i < MAX_ROWS; i++)
282 for (j = 0; j < MAX_COLS; j++)
283 data[i][j] = 0;
284
285 eina_init();
286
287 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
288 eina_matrixsparse_free_cell_cb, data);
289 fail_if(matrix == NULL);
290
291 /* cell insertion */
292 data[0][5] = 5;
293 data[1][0] = 10;
294 data[1][3] = 13;
295 data[1][6] = 16;
296 data[1][9] = 19;
297 data[1][8] = 18;
298 data[1][7] = 17;
299 data[2][8] = 28;
300 data[2][7] = 27;
301 data[2][6] = 26;
302 data[3][0] = 30;
303 data[3][5] = 35;
304 data[3][6] = 36;
305 data[3][7] = 37;
306 data[3][9] = 39;
307 data[3][0] = 30;
308 data[4][8] = 48;
309 data[4][2] = 42;
310 data[4][3] = 43;
311 data[4][7] = 47;
312 data[4][6] = 46;
313 data[5][3] = 53;
314 data[6][3] = 63;
315 data[6][4] = 64;
316 data[6][6] = 66;
317 data[7][3] = 73;
318 data[7][7] = 77;
319 data[8][8] = 88;
320
321 matrixsparse_initialize(matrix, data, MAX_ROWS, MAX_COLS);
322
323 eina_matrixsparse_size_get(matrix, &nrows, &ncols);
324 fail_if(nrows != MAX_ROWS || ncols != MAX_COLS);
325
326 r = eina_matrixsparse_size_set(matrix, nrows - 2, ncols - 2);
327 fail_if(r == EINA_FALSE);
328 data[1][9] = 0;
329 data[1][8] = 0;
330 data[2][8] = 0;
331 data[3][9] = 0;
332 data[4][8] = 0;
333 data[8][8] = 0;
334 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
335
336 r = eina_matrixsparse_size_set(matrix, 5, 1);
337 fail_if(r == EINA_FALSE);
338 data[0][5] = 0;
339 data[1][3] = 0;
340 data[1][6] = 0;
341 data[1][7] = 0;
342 data[2][7] = 0;
343 data[2][6] = 0;
344 data[3][5] = 0;
345 data[3][6] = 0;
346 data[3][7] = 0;
347 data[4][2] = 0;
348 data[4][3] = 0;
349 data[4][7] = 0;
350 data[4][6] = 0;
351 data[5][3] = 0;
352 data[6][3] = 0;
353 data[6][4] = 0;
354 data[6][6] = 0;
355 data[7][3] = 0;
356 data[7][7] = 0;
357 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
358
359 r = eina_matrixsparse_size_set(matrix, 1, 1);
360 fail_if(r == EINA_FALSE);
361 data[3][0] = 0;
362 data[1][0] = 0;
363 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
364
365 r = eina_matrixsparse_size_set(matrix, 5, 4);
366 fail_if(r == EINA_FALSE);
367
368 r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]);
369 fail_if(r == EINA_FALSE);
370 data[4][2] = 42;
371 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
372
373 r = eina_matrixsparse_size_set(matrix, 5, 1);
374 fail_if(r == EINA_FALSE);
375 data[4][2] = 0;
376 matrixsparse_check(matrix, data, MAX_ROWS, MAX_COLS);
377
378 eina_matrixsparse_free(matrix);
379
380 eina_shutdown();
381}
382END_TEST
383
384START_TEST(eina_test_iterators)
385{
386 Eina_Matrixsparse *matrix = NULL;
387 Eina_Matrixsparse_Cell *cell = NULL;
388 Eina_Iterator *it = NULL;
389 Eina_Bool r;
390 long *test1, value;
391 unsigned long i, j;
392 unsigned long row, col;
393
394 long data[MAX_ROWS][MAX_COLS];
395
396 value = 0;
397 for (i = 0; i < MAX_ROWS; i++)
398 {
399 for (j = 0; j < MAX_COLS; j++)
400 {
401 data[i][j] = value++;
402 printf("%4ld ", data[i][j]);
403 }
404 printf("\n");
405 }
406
407 eina_init();
408
409 matrix = eina_matrixsparse_new(MAX_ROWS, MAX_COLS,
410 eina_matrixsparse_free_cell_cb, data);
411 fail_if(matrix == NULL);
412
413 r = eina_matrixsparse_data_idx_set(matrix, 3, 5, &data[3][5]);
414 fail_if(r == EINA_FALSE);
415 r = eina_matrixsparse_data_idx_set(matrix, 3, 6, &data[3][6]);
416 fail_if(r == EINA_FALSE);
417 r = eina_matrixsparse_data_idx_set(matrix, 3, 7, &data[3][7]);
418 fail_if(r == EINA_FALSE);
419 r = eina_matrixsparse_data_idx_set(matrix, 3, 9, &data[3][9]);
420 fail_if(r == EINA_FALSE);
421 r = eina_matrixsparse_data_idx_set(matrix, 3, 0, &data[3][0]);
422 fail_if(r == EINA_FALSE);
423 r = eina_matrixsparse_data_idx_set(matrix, 4, 6, &data[4][6]);
424 fail_if(r == EINA_FALSE);
425 r = eina_matrixsparse_data_idx_set(matrix, 4, 8, &data[4][8]);
426 fail_if(r == EINA_FALSE);
427 r = eina_matrixsparse_data_idx_set(matrix, 4, 2, &data[4][2]);
428 fail_if(r == EINA_FALSE);
429 r = eina_matrixsparse_data_idx_set(matrix, 4, 3, &data[4][3]);
430 fail_if(r == EINA_FALSE);
431 r = eina_matrixsparse_data_idx_set(matrix, 4, 7, &data[4][7]);
432 fail_if(r == EINA_FALSE);
433 r = eina_matrixsparse_data_idx_set(matrix, 6, 4, &data[6][4]);
434 fail_if(r == EINA_FALSE);
435 r = eina_matrixsparse_data_idx_set(matrix, 5, 3, &data[5][3]);
436 fail_if(r == EINA_FALSE);
437 r = eina_matrixsparse_data_idx_set(matrix, 6, 3, &data[6][3]);
438 fail_if(r == EINA_FALSE);
439 r = eina_matrixsparse_data_idx_set(matrix, 7, 3, &data[7][3]);
440 fail_if(r == EINA_FALSE);
441 r = eina_matrixsparse_data_idx_set(matrix, 0, 3, &data[0][3]);
442 fail_if(r == EINA_FALSE);
443 r = eina_matrixsparse_data_idx_set(matrix, 1, 3, &data[1][3]);
444 fail_if(r == EINA_FALSE);
445 r = eina_matrixsparse_data_idx_set(matrix, 1, 6, &data[1][6]);
446 fail_if(r == EINA_FALSE);
447 r = eina_matrixsparse_data_idx_set(matrix, 1, 9, &data[1][9]);
448 fail_if(r == EINA_FALSE);
449
450 it = eina_matrixsparse_iterator_new(matrix);
451 fail_if(it == NULL);
452 EINA_ITERATOR_FOREACH(it, cell)
453 {
454 fail_if(cell == NULL);
455 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
456 fail_if(r == EINA_FALSE);
457
458 test1 = eina_matrixsparse_cell_data_get(cell);
459 fail_if(test1 == NULL || *test1 != data[row][col]);
460 }
461 eina_iterator_free(it);
462
463 it = eina_matrixsparse_iterator_complete_new(matrix);
464 fail_if(it == NULL);
465 EINA_ITERATOR_FOREACH(it, cell)
466 {
467 fail_if(cell == NULL);
468 r = eina_matrixsparse_cell_position_get(cell, &row, &col);
469 fail_if(r == EINA_FALSE);
470
471 test1 = eina_matrixsparse_cell_data_get(cell);
472 if (test1)
473 fail_if(*test1 != data[row][col]);
474 }
475 eina_iterator_free(it);
476
477 eina_matrixsparse_free(matrix);
478
479 eina_shutdown();
480}
481END_TEST
482
483void
484eina_test_matrixsparse(TCase *tc)
485{
486 tcase_add_test(tc, eina_test_simple);
487 tcase_add_test(tc, eina_test_resize);
488 tcase_add_test(tc, eina_test_iterators);
489}
diff --git a/libraries/eina/src/tests/eina_test_mempool.c b/libraries/eina/src/tests/eina_test_mempool.c
new file mode 100644
index 0000000..7106afa
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_mempool.c
@@ -0,0 +1,187 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include "eina_suite.h"
24#include "Eina.h"
25
26static Eina_Array *_modules;
27
28static void
29_mempool_init(void)
30{
31 eina_init();
32 /* force modules to be loaded in case they are not installed */
33 _modules = eina_module_list_get(NULL,
34 PACKAGE_BUILD_DIR "/src/modules",
35 EINA_TRUE,
36 NULL,
37 NULL);
38 eina_module_list_load(_modules);
39}
40
41static void
42_mempool_shutdown(void)
43{
44 eina_module_list_free(_modules);
45 /* TODO delete the list */
46 eina_shutdown();
47}
48
49static void
50_eina_mempool_test(Eina_Mempool *mp, Eina_Bool with_realloc, Eina_Bool with_gc)
51{
52 int *tbl[512];
53 int i;
54
55 fail_if(!mp);
56
57 for (i = 0; i < 512; ++i)
58 {
59 tbl[i] = eina_mempool_malloc(mp, sizeof (int));
60 fail_if(!tbl[i]);
61 *tbl[i] = i;
62 }
63
64 for (i = 0; i < 512; ++i)
65 fail_if(*tbl[i] != i);
66
67 for (i = 0; i < 256; ++i)
68 eina_mempool_free(mp, tbl[i]);
69
70 if (with_realloc)
71 fail_if(eina_mempool_realloc(mp, tbl[500], 25) == NULL);
72 else
73 fail_if(eina_mempool_realloc(mp, tbl[500], 25) != NULL);
74
75 if (with_gc)
76 {
77 eina_mempool_gc(mp);
78 eina_mempool_statistics(mp);
79 }
80
81 eina_mempool_del(mp);
82}
83
84#ifdef EINA_BUILD_CHAINED_POOL
85START_TEST(eina_mempool_chained_mempool)
86{
87 Eina_Mempool *mp;
88
89 _mempool_init();
90
91 mp = eina_mempool_add("chained_mempool", "test", NULL, sizeof (int), 256);
92 _eina_mempool_test(mp, EINA_FALSE, EINA_FALSE);
93
94 _mempool_shutdown();
95}
96END_TEST
97#endif
98
99#ifdef EINA_BUILD_PASS_THROUGH
100START_TEST(eina_mempool_pass_through)
101{
102 Eina_Mempool *mp;
103
104 _mempool_init();
105
106 mp = eina_mempool_add("pass_through", "test", NULL, sizeof (int), 8, 0);
107 _eina_mempool_test(mp, EINA_TRUE, EINA_FALSE);
108
109 _mempool_shutdown();
110}
111END_TEST
112#endif
113
114#ifdef EINA_BUILD_FIXED_BITMAP
115START_TEST(eina_mempool_fixed_bitmap)
116{
117 Eina_Mempool *mp;
118
119 _mempool_init();
120
121 mp = eina_mempool_add("fixed_bitmap", "test", NULL, sizeof (int));
122 _eina_mempool_test(mp, EINA_FALSE, EINA_FALSE);
123
124 _mempool_shutdown();
125}
126END_TEST
127#endif
128
129#ifdef EINA_BUILD_EMEMOA_FIXED
130START_TEST(eina_mempool_ememoa_fixed)
131{
132 Eina_Mempool *mp;
133
134 _mempool_init();
135
136 mp = eina_mempool_add("ememoa_fixed", "test", NULL, sizeof (int), 8, 0);
137 _eina_mempool_test(mp, EINA_FALSE, EINA_TRUE);
138
139 _mempool_shutdown();
140}
141END_TEST
142#endif
143
144#ifdef EINA_BUILD_EMEMOA_UNKNOWN
145START_TEST(eina_mempool_ememoa_unknown)
146{
147 Eina_Mempool *mp;
148
149 _mempool_init();
150
151 mp = eina_mempool_add("ememoa_unknown",
152 "test",
153 NULL,
154 0,
155 2,
156 sizeof (int),
157 8,
158 sizeof (int) * 2,
159 8);
160 _eina_mempool_test(mp, EINA_TRUE, EINA_TRUE);
161
162 _mempool_shutdown();
163}
164END_TEST
165#endif
166
167void
168eina_test_mempool(TCase *tc)
169{
170#ifdef EINA_BUILD_CHAINED_POOL
171 tcase_add_test(tc, eina_mempool_chained_mempool);
172#endif
173#ifdef EINA_BUILD_PASS_THROUGH
174 tcase_add_test(tc, eina_mempool_pass_through);
175#endif
176#ifdef EINA_BUILD_FIXED_BITMAP
177 tcase_add_test(tc, eina_mempool_fixed_bitmap);
178#endif
179#ifdef EINA_BUILD_EMEMOA_FIXED
180 tcase_add_test(tc, eina_mempool_ememoa_fixed);
181#endif
182#ifdef EINA_BUILD_EMEMOA_UNKNOWN
183 tcase_add_test(tc, eina_mempool_ememoa_unknown);
184#endif
185}
186
187
diff --git a/libraries/eina/src/tests/eina_test_module.c b/libraries/eina/src/tests/eina_test_module.c
new file mode 100644
index 0000000..56bdca7
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_module.c
@@ -0,0 +1,70 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28static Eina_Bool list_cb(Eina_Module *m, void *data __UNUSED__)
29{
30 int *sym;
31 const char *file;
32
33 /* the reference count */
34 eina_module_load(m);
35 /* get */
36 sym = eina_module_symbol_get(m, "dummy_symbol");
37 fail_if(!sym);
38 fail_if(*sym != 0xbad);
39 file = eina_module_file_get(m);
40 fail_if(!file);
41 eina_module_unload(m);
42
43 return EINA_TRUE;
44}
45
46
47START_TEST(eina_module_load_unload)
48{
49 Eina_Array *_modules;
50
51 eina_init();
52 _modules = eina_module_list_get(NULL,
53 PACKAGE_BUILD_DIR "/src/tests/",
54 EINA_TRUE,
55 &list_cb,
56 NULL);
57 fail_if(!_modules);
58 eina_module_list_load(_modules);
59 eina_module_list_unload(_modules);
60 eina_module_list_free(_modules);
61 /* TODO delete the list */
62 eina_shutdown();
63}
64END_TEST
65
66void
67eina_test_module(TCase *tc)
68{
69 tcase_add_test(tc, eina_module_load_unload);
70}
diff --git a/libraries/eina/src/tests/eina_test_module_dummy.c b/libraries/eina/src/tests/eina_test_module_dummy.c
new file mode 100644
index 0000000..d42b530
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_module_dummy.c
@@ -0,0 +1,22 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdio.h>
6
7#include "Eina.h"
8
9Eina_Bool dummy_module_init(void)
10{
11 return EINA_TRUE;
12}
13
14void dummy_module_shutdown(void)
15{
16
17}
18
19EAPI int dummy_symbol = 0xbad;
20
21EINA_MODULE_INIT(dummy_module_init);
22EINA_MODULE_SHUTDOWN(dummy_module_shutdown);
diff --git a/libraries/eina/src/tests/eina_test_quadtree.c b/libraries/eina/src/tests/eina_test_quadtree.c
new file mode 100644
index 0000000..52faeec
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_quadtree.c
@@ -0,0 +1,195 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <assert.h>
24#include <stdio.h>
25
26#include "eina_suite.h"
27#include "Eina.h"
28
29static Eina_Quad_Direction
30_eina_quadtree_rectangle_vert(const void *object, size_t middle)
31{
32 const Eina_Rectangle *r = object;
33
34 if (r->y + r->h < (int)middle)
35 return EINA_QUAD_LEFT;
36
37 if (r->y > (int)middle)
38 return EINA_QUAD_RIGHT;
39
40 return EINA_QUAD_BOTH;
41}
42
43static Eina_Quad_Direction
44_eina_quadtree_rectangle_hort(const void *object, size_t middle)
45{
46 const Eina_Rectangle *r = object;
47
48 if (r->x + r->w < (int)middle)
49 return EINA_QUAD_LEFT;
50
51 if (r->x > (int)middle)
52 return EINA_QUAD_RIGHT;
53
54 return EINA_QUAD_BOTH;
55}
56
57START_TEST(eina_quadtree_collision)
58{
59 struct
60 {
61 Eina_Rectangle r;
62 Eina_QuadTree_Item *item;
63 } objects[] = {
64 { { 10, 10, 30, 30 }, NULL },
65 { { 20, 20, 30, 30 }, NULL },
66 { { 5, 30, 30, 30 }, NULL },
67 { { 70, 130, 100, 100 }, NULL },
68 { { 10, 220, 50, 40 }, NULL },
69 { { 310, 20, 50, 30 }, NULL },
70 { { 300, 220, 40, 40 }, NULL },
71 { { 500, 150, 40, 40 }, NULL },
72 { { 500, 220, 40, 40 }, NULL },
73 { { 330, 250, 40, 40 }, NULL },
74 { { 300, 400, 40, 40 }, NULL },
75 { { 10, 400, 40, 40 }, NULL },
76 { { 0, 0, 0, 0 }, NULL }
77 };
78 struct
79 {
80 Eina_Rectangle r;
81 int count;
82 int result[20];
83 } tests [] = {
84 { { 600, 400, 40, 40 }, 4, { 4, 6, 8, 10 } },
85 { { 20, 30, 10, 10 }, 7, { 0, 1, 2, 4, 5, 6, 8 } },
86 { { 0, 0, 0, 0 }, -1, {} },
87 };
88 int hidden[] = { 4, 5, 6, 8, 10 };
89 int show[] = { 0, 1, 2 };
90 Eina_QuadTree *q;
91 Eina_Inlist *head;
92 Eina_Rectangle *r;
93 int count;
94 int i;
95
96 fail_if(!eina_init());
97
98 q = eina_quadtree_new(640, 480,
99 _eina_quadtree_rectangle_vert,
100 _eina_quadtree_rectangle_hort);
101
102 fail_if(!q);
103
104 for (i = 0; objects[i].r.w != 0 && objects[i].r.h != 0; ++i)
105 {
106 objects[i].item = eina_quadtree_add(q, &objects[i].r);
107 fail_if(!objects[i].item);
108 fail_if(!eina_quadtree_show(objects[i].item));
109 }
110
111 eina_quadtree_resize(q, 640, 480);
112
113 for (i = 0; tests[i].count != -1; ++i)
114 {
115 head = eina_quadtree_collide(q,
116 tests[i].r.x, tests[i].r.y,
117 tests[i].r.w, tests[i].r.h);
118
119 count = 0;
120 while (head)
121 {
122 int k;
123
124 r = eina_quadtree_object(head);
125
126 for (k = 0; k < tests[i].count; ++k)
127 {
128 if (&objects[tests[i].result[k]].r == r)
129 break;
130 }
131 fail_if(k == tests[i].count);
132
133 head = head->next;
134 count++;
135 }
136 fail_if(count != tests[i].count);
137 }
138
139 for (i = 0; i < (int)(sizeof (hidden) / sizeof (int)); ++i)
140 eina_quadtree_hide(objects[hidden[i]].item);
141 for (i = 0; i < (int)(sizeof (show) / sizeof (int)); ++i)
142 eina_quadtree_show(objects[show[i]].item);
143
144 head = eina_quadtree_collide(q,
145 tests[1].r.x, tests[1].r.y,
146 tests[1].r.w, tests[1].r.h);
147
148 count = 0;
149 while (head)
150 {
151 r = eina_quadtree_object(head);
152
153 fail_if(r != &objects[tests[1].result[show[count]]].r);
154
155 head = head->next;
156 count++;
157 }
158 fail_if(count != 3);
159
160 eina_quadtree_cycle(q);
161 eina_quadtree_show(objects[4].item);
162 eina_quadtree_increase(objects[4].item);
163 eina_quadtree_show(objects[5].item);
164 eina_quadtree_increase(objects[5].item);
165 eina_quadtree_del(objects[5].item);
166 eina_quadtree_change(objects[10].item);
167 eina_quadtree_increase(objects[10].item);
168
169 eina_quadtree_resize(q, 641, 480);
170
171 head = eina_quadtree_collide(q,
172 tests[0].r.x, tests[0].r.y,
173 tests[0].r.w, tests[0].r.h);
174
175 count = 0;
176 while (head)
177 {
178 r = eina_quadtree_object(head);
179
180 head = head->next;
181 count++;
182 }
183 fail_if(count != 1);
184
185 eina_quadtree_free(q);
186
187 eina_shutdown();
188}
189END_TEST
190
191void
192eina_test_quadtree(TCase *tc)
193{
194 tcase_add_test(tc, eina_quadtree_collision);
195}
diff --git a/libraries/eina/src/tests/eina_test_rbtree.c b/libraries/eina/src/tests/eina_test_rbtree.c
new file mode 100644
index 0000000..fabe2bf
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_rbtree.c
@@ -0,0 +1,452 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <time.h>
26
27#include "eina_suite.h"
28#include "Eina.h"
29
30static inline Eina_Bool
31_eina_rbtree_is_red(Eina_Rbtree *tree)
32{
33 return tree != NULL && tree->color == EINA_RBTREE_RED;
34}
35
36static int
37_eina_rbtree_black_height(Eina_Rbtree *tree, Eina_Rbtree_Cmp_Node_Cb cmp)
38{
39 Eina_Rbtree *left;
40 Eina_Rbtree *right;
41 Eina_Rbtree_Direction dir;
42 int left_height;
43 int right_height;
44
45 if (!tree)
46 return 1;
47
48 left = tree->son[EINA_RBTREE_LEFT];
49 right = tree->son[EINA_RBTREE_RIGHT];
50
51 /* Consecutive red links. */
52 fail_if(_eina_rbtree_is_red(tree) &&
53 (_eina_rbtree_is_red(left) || _eina_rbtree_is_red(right)));
54
55 left_height = _eina_rbtree_black_height(left, cmp);
56 right_height = _eina_rbtree_black_height(right, cmp);
57
58 /* Check binary search tree. */
59 if (left)
60 {
61 dir = cmp(tree, left, NULL);
62 fail_if(dir != EINA_RBTREE_LEFT);
63 }
64
65 if (right)
66 {
67 dir = cmp(tree, right, NULL);
68 fail_if(dir != EINA_RBTREE_RIGHT);
69 }
70
71 /* Check black height */
72 if (left_height != right_height)
73 fprintf(stderr, "%i != %i\n", left_height, right_height);
74
75 fail_if(left_height != right_height);
76
77 return _eina_rbtree_is_red(tree) ? left_height : left_height + 1;
78}
79
80typedef struct _Eina_Rbtree_Int Eina_Rbtree_Int;
81struct _Eina_Rbtree_Int
82{
83 Eina_Rbtree node;
84 int value;
85};
86
87static Eina_Rbtree_Direction
88eina_rbtree_int_cmp(const Eina_Rbtree_Int *left,
89 const Eina_Rbtree_Int *right,
90 __UNUSED__ void *data)
91{
92 fail_if(!left);
93 fail_if(!right);
94
95 if (left->value < right->value)
96 return EINA_RBTREE_LEFT;
97
98 return EINA_RBTREE_RIGHT;
99}
100
101static int
102eina_rbtree_int_key(const Eina_Rbtree_Int *node,
103 const int *key,
104 __UNUSED__ int length,
105 __UNUSED__ void *data)
106{
107 fail_if(!node);
108 return node->value - *key;
109}
110
111static Eina_Rbtree_Int *
112_eina_rbtree_int_new(int value)
113{
114 Eina_Rbtree_Int *it;
115
116 it = malloc(sizeof (Eina_Rbtree_Int));
117 fail_if(!it);
118
119 it->value = value;
120
121 return it;
122}
123
124START_TEST(eina_rbtree_insertion)
125{
126 Eina_Rbtree_Int *root = NULL;
127 Eina_Rbtree_Int *item;
128 int i;
129
130 srand(time(NULL));
131
132 for (i = 0; i < 500; ++i)
133 {
134 item = _eina_rbtree_int_new(rand());
135 root = (Eina_Rbtree_Int *)eina_rbtree_inline_insert(
136 &root->node,
137 &item->node,
138 EINA_RBTREE_CMP_NODE_CB(
139 eina_rbtree_int_cmp),
140 NULL);
141 }
142
143 _eina_rbtree_black_height(&root->node,
144 EINA_RBTREE_CMP_NODE_CB(
145 eina_rbtree_int_cmp));
146}
147END_TEST
148
149START_TEST(eina_rbtree_lookup)
150{
151 Eina_Rbtree_Int *root = NULL;
152 Eina_Rbtree_Int *item;
153 int list[] = { 50, 100, 10, 43, 23 };
154 unsigned int i;
155
156 for (i = 0; i < sizeof (list) / sizeof (int); ++i)
157 {
158 item = _eina_rbtree_int_new(list[i]);
159 root = (Eina_Rbtree_Int *)eina_rbtree_inline_insert(
160 &root->node,
161 &item->node,
162 EINA_RBTREE_CMP_NODE_CB(
163 eina_rbtree_int_cmp),
164 NULL);
165 }
166
167 item = (Eina_Rbtree_Int *)eina_rbtree_inline_lookup(&root->node,
168 &list[0],
169 sizeof(int),
170 EINA_RBTREE_CMP_KEY_CB(
171 eina_rbtree_int_key),
172 NULL);
173 fail_if(!item);
174
175 i = 42;
176 item =
177 (Eina_Rbtree_Int *)eina_rbtree_inline_lookup(&root->node,
178 &i,
179 sizeof(int),
180 EINA_RBTREE_CMP_KEY_CB(
181 eina_rbtree_int_key),
182 NULL);
183 fail_if(item);
184}
185END_TEST
186
187START_TEST(eina_rbtree_remove)
188{
189 Eina_Rbtree_Int *root = NULL;
190 Eina_Rbtree_Int *item;
191 Eina_Array *ea;
192 Eina_Array_Iterator it;
193 unsigned int i;
194
195 eina_init();
196
197 ea = eina_array_new(11);
198 fail_if(!ea);
199
200 srand(time(NULL));
201
202 for (i = 0; i < 500; ++i)
203 {
204 item = _eina_rbtree_int_new(rand());
205 eina_array_push(ea, item);
206 root = (Eina_Rbtree_Int *)eina_rbtree_inline_insert(
207 &root->node,
208 &item->node,
209 EINA_RBTREE_CMP_NODE_CB(
210 eina_rbtree_int_cmp),
211 NULL);
212 }
213
214 _eina_rbtree_black_height(&root->node,
215 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
216
217 EINA_ARRAY_ITER_NEXT(ea, i, item, it)
218 {
219 root = (Eina_Rbtree_Int *)eina_rbtree_inline_remove(
220 &root->node,
221 &item->node,
222 EINA_RBTREE_CMP_NODE_CB(
223 eina_rbtree_int_cmp),
224 NULL);
225 _eina_rbtree_black_height(&root->node,
226 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
227 }
228
229 fail_if(root != NULL);
230
231 eina_shutdown();
232}
233END_TEST
234
235START_TEST(eina_rbtree_simple_remove)
236{
237 Eina_Rbtree *root = NULL;
238 Eina_Rbtree *lookup;
239 int i;
240
241 root =
242 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
243 10),
244 EINA_RBTREE_CMP_NODE_CB(
245 eina_rbtree_int_cmp), NULL);
246 root =
247 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
248 42),
249 EINA_RBTREE_CMP_NODE_CB(
250 eina_rbtree_int_cmp), NULL);
251 root =
252 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
253 69),
254 EINA_RBTREE_CMP_NODE_CB(
255 eina_rbtree_int_cmp), NULL);
256 root =
257 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
258 1337),
259 EINA_RBTREE_CMP_NODE_CB(
260 eina_rbtree_int_cmp), NULL);
261 _eina_rbtree_black_height(root,
262 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
263
264 fail_if(root == NULL);
265
266 i = 69;
267 lookup = eina_rbtree_inline_lookup(root,
268 &i,
269 sizeof (int),
270 EINA_RBTREE_CMP_KEY_CB(
271 eina_rbtree_int_key),
272 NULL);
273 _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
274 fail_if(lookup == NULL);
275
276 root =
277 eina_rbtree_inline_remove(root, lookup, EINA_RBTREE_CMP_NODE_CB(
278 eina_rbtree_int_cmp), NULL);
279
280 _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
281}
282END_TEST
283
284START_TEST(eina_rbtree_simple_remove2)
285{
286 Eina_Rbtree *root = NULL;
287 Eina_Rbtree *lookup;
288 int i;
289
290 root =
291 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
292 10),
293 EINA_RBTREE_CMP_NODE_CB(
294 eina_rbtree_int_cmp), NULL);
295 root =
296 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
297 42),
298 EINA_RBTREE_CMP_NODE_CB(
299 eina_rbtree_int_cmp), NULL);
300 root =
301 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
302 69),
303 EINA_RBTREE_CMP_NODE_CB(
304 eina_rbtree_int_cmp), NULL);
305 root =
306 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
307 1337),
308 EINA_RBTREE_CMP_NODE_CB(
309 eina_rbtree_int_cmp), NULL);
310 root =
311 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
312 77),
313 EINA_RBTREE_CMP_NODE_CB(
314 eina_rbtree_int_cmp), NULL);
315 root =
316 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
317 75),
318 EINA_RBTREE_CMP_NODE_CB(
319 eina_rbtree_int_cmp), NULL);
320 root =
321 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
322 81),
323 EINA_RBTREE_CMP_NODE_CB(
324 eina_rbtree_int_cmp), NULL);
325 _eina_rbtree_black_height(root,
326 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
327
328 fail_if(root == NULL);
329
330 i = 69;
331 lookup = eina_rbtree_inline_lookup(root,
332 &i,
333 sizeof (int),
334 EINA_RBTREE_CMP_KEY_CB(
335 eina_rbtree_int_key),
336 NULL);
337 _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
338 fail_if(lookup == NULL);
339
340 root =
341 eina_rbtree_inline_remove(root, lookup, EINA_RBTREE_CMP_NODE_CB(
342 eina_rbtree_int_cmp), NULL);
343
344 _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
345}
346END_TEST
347
348START_TEST(eina_rbtree_simple_remove3)
349{
350 Eina_Rbtree *root = NULL;
351 Eina_Rbtree *lookup;
352 int i;
353
354 root =
355 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
356 1113497590),
357 EINA_RBTREE_CMP_NODE_CB(
358 eina_rbtree_int_cmp), NULL);
359 root =
360 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
361 499187507),
362 EINA_RBTREE_CMP_NODE_CB(
363 eina_rbtree_int_cmp), NULL);
364 root =
365 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
366 1693860487),
367 EINA_RBTREE_CMP_NODE_CB(
368 eina_rbtree_int_cmp), NULL);
369 root =
370 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
371 26211080),
372 EINA_RBTREE_CMP_NODE_CB(
373 eina_rbtree_int_cmp), NULL);
374 root =
375 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
376 797272577),
377 EINA_RBTREE_CMP_NODE_CB(
378 eina_rbtree_int_cmp), NULL);
379 root =
380 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
381 1252184882),
382 EINA_RBTREE_CMP_NODE_CB(
383 eina_rbtree_int_cmp), NULL);
384 root =
385 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
386 1448158229),
387 EINA_RBTREE_CMP_NODE_CB(
388 eina_rbtree_int_cmp), NULL);
389 root =
390 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
391 1821884856),
392 EINA_RBTREE_CMP_NODE_CB(
393 eina_rbtree_int_cmp), NULL);
394 root =
395 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
396 346086006),
397 EINA_RBTREE_CMP_NODE_CB(
398 eina_rbtree_int_cmp), NULL);
399 root =
400 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
401 936357333),
402 EINA_RBTREE_CMP_NODE_CB(
403 eina_rbtree_int_cmp), NULL);
404 root =
405 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
406 1462073936),
407 EINA_RBTREE_CMP_NODE_CB(
408 eina_rbtree_int_cmp), NULL);
409 root =
410 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
411 1717320055),
412 EINA_RBTREE_CMP_NODE_CB(
413 eina_rbtree_int_cmp), NULL);
414 root =
415 eina_rbtree_inline_insert(root, (Eina_Rbtree *)_eina_rbtree_int_new(
416 1845524606),
417 EINA_RBTREE_CMP_NODE_CB(
418 eina_rbtree_int_cmp), NULL);
419 _eina_rbtree_black_height(root,
420 EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
421
422 fail_if(root == NULL);
423
424 i = 1113497590;
425 lookup = eina_rbtree_inline_lookup(root,
426 &i,
427 sizeof (int),
428 EINA_RBTREE_CMP_KEY_CB(
429 eina_rbtree_int_key),
430 NULL);
431 _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
432 fail_if(lookup == NULL);
433
434 root =
435 eina_rbtree_inline_remove(root, lookup, EINA_RBTREE_CMP_NODE_CB(
436 eina_rbtree_int_cmp), NULL);
437
438 _eina_rbtree_black_height(root, EINA_RBTREE_CMP_NODE_CB(eina_rbtree_int_cmp));
439}
440END_TEST
441
442void
443eina_test_rbtree(TCase *tc)
444{
445 tcase_add_test(tc, eina_rbtree_insertion);
446 tcase_add_test(tc, eina_rbtree_lookup);
447 tcase_add_test(tc, eina_rbtree_remove);
448 tcase_add_test(tc, eina_rbtree_simple_remove);
449 tcase_add_test(tc, eina_rbtree_simple_remove2);
450 tcase_add_test(tc, eina_rbtree_simple_remove3);
451}
452
diff --git a/libraries/eina/src/tests/eina_test_rectangle.c b/libraries/eina/src/tests/eina_test_rectangle.c
new file mode 100644
index 0000000..581ab76
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_rectangle.c
@@ -0,0 +1,115 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2007-2008 Cedric BAIL, Carsten Haitzler
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28START_TEST(eina_rectangle_pool)
29{
30 Eina_Rectangle_Pool *pool;
31 Eina_Rectangle *rects[8][8];
32 int x;
33 int y;
34 int w;
35 int h;
36
37 fail_if(!eina_init());
38
39 pool = eina_rectangle_pool_new(256, 256);
40 fail_if(pool == NULL);
41
42 eina_rectangle_pool_data_set(pool, rects);
43 fail_if(eina_rectangle_pool_data_get(pool) != rects);
44
45 fail_if(eina_rectangle_pool_request(pool, 1024, 1024) != NULL);
46
47 for (x = 0; x < 8; x++)
48 for (y = 0; y < 8; y++)
49 {
50 rects[x][y] = eina_rectangle_pool_request(pool, 32, 32);
51 fail_if(rects[x][y] == NULL);
52 }
53
54 fail_if(eina_rectangle_pool_count(pool) != 64);
55
56 fail_if(eina_rectangle_pool_get(rects[0][0]) != pool);
57
58 fail_if(eina_rectangle_pool_geometry_get(pool, &w, &h) != EINA_TRUE);
59 fail_if(w != 256 || h != 256);
60
61 fail_if(eina_rectangle_pool_request(pool, 32, 32) != NULL);
62 fail_if(eina_rectangle_pool_request(pool, 1024, 1024) != NULL);
63
64 for (x = 0; x < 8; x++)
65 eina_rectangle_pool_release(rects[0][x]);
66
67 fail_if(eina_rectangle_pool_request(pool, 16, 16) == NULL);
68
69 eina_rectangle_pool_free(pool);
70
71 eina_shutdown();
72}
73END_TEST
74
75START_TEST(eina_rectangle_intersect)
76{
77 Eina_Rectangle r1, r2, r3, r4, rd;
78
79 fail_if(!eina_init());
80
81 EINA_RECTANGLE_SET(&r1, 10, 10, 50, 50);
82 EINA_RECTANGLE_SET(&r2, 20, 20, 20, 20);
83 EINA_RECTANGLE_SET(&r3, 0, 0, 10, 10);
84 EINA_RECTANGLE_SET(&r4, 30, 30, 50, 50);
85
86 rd = r1;
87
88 fail_if(eina_rectangle_intersection(&rd, &r3));
89 fail_if(!eina_rectangle_intersection(&rd, &r2));
90
91 fail_if(rd.x != r2.x
92 || rd.y != r2.y
93 || rd.w != r2.w
94 || rd.h != r2.h);
95
96 rd = r1;
97
98 fail_if(!eina_rectangle_intersection(&rd, &r4));
99
100 fail_if(rd.x != 30
101 || rd.y != 30
102 || rd.w != 30
103 || rd.h != 30);
104
105 eina_shutdown();
106}
107END_TEST
108
109void
110eina_test_rectangle(TCase *tc)
111{
112 tcase_add_test(tc, eina_rectangle_pool);
113 tcase_add_test(tc, eina_rectangle_intersect);
114}
115
diff --git a/libraries/eina/src/tests/eina_test_sched.c b/libraries/eina/src/tests/eina_test_sched.c
new file mode 100644
index 0000000..ff83a7e
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_sched.c
@@ -0,0 +1,85 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#if defined(EFL_HAVE_THREADS) && defined __linux__
24#include <pthread.h>
25#include <errno.h>
26#include <sys/resource.h>
27#endif
28
29#include "eina_suite.h"
30#include "Eina.h"
31
32#if defined(EFL_HAVE_THREADS) && defined __linux__
33
34/*
35 * TODO: Test if RT priorities are right. However, make check should be run as
36 * root.
37 */
38
39static void *
40_thread_run(void *arg __UNUSED__)
41{
42 int niceval = getpriority(PRIO_PROCESS, 0);
43 int niceval2;
44 eina_sched_prio_drop();
45
46 niceval2 = getpriority(PRIO_PROCESS, 0);
47 fail_if((niceval2 != 19) && (niceval2 != niceval+5));
48
49 return NULL;
50}
51
52START_TEST(eina_test_sched_prio_drop)
53{
54 int niceval = getpriority(PRIO_PROCESS, 0);
55 int niceval2;
56 pthread_t tid;
57
58 eina_init();
59
60 pthread_create(&tid, NULL, _thread_run, NULL);
61
62 niceval2 = getpriority(PRIO_PROCESS, 0);
63 /* niceness of main thread should not have changed */
64 fail_if(niceval2 != niceval);
65
66 pthread_join(tid, NULL);
67 /* niceness of main thread should not have changed */
68 fail_if(niceval2 != niceval);
69
70 eina_shutdown();
71}
72END_TEST
73#else
74START_TEST(eina_test_sched_prio_drop)
75{
76 fprintf(stderr, "scheduler priority is not supported by your configuration.\n");
77}
78END_TEST
79#endif
80
81void
82eina_test_sched(TCase *tc)
83{
84 tcase_add_test(tc, eina_test_sched_prio_drop);
85}
diff --git a/libraries/eina/src/tests/eina_test_simple_xml_parser.c b/libraries/eina/src/tests/eina_test_simple_xml_parser.c
new file mode 100644
index 0000000..94e6a2a
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_simple_xml_parser.c
@@ -0,0 +1,73 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26
27#include "eina_suite.h"
28#include "Eina.h"
29
30START_TEST(eina_simple_xml_parser_node_dump)
31{
32 FILE *f;
33
34 eina_init();
35 f = fopen("sample.gpx", "rb");
36 if (f)
37 {
38 long sz;
39
40 fseek(f, 0, SEEK_END);
41 sz = ftell(f);
42 if (sz > 0)
43 {
44 char *buf;
45
46 fseek(f, 0, SEEK_SET);
47 buf = malloc(sz);
48 if (buf)
49 {
50 if (fread(buf, 1, sz, f))
51 {
52 Eina_Simple_XML_Node_Root *root = eina_simple_xml_node_load
53 (buf, sz, EINA_TRUE);
54 char *out = eina_simple_xml_node_dump(&root->base, " ");
55 puts(out);
56 free(out);
57 eina_simple_xml_node_root_free(root);
58 free(buf);
59 }
60 }
61 }
62 fclose(f);
63 }
64
65 eina_shutdown();
66}
67END_TEST
68
69void
70eina_test_simple_xml_parser(TCase *tc)
71{
72 tcase_add_test(tc, eina_simple_xml_parser_node_dump);
73}
diff --git a/libraries/eina/src/tests/eina_test_str.c b/libraries/eina/src/tests/eina_test_str.c
new file mode 100644
index 0000000..f0ea291
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_str.c
@@ -0,0 +1,181 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Gustavo Sverzut Barbieri
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28 START_TEST(str_simple)
29{
30 eina_init();
31
32 fail_if(!eina_str_has_prefix("", ""));
33
34 fail_if(!eina_str_has_prefix("x", "x"));
35 fail_if(!eina_str_has_prefix("xab", "x"));
36 fail_if(!eina_str_has_prefix("xab", "xab"));
37
38 fail_if(eina_str_has_prefix("x", "xab"));
39 fail_if(eina_str_has_prefix("xab", "xyz"));
40 fail_if(eina_str_has_prefix("", "x"));
41 fail_if(eina_str_has_prefix("X", "x"));
42 fail_if(eina_str_has_prefix("xAb", "X"));
43 fail_if(eina_str_has_prefix("xAb", "xab"));
44
45
46 fail_if(!eina_str_has_suffix("", ""));
47
48 fail_if(!eina_str_has_suffix("x", "x"));
49 fail_if(!eina_str_has_suffix("abx", "x"));
50 fail_if(!eina_str_has_suffix("xab", "xab"));
51
52 fail_if(eina_str_has_suffix("x", "xab"));
53 fail_if(eina_str_has_suffix("xab", "xyz"));
54 fail_if(eina_str_has_suffix("", "x"));
55 fail_if(eina_str_has_suffix("X", "x"));
56 fail_if(eina_str_has_suffix("aBx", "X"));
57 fail_if(eina_str_has_suffix("xaB", "Xab"));
58
59
60 fail_if(!eina_str_has_extension("", ""));
61
62 fail_if(!eina_str_has_extension("x", "x"));
63 fail_if(!eina_str_has_extension("abx", "x"));
64 fail_if(!eina_str_has_extension("xab", "xab"));
65 fail_if(!eina_str_has_extension("x", "X"));
66 fail_if(!eina_str_has_extension("abx", "X"));
67 fail_if(!eina_str_has_extension("xab", "Xab"));
68 fail_if(!eina_str_has_extension("X", "X"));
69 fail_if(!eina_str_has_extension("aBx", "X"));
70 fail_if(!eina_str_has_extension("xaB", "Xab"));
71
72 fail_if(eina_str_has_extension("x", "xab"));
73 fail_if(eina_str_has_extension("xab", "xyz"));
74 fail_if(eina_str_has_extension("", "x"));
75 fail_if(eina_str_has_extension("x", "xAb"));
76 fail_if(eina_str_has_extension("xab", "xYz"));
77 fail_if(eina_str_has_extension("", "x"));
78
79 fail_if(eina_strlen_bounded("abc", 1024) != strlen("abc"));
80 fail_if(eina_strlen_bounded("abc", 2) != (size_t)-1);
81
82 eina_shutdown();
83}
84END_TEST
85
86START_TEST(str_split)
87{
88 char **result;
89 unsigned int elements;
90
91 eina_init();
92
93 result = eina_str_split_full("nomatch", "", -1, &elements);
94 fail_if(result != NULL);
95 fail_if(elements != 0);
96
97 result = eina_str_split_full("nomatch", "x", -1, &elements);
98 fail_if(result == NULL);
99 fail_if(elements != 1);
100 fail_if(strcmp(result[0], "nomatch") != 0);
101 free(result[0]);
102 free(result);
103
104 result = eina_str_split_full("nomatch", "xyz", -1, &elements);
105 fail_if(result == NULL);
106 fail_if(elements != 1);
107 fail_if(strcmp(result[0], "nomatch") != 0);
108 free(result[0]);
109 free(result);
110
111 result = eina_str_split_full("match:match:match", ":", -1, &elements);
112 fail_if(result == NULL);
113 fail_if(elements != 3);
114 while (elements >= 1)
115 {
116 elements--;
117 fail_if(strcmp(result[elements], "match") != 0);
118 }
119 free(result[0]);
120 free(result);
121
122 result = eina_str_split_full("a:b:c", ":", -1, &elements);
123 fail_if(result == NULL);
124 fail_if(elements != 3);
125 fail_if(strcmp(result[0], "a") != 0);
126 fail_if(strcmp(result[1], "b") != 0);
127 fail_if(strcmp(result[2], "c") != 0);
128 free(result[0]);
129 free(result);
130
131 result = eina_str_split_full("a:b:", ":", -1, &elements);
132 fail_if(result == NULL);
133 fail_if(elements != 3);
134 fail_if(strcmp(result[0], "a") != 0);
135 fail_if(strcmp(result[1], "b") != 0);
136 fail_if(strcmp(result[2], "") != 0);
137 free(result[0]);
138 free(result);
139
140 result = eina_str_split_full(":b:c", ":", -1, &elements);
141 fail_if(result == NULL);
142 fail_if(elements != 3);
143 fail_if(strcmp(result[0], "") != 0);
144 fail_if(strcmp(result[1], "b") != 0);
145 fail_if(strcmp(result[2], "c") != 0);
146 free(result[0]);
147 free(result);
148
149 result = eina_str_split_full(":", ":", -1, &elements);
150 fail_if(result == NULL);
151 fail_if(elements != 2);
152 fail_if(strcmp(result[0], "") != 0);
153 fail_if(strcmp(result[1], "") != 0);
154 free(result[0]);
155 free(result);
156
157 result = eina_str_split_full("a", "!!!!!!!!!", -1, &elements);
158 fail_if(result == NULL);
159 fail_if(elements != 1);
160 fail_if(strcmp(result[0], "a") != 0);
161 free(result[0]);
162 free(result);
163
164 result = eina_str_split_full("aaba", "ab", -1, &elements);
165 fail_if(result == NULL);
166 fail_if(elements != 2);
167 fail_if(strcmp(result[0], "a") != 0);
168 fail_if(strcmp(result[1], "a") != 0);
169 free(result[0]);
170 free(result);
171
172 eina_shutdown();
173}
174END_TEST
175
176void
177eina_test_str(TCase *tc)
178{
179 tcase_add_test(tc, str_simple);
180 tcase_add_test(tc, str_split);
181}
diff --git a/libraries/eina/src/tests/eina_test_strbuf.c b/libraries/eina/src/tests/eina_test_strbuf.c
new file mode 100644
index 0000000..2205e3e
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_strbuf.c
@@ -0,0 +1,449 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Sebastian Dransfeld
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28START_TEST(strbuf_simple)
29{
30 Eina_Strbuf *buf;
31 char *txt;
32#define TEXT \
33 "This test should be so long that it is longer than the initial size of strbuf"
34
35 eina_init();
36
37 buf = eina_strbuf_new();
38 fail_if(!buf);
39
40 eina_strbuf_append(buf, TEXT);
41 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT));
42 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
43 eina_strbuf_append(buf, TEXT);
44 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
45 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
46 txt = eina_strbuf_string_steal(buf);
47 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
48 fail_if(strcmp(txt, TEXT TEXT));
49 free(txt);
50 fail_if(eina_strbuf_length_get(buf) != 0);
51 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
52 eina_strbuf_append(buf, TEXT);
53 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
54 eina_strbuf_reset(buf);
55 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
56 fail_if(eina_strbuf_length_get(buf) != 0);
57 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT));
58
59 eina_strbuf_free(buf);
60
61 eina_shutdown();
62#undef TEXT
63}
64END_TEST
65
66START_TEST(strbuf_manage_simple)
67{
68 Eina_Strbuf *buf;
69 char *txt;
70#define TEXT \
71 "This test should be so long that it is longer than the initial size of strbuf"
72
73 eina_init();
74
75 txt = strdup(TEXT);
76
77 buf = eina_strbuf_manage_new(txt);
78 fail_if(!buf);
79
80 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT));
81 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
82 eina_strbuf_append(buf, TEXT);
83 fail_if(strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
84 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
85 txt = eina_strbuf_string_steal(buf);
86 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
87 fail_if(strcmp(txt, TEXT TEXT));
88 free(txt);
89 fail_if(eina_strbuf_length_get(buf) != 0);
90 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT TEXT));
91 eina_strbuf_append(buf, TEXT);
92 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
93 eina_strbuf_reset(buf);
94 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
95 fail_if(eina_strbuf_length_get(buf) != 0);
96 fail_if(!strcmp(eina_strbuf_string_get(buf), TEXT));
97
98 eina_strbuf_free(buf);
99
100 eina_shutdown();
101#undef TEXT
102}
103END_TEST
104
105START_TEST(strbuf_remove)
106{
107 Eina_Strbuf *buf;
108
109 eina_init();
110
111 buf = eina_strbuf_new();
112 fail_if(!buf);
113
114 eina_strbuf_append(buf, "123 456 789 abc");
115 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
116 eina_strbuf_remove(buf, 0, 4);
117 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
118 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 abc"));
119 eina_strbuf_remove(buf, 8, 1000);
120 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
121 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789 "));
122 eina_strbuf_remove(buf, 7, eina_strbuf_length_get(buf));
123 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
124 fail_if(strcmp(eina_strbuf_string_get(buf), "456 789"));
125 eina_strbuf_remove(buf, 2, 4);
126 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
127 fail_if(strcmp(eina_strbuf_string_get(buf), "45789"));
128 eina_strbuf_remove(buf, 4, 1);
129 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
130 fail_if(strcmp(eina_strbuf_string_get(buf), "45789"));
131 eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf));
132 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
133 fail_if(strcmp(eina_strbuf_string_get(buf), ""));
134
135#define TEXT \
136 "This test should be so long that it is longer than the initial size of strbuf"
137 eina_strbuf_append(buf, TEXT TEXT);
138 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
139 eina_strbuf_remove(buf, 0, eina_strbuf_length_get(buf) - 1);
140 fail_if(strcmp(eina_strbuf_string_get(buf), "f"));
141#undef TEXT
142
143 eina_strbuf_free(buf);
144
145 eina_shutdown();
146}
147END_TEST
148
149START_TEST(strbuf_append)
150{
151 Eina_Strbuf *buf;
152
153 eina_init();
154
155 buf = eina_strbuf_new();
156 fail_if(!buf);
157
158 eina_strbuf_append(buf, "abc");
159 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
160 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
161 eina_strbuf_reset(buf);
162
163 eina_strbuf_append_escaped(buf, "abc");
164 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
165 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
166 eina_strbuf_reset(buf);
167
168 eina_strbuf_append_escaped(buf, "abc '\\");
169 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
170 fail_if(strcmp(eina_strbuf_string_get(buf), "abc\\ \\'\\\\"));
171 eina_strbuf_reset(buf);
172
173 eina_strbuf_append_n(buf, "abc", 2);
174 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
175 fail_if(strcmp(eina_strbuf_string_get(buf), "ab"));
176 eina_strbuf_reset(buf);
177
178 eina_strbuf_append_char(buf, 'a');
179 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
180 fail_if(strcmp(eina_strbuf_string_get(buf), "a"));
181 eina_strbuf_reset(buf);
182
183 eina_strbuf_append_length(buf, "something", strlen("something"));
184 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
185 fail_if(strcmp(eina_strbuf_string_get(buf), "something"));
186 eina_strbuf_reset(buf);
187
188 eina_strbuf_append_length(buf, "somethingELSE", strlen("something"));
189 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
190 fail_if(strcmp(eina_strbuf_string_get(buf), "something"));
191 eina_strbuf_reset(buf);
192
193 eina_strbuf_free(buf);
194
195 eina_shutdown();
196}
197END_TEST
198
199START_TEST(strbuf_insert)
200{
201 Eina_Strbuf *buf;
202
203 eina_init();
204
205 buf = eina_strbuf_new();
206 fail_if(!buf);
207
208 eina_strbuf_insert(buf, "abc", 10);
209 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
210 fail_if(strcmp(eina_strbuf_string_get(buf), "abc"));
211
212 eina_strbuf_insert(buf, "123", 0);
213 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
214 fail_if(strcmp(eina_strbuf_string_get(buf), "123abc"));
215
216 eina_strbuf_insert(buf, "xyz", eina_strbuf_length_get(buf));
217 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
218 fail_if(strcmp(eina_strbuf_string_get(buf), "123abcxyz"));
219
220 eina_strbuf_insert(buf, "xyz", 1);
221 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
222 fail_if(strcmp(eina_strbuf_string_get(buf), "1xyz23abcxyz"));
223
224 eina_strbuf_insert_n(buf, "ABCDEF", 2, 1);
225 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
226 fail_if(strcmp(eina_strbuf_string_get(buf), "1ABxyz23abcxyz"));
227
228 eina_strbuf_insert_n(buf, "EINA", 2, 3);
229 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
230 fail_if(strcmp(eina_strbuf_string_get(buf), "1ABEIxyz23abcxyz"));
231
232 eina_strbuf_insert_escaped(buf, "678", 3);
233 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
234 fail_if(strncmp(eina_strbuf_string_get(buf) + 3, "678", 3));
235
236 eina_strbuf_insert_escaped(buf, "089 '\\", 9);
237 fail_if(strlen(eina_strbuf_string_get(
238 buf)) != eina_strbuf_length_get(buf));
239 fail_if(strncmp(eina_strbuf_string_get(buf) + 9,
240 "089\\ \\'\\\\",
241 strlen("089\\ \\'\\\\")));
242 eina_strbuf_reset(buf);
243
244 eina_strbuf_free(buf);
245
246 eina_shutdown();
247}
248END_TEST
249
250START_TEST(strbuf_replace)
251{
252 Eina_Strbuf *buf;
253
254 eina_init();
255
256 buf = eina_strbuf_new();
257 fail_if(!buf);
258
259 eina_strbuf_append(buf, "aaa");
260 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
261 fail_if(strcmp(eina_strbuf_string_get(buf), "aaa"));
262
263 fail_if(!eina_strbuf_replace(buf, "a", "b", 1));
264 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
265 fail_if(strcmp(eina_strbuf_string_get(buf), "baa"));
266
267 fail_if(eina_strbuf_replace_all(buf, "a", "b") != 2);
268 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
269 fail_if(strcmp(eina_strbuf_string_get(buf), "bbb"));
270
271 fail_if(!eina_strbuf_replace(buf, "b", "cc", 2));
272 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
273 fail_if(strcmp(eina_strbuf_string_get(buf), "bccb"));
274
275 fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 2);
276 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
277 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
278
279 fail_if(eina_strbuf_replace(buf, "c", "aa", 0));
280 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
281 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
282
283 fail_if(eina_strbuf_replace(buf, "c", "aa", 2));
284 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
285 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
286
287 fail_if(eina_strbuf_replace_all(buf, "c", "aa") != 0);
288 fail_if(strlen(eina_strbuf_string_get(buf)) != eina_strbuf_length_get(buf));
289 fail_if(strcmp(eina_strbuf_string_get(buf), "baaaab"));
290
291
292 eina_strbuf_free(buf);
293
294 eina_shutdown();
295}
296END_TEST
297
298START_TEST(strbuf_realloc)
299{
300 Eina_Strbuf *buf;
301 char pattern[1024 * 16];
302 unsigned int i;
303 size_t sz;
304
305 for (i = 0; i < sizeof(pattern) - 1; i++)
306 pattern[i] = 'a' + (i % 26);
307 pattern[i] = '\0';
308
309 eina_init();
310
311 buf = eina_strbuf_new();
312 fail_if(!buf);
313
314 sz = 0;
315
316 eina_strbuf_append_length(buf, pattern, 1);
317 fail_if(eina_strbuf_length_get(buf) != sz + 1);
318 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 1));
319 sz += 1;
320
321 eina_strbuf_append_length(buf, pattern, 32);
322 fail_if(eina_strbuf_length_get(buf) != sz + 32);
323 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 32));
324 sz += 32;
325
326 eina_strbuf_append_length(buf, pattern, 64);
327 fail_if(eina_strbuf_length_get(buf) != sz + 64);
328 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 64));
329 sz += 64;
330
331 eina_strbuf_append_length(buf, pattern, 128);
332 fail_if(eina_strbuf_length_get(buf) != sz + 128);
333 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 128));
334 sz += 128;
335
336 eina_strbuf_append_length(buf, pattern, 4096);
337 fail_if(eina_strbuf_length_get(buf) != sz + 4096);
338 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, 4096));
339 sz += 4096;
340
341 eina_strbuf_append_length(buf, pattern, sizeof(pattern) - 1);
342 fail_if(eina_strbuf_length_get(buf) != sz + sizeof(pattern) - 1);
343 fail_if(memcmp(eina_strbuf_string_get(buf) + sz, pattern, sizeof(pattern) -
344 1));
345 sz += sizeof(pattern) - 1;
346
347
348 eina_strbuf_remove(buf, 1024, 1024 + 1234);
349 fail_if(eina_strbuf_length_get(buf) != sz - 1234);
350 sz -= 1234;
351
352 eina_strbuf_remove(buf, 0, 0 + 8192);
353 fail_if(eina_strbuf_length_get(buf) != sz - 8192);
354 sz -= 8192;
355
356 eina_strbuf_remove(buf, 0, 0 + 32);
357 fail_if(eina_strbuf_length_get(buf) != sz - 32);
358 sz -= 32;
359
360
361 eina_strbuf_free(buf);
362
363 eina_shutdown();
364}
365END_TEST
366
367START_TEST(strbuf_append_realloc)
368{
369 Eina_Strbuf *buf;
370 const size_t runs = 40960;
371 const char target_pattern[] = "stringstrsstr";
372 const char *str;
373 size_t i, target_pattern_size;
374
375 eina_init();
376
377 buf = eina_strbuf_new();
378 fail_if(!buf);
379
380 for (i = 0; i < runs; i++)
381 {
382 fail_if(!eina_strbuf_append(buf, "string"));
383 fail_if(!eina_strbuf_append_n(buf, "string", 3));
384 fail_if(!eina_strbuf_append_char(buf, 's'));
385 fail_if(!eina_strbuf_append_length(buf, "string", 3));
386 }
387
388 target_pattern_size = strlen(target_pattern);
389 fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size));
390
391 str = eina_strbuf_string_get(buf);
392 fail_if(str == NULL);
393 for (i = 0; i < runs; i++, str += target_pattern_size)
394 fail_if(memcmp(str, target_pattern, target_pattern_size));
395
396 eina_strbuf_free(buf);
397
398 eina_shutdown();
399}
400END_TEST
401
402START_TEST(strbuf_prepend_realloc)
403{
404 Eina_Strbuf *buf;
405 const size_t runs = 40960;
406 const char target_pattern[] = "strsstrstring";
407 const char *str;
408 size_t i, target_pattern_size;
409
410 eina_init();
411
412 buf = eina_strbuf_new();
413 fail_if(!buf);
414
415 for (i = 0; i < runs; i++)
416 {
417 fail_if(!eina_strbuf_prepend(buf, "string"));
418 fail_if(!eina_strbuf_prepend_n(buf, "string", 3));
419 fail_if(!eina_strbuf_prepend_char(buf, 's'));
420 fail_if(!eina_strbuf_prepend_length(buf, "string", 3));
421 }
422
423 target_pattern_size = strlen(target_pattern);
424 fail_if(eina_strbuf_length_get(buf) != (runs * target_pattern_size));
425
426 str = eina_strbuf_string_get(buf);
427 fail_if(str == NULL);
428 for (i = 0; i < runs; i++, str += target_pattern_size)
429 fail_if(memcmp(str, target_pattern, target_pattern_size));
430
431 eina_strbuf_free(buf);
432
433 eina_shutdown();
434}
435END_TEST
436
437void
438eina_test_strbuf(TCase *tc)
439{
440 tcase_add_test(tc, strbuf_simple);
441 tcase_add_test(tc, strbuf_remove);
442 tcase_add_test(tc, strbuf_append);
443 tcase_add_test(tc, strbuf_insert);
444 tcase_add_test(tc, strbuf_replace);
445 tcase_add_test(tc, strbuf_realloc);
446 tcase_add_test(tc, strbuf_append_realloc);
447 tcase_add_test(tc, strbuf_prepend_realloc);
448 tcase_add_test(tc, strbuf_manage_simple);
449}
diff --git a/libraries/eina/src/tests/eina_test_stringshare.c b/libraries/eina/src/tests/eina_test_stringshare.c
new file mode 100644
index 0000000..0d34aec
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_stringshare.c
@@ -0,0 +1,201 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26#include <time.h>
27
28#include "eina_suite.h"
29#include "Eina.h"
30
31#define TEST0 "test/0"
32#define TEST1 "test/1"
33
34START_TEST(eina_stringshare_simple)
35{
36 const char *t0;
37 const char *t1;
38
39 eina_init();
40
41 t0 = eina_stringshare_add(TEST0);
42 t1 = eina_stringshare_add(TEST1);
43
44 fail_if(t0 == NULL);
45 fail_if(t1 == NULL);
46 fail_if(strcmp(t0, TEST0) != 0);
47 fail_if(strcmp(t1, TEST1) != 0);
48 fail_if((int)strlen(TEST0) != eina_stringshare_strlen(t0));
49 fail_if((int)strlen(TEST1) != eina_stringshare_strlen(t1));
50
51 t0 = eina_stringshare_ref(t0);
52 fail_if(t0 == NULL);
53 fail_if((int)strlen(TEST0) != eina_stringshare_strlen(t0));
54
55 eina_stringshare_del(t0);
56 eina_stringshare_del(t0);
57 eina_stringshare_del(t1);
58
59 eina_shutdown();
60}
61END_TEST
62
63START_TEST(eina_stringshare_small)
64{
65 char buf[4];
66 int i;
67
68 eina_init();
69
70 for (i = 0; i < 3; i++)
71 {
72 const char *t0, *t1;
73 int j;
74
75 for (j = 0; j < i; j++)
76 {
77 char c;
78 for (c = 'a'; c <= 'z'; c++)
79 buf[j] = c;
80 }
81 buf[i] = '\0';
82 t0 = eina_stringshare_add(buf);
83 t1 = eina_stringshare_add(buf);
84
85 fail_if(t0 == NULL);
86 fail_if(t1 == NULL);
87 fail_if(t0 != t1);
88 fail_if(strcmp(t0, buf) != 0);
89 fail_if((int)strlen(buf) != eina_stringshare_strlen(t0));
90 fail_if((int)strlen(buf) != eina_stringshare_strlen(t1));
91
92 eina_stringshare_del(t0);
93 eina_stringshare_del(t1);
94 }
95
96 eina_shutdown();
97}
98END_TEST
99
100
101START_TEST(eina_stringshare_test_share)
102{
103 const char *t0;
104 const char *t1;
105
106 eina_init();
107
108 t0 = eina_stringshare_add(TEST0);
109 t1 = eina_stringshare_add(TEST0);
110
111 fail_if(t0 == NULL);
112 fail_if(t1 == NULL);
113 fail_if(strcmp(t0, TEST0) != 0);
114 fail_if(strcmp(t1, TEST0) != 0);
115 fail_if(t0 != t1);
116 fail_if((int)strlen(t0) != eina_stringshare_strlen(t0));
117
118 eina_stringshare_del(t0);
119 eina_stringshare_del(t1);
120
121 eina_shutdown();
122}
123END_TEST
124
125START_TEST(eina_stringshare_putstuff)
126{
127 const char *tmp;
128 int i;
129
130 eina_init();
131
132 for (i = 10000; i > 0; --i)
133 {
134 char build[64] = "string_";
135
136 eina_convert_xtoa(i, build + 7);
137 tmp = eina_stringshare_add(build);
138 fail_if(tmp != eina_stringshare_add(build));
139 }
140
141 eina_shutdown();
142}
143END_TEST
144
145START_TEST(eina_stringshare_collision)
146{
147 Eina_Array *ea;
148 char buffer[50];
149 int i;
150
151 srand(time(NULL));
152
153 eina_init();
154
155 ea = eina_array_new(256);
156 fail_if(!ea);
157
158 for (i = 0; i < 10000; ++i)
159 {
160 eina_convert_itoa(rand(), buffer);
161 eina_array_push(ea, (void *)eina_stringshare_add(buffer));
162 if (rand() > RAND_MAX / 2)
163 {
164 const char *r = eina_stringshare_add(buffer);
165 fail_if(r == NULL);
166 }
167 }
168
169 for (i = 0; i < 10000; ++i)
170 {
171 const char *r;
172
173 eina_convert_itoa(60000 - i, buffer);
174 eina_array_push(ea, (void *)eina_stringshare_add(buffer));
175 r = eina_stringshare_add(buffer);
176 fail_if(r == NULL);
177 r = eina_stringshare_add(buffer);
178 fail_if(r == NULL);
179 }
180
181 for (i = 0; i < 200; ++i)
182 eina_stringshare_del(eina_array_data_get(ea, i));
183
184 for (i = 0; i < 1000; ++i)
185 eina_stringshare_del(eina_array_pop(ea));
186
187 eina_shutdown();
188
189 eina_array_free(ea);
190}
191END_TEST
192
193void
194eina_test_stringshare(TCase *tc)
195{
196 tcase_add_test(tc, eina_stringshare_simple);
197 tcase_add_test(tc, eina_stringshare_small);
198 tcase_add_test(tc, eina_stringshare_test_share);
199 tcase_add_test(tc, eina_stringshare_collision);
200 tcase_add_test(tc, eina_stringshare_putstuff);
201}
diff --git a/libraries/eina/src/tests/eina_test_tiler.c b/libraries/eina/src/tests/eina_test_tiler.c
new file mode 100644
index 0000000..f1ef8f0
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_tiler.c
@@ -0,0 +1,184 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2009 Rafael Antognolli
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdio.h>
24
25#include "eina_suite.h"
26#include "Eina.h"
27
28struct test_rect
29{
30 unsigned long col, row;
31 int x, y, w, h;
32 Eina_Bool full;
33};
34
35static void
36check_iterator(Eina_Iterator *it, struct test_rect *cur_test)
37{
38 unsigned int i = 0;
39 struct Eina_Tile_Grid_Info *tile;
40
41 EINA_ITERATOR_FOREACH(it, tile) {
42 fail_if(cur_test[i].col != tile->col ||
43 cur_test[i].row != tile->row ||
44 cur_test[i].x != tile->rect.x ||
45 cur_test[i].y != tile->rect.y ||
46 cur_test[i].w != tile->rect.w ||
47 cur_test[i].h != tile->rect.h ||
48 cur_test[i].full != tile->full);
49 i++;
50 }
51
52 fail_if(i == 0);
53}
54
55 START_TEST(eina_test_tile_grid_slicer_iterator)
56{
57 Eina_Iterator *it;
58 struct test_rect *cur_test;
59 struct test_rect test1[] = {{1, 1, 72, 82, 10, 15, 0}};
60 struct test_rect test2[] =
61 {{1, 1, 72, 82, 56, 15, 0},
62 {2, 1, 0, 82, 128, 15, 0},
63 {3, 1, 0, 82, 116, 15, 0}};
64 struct test_rect test3[] =
65 {{1, 1, 72, 82, 10, 46, 0},
66 {1, 2, 72, 0, 10, 128, 0},
67 {1, 3, 72, 0, 10, 126, 0}};
68 struct test_rect test4[] =
69 {{1, 1, 72, 82, 56, 46, 0},
70 {2, 1, 0, 82, 128, 46, 0},
71 {3, 1, 0, 82, 128, 46, 0},
72 {4, 1, 0, 82, 88, 46, 0},
73 {1, 2, 72, 0, 56, 128, 0},
74 {2, 2, 0, 0, 128, 128, 1},
75 {3, 2, 0, 0, 128, 128, 1},
76 {4, 2, 0, 0, 88, 128, 0},
77 {1, 3, 72, 0, 56, 126, 0},
78 {2, 3, 0, 0, 128, 126, 0},
79 {3, 3, 0, 0, 128, 126, 0},
80 {4, 3, 0, 0, 88, 126, 0}};
81 struct test_rect test5[] = {{1, 1, 0, 0, 128, 128, 1}};
82 struct test_rect test6[] = {{1, 1, 0, 0, 1, 1, 0}};
83 struct test_rect test7[] =
84 {{1, 1, 0, 0, 128, 128, 1},
85 {2, 1, 0, 0, 1, 128, 0},
86 {1, 2, 0, 0, 128, 1, 0},
87 {2, 2, 0, 0, 1, 1, 0}};
88
89 eina_init();
90
91 cur_test = test1;
92 it = eina_tile_grid_slicer_iterator_new(200, 210, 10, 15, 128, 128);
93 check_iterator(it, cur_test);
94 eina_iterator_free(it);
95
96 cur_test = test2;
97 it = eina_tile_grid_slicer_iterator_new(200, 210, 300, 15, 128, 128);
98 check_iterator(it, cur_test);
99 eina_iterator_free(it);
100
101 cur_test = test3;
102 it = eina_tile_grid_slicer_iterator_new(200, 210, 10, 300, 128, 128);
103 check_iterator(it, cur_test);
104 eina_iterator_free(it);
105
106 cur_test = test4;
107 it = eina_tile_grid_slicer_iterator_new(200, 210, 400, 300, 128, 128);
108 check_iterator(it, cur_test);
109 eina_iterator_free(it);
110
111 cur_test = test5;
112 it = eina_tile_grid_slicer_iterator_new(128, 128, 128, 128, 128, 128);
113 check_iterator(it, cur_test);
114 eina_iterator_free(it);
115
116 cur_test = test6;
117 it = eina_tile_grid_slicer_iterator_new(128, 128, 1, 1, 128, 128);
118 check_iterator(it, cur_test);
119 eina_iterator_free(it);
120
121 cur_test = test7;
122 it = eina_tile_grid_slicer_iterator_new(128, 128, 129, 129, 128, 128);
123 check_iterator(it, cur_test);
124 eina_iterator_free(it);
125
126 eina_shutdown();
127}
128END_TEST
129
130START_TEST(eina_test_tiler_all)
131{
132 Eina_Tiler *tl;
133 Eina_Iterator *it;
134 Eina_Rectangle *rp;
135 Eina_Rectangle r;
136 int i = 0;
137
138 eina_init();
139
140 tl = eina_tiler_new(640, 480);
141
142 eina_tiler_tile_size_set(tl, 32, 32);
143
144 EINA_RECTANGLE_SET(&r, 50, 50, 20, 20);
145 fail_if(!eina_tiler_rect_add(tl, &r));
146
147 EINA_RECTANGLE_SET(&r, -10, -10, 5, 5);
148 fail_if(eina_tiler_rect_add(tl, &r));
149
150 EINA_RECTANGLE_SET(&r, 40, 40, 20, 20);
151 eina_tiler_rect_del(tl, &r);
152
153 it = eina_tiler_iterator_new(tl);
154 fail_if(!it);
155
156 EINA_ITERATOR_FOREACH(it, rp)
157 {
158 fail_if(rp->w <= 0);
159 fail_if(rp->h <= 0);
160 fail_if(rp->x < 0 || rp->x + rp->w > 640);
161 fail_if(rp->y < 0 || rp->y + rp->h > 480);
162 ++i;
163 }
164
165 fail_if(eina_iterator_container_get(it) != tl);
166
167 eina_iterator_free(it);
168
169 fail_if(i == 0);
170
171 eina_tiler_clear(tl);
172
173 eina_tiler_free(tl);
174
175 eina_shutdown();
176}
177END_TEST
178
179void
180eina_test_tiler(TCase *tc)
181{
182 tcase_add_test(tc, eina_test_tile_grid_slicer_iterator);
183 tcase_add_test(tc, eina_test_tiler_all);
184}
diff --git a/libraries/eina/src/tests/eina_test_ustr.c b/libraries/eina/src/tests/eina_test_ustr.c
new file mode 100644
index 0000000..eaeba9d
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_ustr.c
@@ -0,0 +1,483 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2010 Brett Nash
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26#include <time.h>
27
28#include "eina_suite.h"
29#include "Eina.h"
30
31static const Eina_Unicode STR1[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
32static const Eina_Unicode STR2[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'f', 'f', 0};
33static const Eina_Unicode STR3[] = {'P', 'a', 'n', 't', 's',' ', 'O', 'n', 0};
34static const Eina_Unicode STR4[] = {'A', 0};
35static const Eina_Unicode EMPTYSTR[] = {0};
36
37START_TEST(eina_unicode_strcmp_test)
38{
39 eina_init();
40
41 /* 1 & 2 */
42 fail_if(eina_unicode_strcmp(STR1,STR2) == 0);
43 fail_if(eina_unicode_strcmp(STR1,STR2) < 1);
44
45 /* 1 & 3 */
46 fail_if(eina_unicode_strcmp(STR1, STR3) != 0);
47
48 /* 1 & 4 */
49 fail_if(eina_unicode_strcmp(STR1, STR4) == 0);
50 fail_if(eina_unicode_strcmp(STR1, STR4) > 1);
51
52 /* 1 & empty */
53 fail_if(eina_unicode_strcmp(STR1, EMPTYSTR) < 1);
54
55 /* Self tests */
56 fail_if(eina_unicode_strcmp(STR1, STR1) != 0);
57 fail_if(eina_unicode_strcmp(STR2, STR2) != 0);
58 fail_if(eina_unicode_strcmp(STR3, STR3) != 0);
59 fail_if(eina_unicode_strcmp(STR4, STR4) != 0);
60 fail_if(eina_unicode_strcmp(EMPTYSTR, EMPTYSTR) != 0);
61
62 eina_shutdown();
63}
64END_TEST
65
66START_TEST(eina_unicode_strcpy_test)
67{
68 Eina_Unicode buf[10] = { 0 };
69 Eina_Unicode *rv;
70
71 eina_init();
72
73 rv = eina_unicode_strcpy(buf,STR1);
74 fail_if(rv != buf);
75 fail_if(eina_unicode_strcmp(buf,STR1) != 0);
76
77 rv = eina_unicode_strcpy(buf,STR2);
78 fail_if(rv != buf);
79 fail_if(eina_unicode_strcmp(buf,STR2) != 0);
80
81 /* Now a shorter string */
82 rv = eina_unicode_strcpy(buf,STR2);
83 fail_if(rv != buf);
84 fail_if(eina_unicode_strcmp(buf,STR2) != 0);
85
86 /* Really short string */
87 rv = eina_unicode_strcpy(buf,STR4);
88 fail_if(rv != buf);
89 fail_if(eina_unicode_strcmp(buf,STR4) != 0);
90 fail_if(buf[2] != 'n'); /* check old buf is there */
91
92 buf[1] = '7';
93 rv = eina_unicode_strcpy(buf,EMPTYSTR);
94 fail_if(rv != buf);
95 fail_if(buf[0] != 0);
96 fail_if(buf[1] != '7');
97
98 eina_shutdown();
99}
100END_TEST
101
102START_TEST(eina_unicode_strncpy_test)
103{
104 Eina_Unicode buf[10] = { 0 };
105 Eina_Unicode *rv;
106
107 eina_init();
108
109 rv = eina_unicode_strncpy(buf,STR1,9);
110 fail_if(rv != buf);
111 fail_if(eina_unicode_strcmp(buf,STR1) != 0);
112
113 buf[1] = '7';
114 rv = eina_unicode_strncpy(buf,STR1,1);
115 fail_if(rv != buf);
116 fail_if(buf[1] != '7');
117 fail_if(buf[0] != STR1[0]);
118
119 buf[9] = '7';
120 rv = eina_unicode_strncpy(buf, STR4, 10);
121 fail_if(rv != buf);
122 fail_if(eina_unicode_strcmp(buf,STR4) != 0);
123 fail_if(buf[9] != 0);
124
125 buf[0] = '7';
126 rv = eina_unicode_strncpy(buf, STR1, 0);
127 fail_if(buf[0] != '7');
128
129 /* may segfault */
130 buf[0] = '7';
131 rv = eina_unicode_strncpy(buf, NULL, 0);
132 fail_if(buf[0] != '7');
133
134 /* Hopefully won't segfault */
135 rv = eina_unicode_strncpy(NULL, STR1, 0);
136 fail_if(rv != NULL);
137
138 eina_shutdown();
139}
140END_TEST
141
142
143
144START_TEST(eina_ustr_strlen_test)
145{
146
147 eina_init();
148
149 fail_if(eina_unicode_strlen(STR1) != 8);
150 fail_if(eina_unicode_strlen(STR2) != 9);
151 fail_if(eina_unicode_strlen(STR3) != 8);
152 fail_if(eina_unicode_strlen(STR4) != 1);
153 fail_if(eina_unicode_strlen(EMPTYSTR) != 0);
154 /* Eina unicode doesn't take NULL */
155 // fail_if(eina_unicode_strlen(NULL));
156
157 eina_shutdown();
158}
159END_TEST
160
161START_TEST(eina_unicode_strnlen_test)
162{
163 eina_init();
164
165 /* Strlen style tests*/
166 fail_if(eina_unicode_strnlen(STR1,10) != 8);
167 fail_if(eina_unicode_strnlen(STR2,10) != 9);
168 fail_if(eina_unicode_strnlen(STR3,10) != 8);
169 fail_if(eina_unicode_strnlen(STR4,10) != 1);
170 fail_if(eina_unicode_strnlen(EMPTYSTR,10) != 0);
171
172 /* Too short tests */
173 fail_if(eina_unicode_strnlen(STR1,3) != 3);
174 fail_if(eina_unicode_strnlen(STR2,3) != 3);
175 fail_if(eina_unicode_strnlen(STR3,3) != 3);
176 fail_if(eina_unicode_strnlen(EMPTYSTR,1) != 0);
177 fail_if(eina_unicode_strnlen(NULL,0) != 0);
178
179 eina_shutdown();
180}
181END_TEST
182
183START_TEST(eina_unicode_strdup_test)
184{
185 Eina_Unicode *buf;
186
187 eina_init();
188
189 buf = eina_unicode_strdup(STR1);
190 fail_if(!buf);
191 fail_if(eina_unicode_strlen(buf) != eina_unicode_strlen(STR1));
192 fail_if(eina_unicode_strcmp(buf, STR1));
193 free(buf);
194
195 buf = eina_unicode_strdup(EMPTYSTR);
196 fail_if(!buf);
197 fail_if(buf[0] != 0);
198
199 eina_shutdown();
200}
201END_TEST
202
203START_TEST(eina_unicode_strstr_test)
204{
205 Eina_Unicode *buf;
206 Eina_Unicode on[] = { 'O', 'n', 0 };
207
208 eina_init();
209
210 buf = eina_unicode_strstr(STR1,on);
211 fail_if(!buf);
212 fail_if(buf != STR1 + 6);
213 fail_if(eina_unicode_strcmp(buf,on) != 0);
214
215 buf = eina_unicode_strstr(STR2,on);
216 fail_if(buf);
217
218 buf = eina_unicode_strstr(EMPTYSTR, on);
219 fail_if(buf);
220
221 buf = eina_unicode_strstr(STR1, EMPTYSTR);
222 fail_if(!buf);
223 fail_if(buf != STR1);
224
225 eina_shutdown();
226}
227END_TEST
228
229START_TEST(eina_unicode_utf8)
230{
231 int ind;
232 unsigned char ch;
233 eina_init();
234
235 /* Valid utf-8 cases */
236 /* First possible sequence of a certain length */
237 ind = 0;
238 fail_if((eina_unicode_utf8_get_next("\x00", &ind) != 0x00) ||
239 (ind != 0));
240 ind = 0;
241 fail_if((eina_unicode_utf8_get_next("\x01", &ind) != 0x01) ||
242 (ind != 1));
243 ind = 0;
244 fail_if((eina_unicode_utf8_get_next("\xC2\x80", &ind) != 0x80) ||
245 (ind != 2));
246 ind = 0;
247 fail_if((eina_unicode_utf8_get_next("\xE0\xA0\x80", &ind) != 0x800) ||
248 (ind != 3));
249 ind = 0;
250 fail_if((eina_unicode_utf8_get_next("\xF0\x90\x80\x80", &ind) != 0x10000) ||
251 (ind != 4));
252 ind = 0;
253 fail_if((eina_unicode_utf8_get_next("\xF8\x88\x80\x80\x80", &ind) != 0x200000) || (ind != 5));
254 ind = 0;
255 fail_if((eina_unicode_utf8_get_next("\xFC\x84\x80\x80\x80\x80", &ind) != 0x4000000) || (ind != 6));
256
257 /* Last possible sequence of a certain length */
258 ind = 0;
259 fail_if((eina_unicode_utf8_get_next("\x7F", &ind) != 0x7F) ||
260 (ind != 1));
261 ind = 0;
262 fail_if((eina_unicode_utf8_get_next("\xDF\xBF", &ind) != 0x7FF) ||
263 (ind != 2));
264 ind = 0;
265 fail_if((eina_unicode_utf8_get_next("\xEF\xBF\xBF", &ind) != 0xFFFF) ||
266 (ind != 3));
267 ind = 0;
268 fail_if((eina_unicode_utf8_get_next("\xF7\xBF\xBF\xBF", &ind) != 0x1FFFFF) ||
269 (ind != 4));
270 ind = 0;
271 fail_if((eina_unicode_utf8_get_next("\xFB\xBF\xBF\xBF\xBF", &ind) != 0x3FFFFFF) || (ind != 5));
272 ind = 0;
273 fail_if((eina_unicode_utf8_get_next("\xFD\xBF\xBF\xBF\xBF\xBF", &ind) != 0x7FFFFFFF) || (ind != 6));
274
275 /* Other boundary conditions */
276 ind = 0;
277 fail_if((eina_unicode_utf8_get_next("\xED\x9F\xBF", &ind) != 0xD7FF) ||
278 (ind != 3));
279 ind = 0;
280 fail_if((eina_unicode_utf8_get_next("\xEE\x80\x80", &ind) != 0xE000) ||
281 (ind != 3));
282 ind = 0;
283 fail_if((eina_unicode_utf8_get_next("\xEF\xBF\xBD", &ind) != 0xFFFD) ||
284 (ind != 3));
285 ind = 0;
286 fail_if((eina_unicode_utf8_get_next("\xF4\x8F\xBF\xBF", &ind) != 0x10FFFF) ||
287 (ind != 4));
288 ind = 0;
289 fail_if((eina_unicode_utf8_get_next("\xF4\x90\x80\x80", &ind) != 0x110000) ||
290 (ind != 4));
291
292 /* Error cases */
293 /* Standalone continuation bytes */
294 ind = 0;
295 fail_if((eina_unicode_utf8_get_next("\x80", &ind) != 0xDC80) ||
296 (ind != 1));
297 ind = 0;
298 fail_if((eina_unicode_utf8_get_next("\xBF", &ind) != 0xDCBF) ||
299 (ind != 1));
300 ind = 0;
301 fail_if((eina_unicode_utf8_get_next("\x80\xBF", &ind) != 0xDC80) ||
302 (ind != 1));
303 ind = 0;
304 fail_if((eina_unicode_utf8_get_next("\xBF\x80", &ind) != 0xDCBF) ||
305 (ind != 1));
306 /* All possible continuation bytes */
307 for (ch = 0x80 ; ch <= 0xBF ; ch++)
308 {
309 char buf[] = {ch, 0};
310 ind = 0;
311 fail_if((eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | ch)) ||
312 (ind != 1));
313 }
314
315 /* Isolated starting sequences */
316#define _FIRST_SEQUENCES(start, end) \
317 do \
318 { \
319 int i; \
320 char *buf = alloca(((end - start + 1) * 2) + 1); \
321 for (i = 0, ch = start ; ch <= end ; i++, ch++) \
322 { \
323 buf[i * 2] = ch; \
324 buf[(i * 2) + 1] = ' '; \
325 } \
326 ind = 0; \
327 for (i = 0, ch = start ; ch <= end ; ch++) \
328 { \
329 fail_if((eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | ch)) || \
330 (ind != ++i)); \
331 fail_if((eina_unicode_utf8_get_next(buf, &ind) != 0x20) || \
332 (ind != ++i)); \
333 } \
334 } \
335 while (0)
336 /* all first bytes of 2-byte sequences separated by spaces. */
337 _FIRST_SEQUENCES(0xC0, 0xDF);
338 /* all first bytes of 3-byte sequences separated by spaces. */
339 _FIRST_SEQUENCES(0xE0, 0xEF);
340 /* all first bytes of 4-byte sequences separated by spaces. */
341 _FIRST_SEQUENCES(0xF0, 0xF7);
342 /* all first bytes of 5-byte sequences separated by spaces. */
343 _FIRST_SEQUENCES(0xF8, 0xFB);
344 /* all first bytes of 6-byte sequences separated by spaces. */
345 _FIRST_SEQUENCES(0xFC, 0xFD);
346
347 /* Incomplete sequences first means the first utf8 char, len means
348 * the correct length */
349#define _INCOMPLETE_SEQUENCES(first, conti, len) \
350 do \
351 { \
352 int i, j; \
353 char *buf = alloca(len + 1); \
354 i = 0; \
355 buf[i++] = first; \
356 for ( ; i < len ; i++) \
357 { \
358 Eina_Unicode val; \
359 for (j = 1 ; j < i ; j++) \
360 { \
361 buf[j] = conti; \
362 } \
363 buf[j] = 0; \
364 ind = 0; \
365 fail_if( \
366 (eina_unicode_utf8_get_next(buf, &ind) != (0xDC00 | first))); \
367 while ((val = eina_unicode_utf8_get_next(buf, &ind))) \
368 { \
369 fail_if(val != (0xDC00 | conti)); \
370 } \
371 fail_if(ind != i); \
372 } \
373 } \
374 while (0)
375
376 /* Sequences with missing continuation */
377 _INCOMPLETE_SEQUENCES(0xC0, 0x81, 2);
378 _INCOMPLETE_SEQUENCES(0xDF, 0xBF, 2);
379 _INCOMPLETE_SEQUENCES(0xE0, 0x81, 3);
380 _INCOMPLETE_SEQUENCES(0xEF, 0xBF, 3);
381 _INCOMPLETE_SEQUENCES(0xF0, 0x81, 4);
382 _INCOMPLETE_SEQUENCES(0xF7, 0xBF, 4);
383 _INCOMPLETE_SEQUENCES(0xF8, 0x81, 5);
384 _INCOMPLETE_SEQUENCES(0xFB, 0xBF, 5);
385 _INCOMPLETE_SEQUENCES(0xFC, 0x81, 6);
386 _INCOMPLETE_SEQUENCES(0xFD, 0xBF, 6);
387
388 /* Impossible bytes */
389 ind = 0;
390 fail_if((eina_unicode_utf8_get_next("\xFE", &ind) != 0xDCFE) ||
391 (ind != 1));
392 ind = 0;
393 fail_if((eina_unicode_utf8_get_next("\xFF", &ind) != 0xDCFF) ||
394 (ind != 1));
395
396 /* Overlong sequences */
397 ind = 0;
398 fail_if((eina_unicode_utf8_get_next("\xC0\xAF", &ind) != 0xDCC0) ||
399 (ind != 1));
400 ind = 0;
401 fail_if((eina_unicode_utf8_get_next("\xE0\x80\xAF", &ind) != 0xDCE0) ||
402 (ind != 1));
403 ind = 0;
404 fail_if((eina_unicode_utf8_get_next("\xF0\x80\x80\xAF", &ind) != 0xDCF0) ||
405 (ind != 1));
406 ind = 0;
407 fail_if((eina_unicode_utf8_get_next("\xF8\x80\x80\x80\xAF", &ind) != 0xDCF8) ||
408 (ind != 1));
409 ind = 0;
410 fail_if((eina_unicode_utf8_get_next("\xFC\x80\x80\x80\x80\xAF", &ind) != 0xDCFC) ||
411 (ind != 1));
412
413 /* Maximum overlong sequences */
414 ind = 0;
415 fail_if((eina_unicode_utf8_get_next("\xC1\xBF", &ind) != 0xDCC1) ||
416 (ind != 1));
417 ind = 0;
418 fail_if((eina_unicode_utf8_get_next("\xE0\x9F\xBF", &ind) != 0xDCE0) ||
419 (ind != 1));
420 ind = 0;
421 fail_if((eina_unicode_utf8_get_next("\xF0\x8F\xBF\xBF", &ind) != 0xDCF0) ||
422 (ind != 1));
423 ind = 0;
424 fail_if((eina_unicode_utf8_get_next("\xF8\x87\xBF\xBF\xBF", &ind) != 0xDCF8) ||
425 (ind != 1));
426 ind = 0;
427 fail_if((eina_unicode_utf8_get_next("\xFC\x83\xBF\xBF\xBF\xBF", &ind) != 0xDCFC) ||
428 (ind != 1));
429 /* Add some more error cases here */
430
431 /* Just to cover prev/len. General utf-8 parsing was covered above */
432 fail_if(eina_unicode_utf8_get_len("\xF4\x90\x80\x80\xF4\x8F\xBF\xBF") != 2);
433 ind = 0;
434 fail_if((eina_unicode_utf8_get_prev("\xED\x9F\xBF", &ind) != 0xD7FF) ||
435 (ind != 0));
436 ind = 3;
437 fail_if((eina_unicode_utf8_get_prev("\xED\x9F\xBF", &ind) != 0x00) ||
438 (ind != 0));
439
440 eina_shutdown();
441}
442END_TEST
443
444START_TEST(eina_unicode_utf8_conversion)
445{
446 Eina_Unicode uni_in[] = {0x5D0, 0xFDF6, 0xDC80, 0x1F459, 0x3FFFFFF,
447 0x7FFFFFFF, 'a', 'b', 'c', 0};
448 Eina_Unicode *uni_out;
449 char c_in[] = "\xD7\x90""\xEF\xB7\xB6""\x80""\xF0\x9F\x91\x99"
450 "\xFB\xBF\xBF\xBF\xBF""\xFD\xBF\xBF\xBF\xBF\xBF""abc";
451 char *c_out;
452 int len;
453
454 eina_init();
455
456 uni_out = eina_unicode_utf8_to_unicode(c_in, &len);
457 fail_if((len != 9) || eina_unicode_strcmp(uni_in, uni_out));
458 free(uni_out);
459
460 c_out = eina_unicode_unicode_to_utf8(uni_in, &len);
461 fail_if((len != 24) || strcmp(c_in, c_out));
462 free(c_out);
463
464 eina_shutdown();
465}
466END_TEST
467
468void
469eina_test_ustr(TCase *tc)
470{
471 printf("ustr test\n");
472 tcase_add_test(tc,eina_unicode_strcmp_test);
473 tcase_add_test(tc,eina_unicode_strcpy_test);
474 tcase_add_test(tc,eina_unicode_strncpy_test);
475 tcase_add_test(tc,eina_ustr_strlen_test);
476 tcase_add_test(tc,eina_unicode_strnlen_test);
477 tcase_add_test(tc,eina_unicode_strdup_test);
478 tcase_add_test(tc,eina_unicode_strstr_test);
479 tcase_add_test(tc,eina_unicode_utf8);
480 tcase_add_test(tc,eina_unicode_utf8_conversion);
481
482}
483
diff --git a/libraries/eina/src/tests/eina_test_ustringshare.c b/libraries/eina/src/tests/eina_test_ustringshare.c
new file mode 100644
index 0000000..1b1ffb2
--- /dev/null
+++ b/libraries/eina/src/tests/eina_test_ustringshare.c
@@ -0,0 +1,119 @@
1/* EINA - EFL data type library
2 * Copyright (C) 2008 Cedric Bail
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library;
16 * if not, see <http://www.gnu.org/licenses/>.
17 */
18
19#ifdef HAVE_CONFIG_H
20# include "config.h"
21#endif
22
23#include <stdlib.h>
24#include <stdio.h>
25#include <string.h>
26#include <time.h>
27
28#include "eina_suite.h"
29#include "Eina.h"
30
31static const Eina_Unicode TEST0[] = {'t', 'e', 's', 't', '/', '0', 0};
32static const Eina_Unicode TEST1[] = {'t', 'e', 's', 't', '/', '1', 0};
33
34START_TEST(eina_ustringshare_simple)
35{
36 const Eina_Unicode *t0;
37 const Eina_Unicode *t1;
38
39 eina_init();
40
41 t0 = eina_ustringshare_add(TEST0);
42 t1 = eina_ustringshare_add(TEST1);
43
44 fail_if(t0 == NULL);
45 fail_if(t1 == NULL);
46 fail_if(eina_unicode_strcmp(t0, TEST0) != 0);
47 fail_if(eina_unicode_strcmp(t1, TEST1) != 0);
48 fail_if((int)eina_unicode_strlen(TEST0) != eina_ustringshare_strlen(t0));
49 fail_if((int)eina_unicode_strlen(TEST1) != eina_ustringshare_strlen(t1));
50
51 t0 = eina_ustringshare_ref(t0);
52 fail_if(t0 == NULL);
53 fail_if((int)strlen((char*)TEST0) != eina_stringshare_strlen((const char*)t0));
54
55 eina_ustringshare_del(t0);
56 eina_ustringshare_del(t0);
57 eina_ustringshare_del(t1);
58
59 eina_shutdown();
60}
61END_TEST
62
63
64START_TEST(eina_ustringshare_test_share)
65{
66 const Eina_Unicode *t0;
67 const Eina_Unicode *t1;
68
69 eina_init();
70
71 t0 = eina_ustringshare_add(TEST0);
72 t1 = eina_ustringshare_add(TEST0);
73
74 fail_if(t0 == NULL);
75 fail_if(t1 == NULL);
76 fail_if(eina_unicode_strcmp(t0, TEST0) != 0);
77 fail_if(eina_unicode_strcmp(t1, TEST0) != 0);
78 fail_if(t0 != t1);
79 fail_if((int)eina_unicode_strlen(TEST0) != eina_ustringshare_strlen(t0));
80 fail_if((int)eina_unicode_strlen(TEST0) != eina_ustringshare_strlen(t1));
81
82 eina_ustringshare_del(t0);
83 eina_ustringshare_del(t1);
84
85 eina_shutdown();
86}
87END_TEST
88
89START_TEST(eina_ustringshare_putstuff)
90{
91 const Eina_Unicode *tmp;
92 int i;
93
94 eina_init();
95
96 for (i = 10000; i > 0; --i)
97 {
98 Eina_Unicode string_[] = {'s', 't', 'r', 'i', 'n', 'g', '_', 0};
99 Eina_Unicode build[64];
100 eina_unicode_strcpy(build, string_);
101
102 build[7] = i;
103 build[8] = 0;
104 tmp = eina_ustringshare_add(build);
105 fail_if(tmp != eina_ustringshare_add(build));
106 fail_if((int)eina_unicode_strlen(build) != eina_ustringshare_strlen(tmp));
107 }
108
109 eina_shutdown();
110}
111END_TEST
112
113void
114eina_test_ustringshare(TCase *tc)
115{
116 tcase_add_test(tc, eina_ustringshare_simple);
117 tcase_add_test(tc, eina_ustringshare_test_share);
118 tcase_add_test(tc, eina_ustringshare_putstuff);
119}
diff --git a/libraries/eina/src/tests/evas_hash.c b/libraries/eina/src/tests/evas_hash.c
new file mode 100644
index 0000000..33615af
--- /dev/null
+++ b/libraries/eina/src/tests/evas_hash.c
@@ -0,0 +1,536 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Evas_Data.h"
9
10typedef struct _Evas_Hash_El Evas_Hash_El;
11
12struct _Evas_Hash_El
13{
14 Evas_Object_List _list_data;
15 const char *key;
16 void *data;
17};
18
19static inline int _evas_hash_gen(const char *key);
20
21static int _evas_hash_alloc_error = 0;
22
23static inline int
24_evas_hash_gen(const char *key)
25{
26 unsigned int hash_num = 5381;
27 const unsigned char *ptr;
28
29 if (!key)
30 return 0;
31
32 for (ptr = (unsigned char *)key; *ptr; ptr++)
33 hash_num = (hash_num * 33) ^ *ptr;
34
35 hash_num &= 0xff;
36 return (int)hash_num;
37}
38
39/**
40 * @defgroup Evas_Hash_Data Hash Data Functions
41 *
42 * Functions that add, access or remove data from hashes.
43 *
44 * The following example shows how to add and then access data in a
45 * hash table:
46 * @code
47 * Evas_Hash *hash = NULL;
48 * extern void *my_data;
49 *
50 * hash = evas_hash_add(hash, "My Data", my_data);
51 * if (evas_hash_alloc_error())
52 * {
53 * fprintf(stderr, "ERROR: Memory is low. Hash allocation failed.\n");
54 * exit(-1);
55 * }
56 * if (evas_hash_find(hash, "My Data") == my_data)
57 * {
58 * printf("My Data inserted and successfully found.\n");
59 * }
60 * @endcode
61 *
62 * What follows is another example, showing how the @ref evas_hash_del
63 * function is used:
64 * @code
65 * extern Evas_Hash *hash;
66 * extern void *data;
67 *
68 * printf("Insert some data...\n");
69 * hash = evas_hash_add(hash, "My Data", my_data);
70 * printf("Removing by key...\n");
71 * hash = evas_hash_del(hash, "My Data", NULL);
72 * printf("Insert some more data as a NULL key...\n");
73 * hash = evas_hash_add(hash, NULL, my_data);
74 * printf("Removing by data as a NULL key...\n");
75 * hash = evas_hash_del(hash, NULL, my_data);
76 * @endcode
77 */
78
79/**
80 * Adds an entry to the given hash table.
81 *
82 * @p key is expected to be a unique string within the hash table.
83 * Otherwise, you cannot be sure which inserted data pointer will be
84 * accessed with @ref evas_hash_find , and removed with
85 * @ref evas_hash_del .
86 *
87 * Key strings are case sensitive.
88 *
89 * @ref evas_hash_alloc_error should be used to determine if an
90 * allocation error occurred during this function.
91 *
92 * @param hash The given hash table. Can be @c NULL, in which case a
93 * new hash table is allocated and returned.
94 * @param key A unique string. Can be @c NULL.
95 * @param data Data to associate with the string given by @p key.
96 * @return Either the given hash table, or if the given value for @p
97 * hash is @c NULL, then a new one. @c NULL will be returned
98 * if memory could not be allocated for a new table.
99 * @ingroup Evas_Hash_Data
100 */
101EAPI Evas_Hash *
102evas_hash_add(Evas_Hash *hash, const char *key, const void *data)
103{
104 int hash_num;
105 Evas_Hash_El *el;
106
107 if ((!key) || (!data))
108 return hash;
109
110 _evas_hash_alloc_error = 0;
111 if (!hash)
112 {
113 hash = calloc(1, sizeof(struct _Evas_Hash));
114 if (!hash)
115 {
116 _evas_hash_alloc_error = 1;
117 return NULL;
118 }
119 }
120
121 if (!(el = malloc(sizeof(struct _Evas_Hash_El) + strlen(key) + 1)))
122 {
123 if (hash->population <= 0)
124 {
125 free(hash);
126 hash = NULL;
127 }
128
129 _evas_hash_alloc_error = 1;
130 return hash;
131 }
132
133 el->key = ((char *)el) + sizeof(struct _Evas_Hash_El);
134 strcpy((char *)el->key, key);
135 el->data = (void *)data;
136 hash_num = _evas_hash_gen(key);
137 hash->buckets[hash_num] = evas_object_list_prepend(hash->buckets[hash_num],
138 el);
139 hash->population++;
140 return hash;
141}
142
143/**
144 * Adds an entry to the given hash table and does not duplicate the string key.
145 *
146 * @p key is expected to be a unique string within the hash table.
147 * Otherwise, you cannot be sure which inserted data pointer will be
148 * accessed with @ref evas_hash_find , and removed with
149 * @ref evas_hash_del . This call does not make a copy of the key so it must
150 * be a string constant or stored elsewhere (in the object being added) etc.
151 *
152 * Key strings are case sensitive.
153 *
154 * @ref evas_hash_alloc_error should be used to determine if an
155 * allocation error occurred during this function.
156 *
157 * @param hash The given hash table. Can be @c NULL, in which case a
158 * new hash table is allocated and returned.
159 * @param key A unique string. Can be @c NULL.
160 * @param data Data to associate with the string given by @p key.
161 * @return Either the given hash table, or if the given value for @p
162 * hash is @c NULL, then a new one. @c NULL will be returned
163 * if memory could not be allocated for a new table.
164 * @ingroup Evas_Hash_Data
165 */
166EAPI Evas_Hash *
167evas_hash_direct_add(Evas_Hash *hash, const char *key, const void *data)
168{
169 int hash_num;
170 Evas_Hash_El *el;
171
172 if ((!key) || (!data))
173 return hash;
174
175 _evas_hash_alloc_error = 0;
176 if (!hash)
177 {
178 hash = calloc(1, sizeof(struct _Evas_Hash));
179 if (!hash)
180 {
181 _evas_hash_alloc_error = 1;
182 return NULL;
183 }
184 }
185
186 if (!(el = malloc(sizeof(struct _Evas_Hash_El))))
187 {
188 if (hash->population <= 0)
189 {
190 free(hash);
191 hash = NULL;
192 }
193
194 _evas_hash_alloc_error = 1;
195 return hash;
196 }
197
198 el->key = key;
199 el->data = (void *)data;
200 hash_num = _evas_hash_gen(key);
201 hash->buckets[hash_num] = evas_object_list_prepend(hash->buckets[hash_num],
202 el);
203 hash->population++;
204 return hash;
205}
206
207/**
208 * Removes the entry identified by @p key or @p data from the given
209 * hash table.
210 *
211 * If @p key is @c NULL, then @p data is used to find a match to
212 * remove.
213 *
214 * @param hash The given hash table.
215 * @param key The key string. Can be @c NULL.
216 * @param data The data pointer to remove if @p key is @c NULL.
217 * Otherwise, not required and can be @c NULL.
218 * @return The modified hash table. If there are no entries left, the
219 * hash table will be freed and @c NULL will be returned.
220 * @ingroup Evas_Hash_Data
221 */
222EAPI Evas_Hash *
223evas_hash_del(Evas_Hash *hash, const char *key, const void *data)
224{
225 int hash_num;
226 Evas_Hash_El *el;
227 Evas_Object_List *l;
228
229 if (!hash)
230 return NULL;
231
232 if (!key)
233 for (hash_num = 0; hash_num < 256; hash_num++)
234 {
235 for (l = hash->buckets[hash_num]; l; l = l->next)
236 {
237 el = (Evas_Hash_El *)l;
238 if (el->data == data)
239 {
240 hash->buckets[hash_num] = evas_object_list_remove(
241 hash->buckets[hash_num],
242 el);
243 free(el);
244 hash->population--;
245 if (hash->population <= 0)
246 {
247 free(hash);
248 hash = NULL;
249 }
250
251 return hash;
252 }
253 }
254 }
255 else
256 {
257 hash_num = _evas_hash_gen(key);
258 for (l = hash->buckets[hash_num]; l; l = l->next)
259 {
260 el = (Evas_Hash_El *)l;
261 if (!strcmp(el->key, key))
262 if ((!data) || (el->data == data))
263 {
264 hash->buckets[hash_num] = evas_object_list_remove(
265 hash->buckets[hash_num],
266 el);
267 free(el);
268 hash->population--;
269 if (hash->population <= 0)
270 {
271 free(hash);
272 hash = NULL;
273 }
274
275 return hash;
276 }
277
278 }
279 }
280
281 return hash;
282}
283
284/**
285 * Retrieves a specific entry in the given hash table.
286 * @param hash The given hash table.
287 * @param key The key string of the entry to find.
288 * @return The data pointer for the stored entry, or @c NULL if not
289 * found.
290 * @ingroup Evas_Hash_Data
291 */
292EAPI void *
293evas_hash_find(const Evas_Hash *hash, const char *key)
294{
295 int hash_num;
296 Evas_Hash_El *el;
297 Evas_Object_List *l;
298
299 _evas_hash_alloc_error = 0;
300 if ((!hash) || (!key))
301 return NULL;
302
303 hash_num = _evas_hash_gen(key);
304 for (l = hash->buckets[hash_num]; l; l = l->next)
305 {
306 el = (Evas_Hash_El *)l;
307 if (!strcmp(el->key, key))
308 {
309 if (l != hash->buckets[hash_num])
310 {
311 Evas_Object_List *bucket;
312
313 bucket = hash->buckets[hash_num];
314 bucket = evas_object_list_remove(bucket, el);
315 bucket = evas_object_list_prepend(bucket, el);
316 ((Evas_Hash *)hash)->buckets[hash_num] = bucket;
317 }
318
319 return el->data;
320 }
321 }
322 return NULL;
323}
324
325/**
326 * Modifies the entry pointer at the specified key and returns the old entry
327 * @param hash The given hash table.
328 * @param key The key string of the entry to modify.
329 * @param data The data to replace the old entry, if it exists.
330 * @return The data pointer for the old stored entry, or @c NULL if not
331 * found. If an existing entry is not found, nothing is added to the
332 * hash.
333 * @ingroup Evas_Hash_Data
334 */
335EAPI void *
336evas_hash_modify(Evas_Hash *hash, const char *key, const void *data)
337{
338 int hash_num;
339 Evas_Hash_El *el;
340 Evas_Object_List *l;
341
342 _evas_hash_alloc_error = 0;
343 if (!hash)
344 return NULL;
345
346 hash_num = _evas_hash_gen(key);
347 for (l = hash->buckets[hash_num]; l; l = l->next)
348 {
349 el = (Evas_Hash_El *)l;
350 if ((key) && (!strcmp(el->key, key)))
351 {
352 void *old_data;
353
354 if (l != hash->buckets[hash_num])
355 {
356 hash->buckets[hash_num] = evas_object_list_remove(
357 hash->buckets[hash_num],
358 el);
359 hash->buckets[hash_num] = evas_object_list_prepend(
360 hash->buckets[hash_num],
361 el);
362 }
363
364 old_data = el->data;
365 el->data = (void *)data;
366 return old_data;
367 }
368 }
369 return NULL;
370}
371
372/**
373 * @defgroup Evas_Hash_General_Group Hash General Functions
374 *
375 * Miscellaneous functions that operate on hash objects.
376 */
377
378/**
379 * Retrieves the number of buckets available in the given hash table.
380 * @param hash The given hash table.
381 * @return @c 256 if @p hash is not @c NULL. @c 0 otherwise.
382 * @ingroup Evas_Hash_General_Group
383 */
384EAPI int
385evas_hash_size(const Evas_Hash *hash)
386{
387 if (!hash)
388 return 0;
389
390 return 256;
391}
392
393/**
394 * @todo Complete polishing documentation for evas_hash.c. The
395 * functions' docs may be grouped, but they need some simplification.
396 */
397
398/**
399 * Free an entire hash table
400 * @param hash The hash table to be freed
401 *
402 * This function frees up all the memory allocated to storing the specified
403 * hash tale pointed to by @p hash. Any entries in the table that the program
404 * has no more pointers for elsewhere may now be lost, so this should only be
405 * called if the program has lready freed any allocated data in the hash table
406 * or has the pointers for data in the table stored elswehere as well.
407 *
408 * Example:
409 * @code
410 * extern Evas_Hash *hash;
411 *
412 * evas_hash_free(hash);
413 * hash = NULL;
414 * @endcode
415 * @ingroup Evas_Hash_General_Group
416 */
417EAPI void
418evas_hash_free(Evas_Hash *hash)
419{
420 int i, size;
421
422 if (!hash)
423 return;
424
425 size = evas_hash_size(hash);
426 for (i = 0; i < size; i++)
427 {
428 while (hash->buckets[i])
429 {
430 Evas_Hash_El *el;
431
432 el = (Evas_Hash_El *)hash->buckets[i];
433 hash->buckets[i] = evas_object_list_remove(hash->buckets[i], el);
434 free(el);
435 }
436 }
437 free(hash);
438}
439
440/**
441 * Call a function on every member stored in the hash table
442 * @param hash The hash table whose members will be walked
443 * @param func The function to call on each parameter
444 * @param fdata The data pointer to pass to the function being called
445 *
446 * This function goes through every entry in the hash table @p hash and calls
447 * the function @p func on each member. The function should NOT modify the
448 * hash table contents if it returns 1. IF the hash table contents are
449 * modified by this function or the function wishes to stop processing it must
450 * return 0, otherwise return 1 to keep processing.
451 *
452 * Example:
453 * @code
454 * extern Evas_Hash *hash;
455 *
456 * Evas_Bool hash_fn(Evas_Hash *hash, const char *key, void *data, void *fdata)
457 * {
458 * printf("Func data: %s, Hash entry: %s / %p\n", fdata, key, data);
459 * return 1;
460 * }
461 *
462 * int main(int argc, char **argv)
463 * {
464 * char *hash_fn_data;
465 *
466 * hash_fn_data = strdup("Hello World");
467 * evas_hash_foreach(hash, hash_fn, hash_fn_data);
468 * free(hash_fn_data);
469 * }
470 * @endcode
471 * @ingroup Evas_Hash_General_Group
472 */
473EAPI void
474evas_hash_foreach(const Evas_Hash *hash, Evas_Bool (*func)(
475 const Evas_Hash *hash,
476 const char *key,
477 void *data,
478 void *fdata), const void *fdata)
479{
480 int i, size;
481
482 if (!hash)
483 return;
484
485 size = evas_hash_size(hash);
486 for (i = 0; i < size; i++)
487 {
488 Evas_Object_List *l, *next_l;
489
490 for (l = hash->buckets[i]; l; )
491 {
492 Evas_Hash_El *el;
493
494 next_l = l->next;
495 el = (Evas_Hash_El *)l;
496 if (!func(hash, el->key, el->data, (void *)fdata))
497 return;
498
499 l = next_l;
500 }
501 }
502}
503
504/**
505 * Return memory allocation failure flag after an function requiring allocation
506 * @return The state of the allocation flag
507 *
508 * This function returns the state of the memory allocation flag. This flag is
509 * set if memory allocations fail during evas_hash_add() calls. If they do, 1
510 * will be returned, otherwise 0 will be returned. The flag will remain in its
511 * current state until the next call that requires allocation is called, and
512 * is then reset.
513 *
514 * Example:
515 * @code
516 * Evas_Hash *hash = NULL;
517 * extern void *my_data;
518 *
519 * hash = evas_hash_add(hash, "My Data", my_data);
520 * if (evas_hash_alloc_error())
521 * {
522 * fprintf(stderr, "ERROR: Memory is low. Hash allocation failed.\n");
523 * exit(-1);
524 * }
525 * if (evas_hash_find(hash, "My Data") == my_data)
526 * {
527 * printf("My Data inserted and successfully found.\n");
528 * }
529 * @endcode
530 * @ingroup Evas_Hash_General_Group
531 */
532EAPI int
533evas_hash_alloc_error(void)
534{
535 return _evas_hash_alloc_error;
536}
diff --git a/libraries/eina/src/tests/evas_list.c b/libraries/eina/src/tests/evas_list.c
new file mode 100644
index 0000000..55e301f
--- /dev/null
+++ b/libraries/eina/src/tests/evas_list.c
@@ -0,0 +1,1093 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdlib.h>
6
7#include "Evas_Data.h"
8#include <evas_mempool.h>
9
10typedef struct _Evas_List_Accounting Evas_List_Accounting;
11
12struct _Evas_List_Accounting
13{
14 Evas_List *last;
15 int count;
16};
17
18static int _evas_list_alloc_error = 0;
19
20static Evas_Mempool _evas_list_mempool =
21{
22 sizeof(Evas_List),
23 320,
24 0, NULL, NULL
25};
26static Evas_Mempool _evas_list_accounting_mempool =
27{
28 sizeof(Evas_List_Accounting),
29 80,
30 0, NULL, NULL
31};
32
33/**
34 * @defgroup Evas_List_Data_Group Linked List Creation Functions
35 *
36 * Functions that add data to an Evas_List.
37 */
38
39/**
40 * Appends the given data to the given linked list.
41 *
42 * The following example code demonstrates how to ensure that the
43 * given data has been successfully appended.
44 *
45 * @code
46 * Evas_List *list = NULL;
47 * extern void *my_data;
48 *
49 * list = evas_list_append(list, my_data);
50 * if (evas_list_alloc_error())
51 * {
52 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
53 * exit(-1);
54 * }
55 * @endcode
56 *
57 * @param list The given list. If @c NULL is given, then a new list
58 * is created.
59 * @param data The data to append.
60 * @return A new list pointer that should be used in place of the one
61 * given to this function if successful. Otherwise, the old
62 * pointer is returned.
63 * @ingroup Evas_List_Data_Group
64 */
65EAPI Evas_List *
66evas_list_append(Evas_List *list, const void *data)
67{
68 Evas_List *l, *new_l;
69
70 _evas_list_alloc_error = 0;
71 new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
72 if (!new_l)
73 {
74 _evas_list_alloc_error = 1;
75 return list;
76 }
77
78 new_l->next = NULL;
79 new_l->data = (void *)data;
80 if (!list)
81 {
82 new_l->prev = NULL;
83 new_l->accounting = evas_mempool_malloc(&_evas_list_accounting_mempool,
84 sizeof(Evas_List_Accounting));
85 if (!new_l->accounting)
86 {
87 _evas_list_alloc_error = 1;
88 evas_mempool_free(&_evas_list_mempool, new_l);
89 return list;
90 }
91
92 new_l->accounting->last = new_l;
93 new_l->accounting->count = 1;
94 return new_l;
95 }
96
97 l = list->accounting->last;
98 l->next = new_l;
99 new_l->prev = l;
100 new_l->accounting = list->accounting;
101 list->accounting->last = new_l;
102 list->accounting->count++;
103 return list;
104}
105
106/**
107 * Prepends the given data to the given linked list.
108 *
109 * The following example code demonstrates how to ensure that the
110 * given data has been successfully prepended.
111 *
112 * Example:
113 * @code
114 * Evas_List *list = NULL;
115 * extern void *my_data;
116 *
117 * list = evas_list_prepend(list, my_data);
118 * if (evas_list_alloc_error())
119 * {
120 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
121 * exit(-1);
122 * }
123 * @endcode
124 *
125 * @param list The given list.
126 * @param data The given data.
127 * @return A new list pointer that should be used in place of the one
128 * given to this function, if successful. Otherwise, the old
129 * pointer is returned.
130 * @ingroup Evas_List_Data_Group
131 */
132EAPI Evas_List *
133evas_list_prepend(Evas_List *list, const void *data)
134{
135 Evas_List *new_l;
136
137 _evas_list_alloc_error = 0;
138 new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
139 if (!new_l)
140 {
141 _evas_list_alloc_error = 1;
142 return list;
143 }
144
145 new_l->prev = NULL;
146 new_l->data = (void *)data;
147 if (!list)
148 {
149 new_l->next = NULL;
150 new_l->accounting = evas_mempool_malloc(&_evas_list_accounting_mempool,
151 sizeof(Evas_List_Accounting));
152 if (!new_l->accounting)
153 {
154 _evas_list_alloc_error = 1;
155 evas_mempool_free(&_evas_list_mempool, new_l);
156 return list;
157 }
158
159 new_l->accounting->last = new_l;
160 new_l->accounting->count = 1;
161 return new_l;
162 }
163
164 new_l->next = list;
165 list->prev = new_l;
166 new_l->accounting = list->accounting;
167 list->accounting->count++;
168 return new_l;
169}
170
171/**
172 * Inserts the given data into the given linked list after the specified data.
173 *
174 * If @p relative is not in the list, @p data is appended to the end of the
175 * list. If there are multiple instances of @p relative in the list,
176 * @p data is inserted after the first instance.
177 *
178 * The following example code demonstrates how to ensure that the
179 * given data has been successfully inserted.
180 *
181 * @code
182 * Evas_List *list = NULL;
183 * extern void *my_data;
184 * extern void *relative_member;
185 *
186 * list = evas_list_append(list, relative_member);
187 * if (evas_list_alloc_error())
188 * {
189 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
190 * exit(-1);
191 * }
192 * list = evas_list_append_relative(list, my_data, relative_member);
193 * if (evas_list_alloc_error())
194 * {
195 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
196 * exit(-1);
197 * }
198 * @endcode
199 *
200 * @param list The given linked list.
201 * @param data The given data.
202 * @param relative The data to insert after.
203 * @return A new list pointer that should be used in place of the one
204 * given to this function if successful. Otherwise, the old pointer
205 * is returned.
206 * @ingroup Evas_List_Data_Group
207 */
208EAPI Evas_List *
209evas_list_append_relative(Evas_List *list,
210 const void *data,
211 const void *relative)
212{
213 Evas_List *l;
214
215 for (l = list; l; l = l->next)
216 {
217 if (l->data == relative)
218 return evas_list_append_relative_list(list, data, l);
219 }
220 return evas_list_append(list, data);
221}
222
223EAPI Evas_List *
224evas_list_append_relative_list(Evas_List *list,
225 const void *data,
226 Evas_List *relative)
227{
228 Evas_List *new_l;
229
230 if ((!list) || (!relative))
231 return evas_list_append(list, data);
232
233 _evas_list_alloc_error = 0;
234 new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
235 if (!new_l)
236 {
237 _evas_list_alloc_error = 1;
238 return list;
239 }
240
241 new_l->data = (void *)data;
242 if (relative->next)
243 {
244 new_l->next = relative->next;
245 relative->next->prev = new_l;
246 }
247 else
248 new_l->next = NULL;
249
250 relative->next = new_l;
251 new_l->prev = relative;
252 new_l->accounting = list->accounting;
253 list->accounting->count++;
254 if (!new_l->next)
255 new_l->accounting->last = new_l;
256
257 return list;
258}
259
260/**
261 * Prepend a data pointer to a linked list before the member specified
262 * @param list The list handle to prepend @p data too
263 * @param data The data pointer to prepend to list @p list before @p relative
264 * @param relative The data pointer before which to insert @p data
265 * @return A new list handle to replace the old one
266
267 * Inserts the given data into the given linked list before the member
268 * specified.
269 *
270 * If @p relative is not in the list, @p data is prepended to the
271 * start of the list. If there are multiple instances of @p relative
272 * in the list, @p data is inserted before the first instance.
273 *
274 * The following code example demonstrates how to ensure that the
275 * given data has been successfully inserted.
276 *
277 * @code
278 * Evas_List *list = NULL;
279 * extern void *my_data;
280 * extern void *relative_member;
281 *
282 * list = evas_list_append(list, relative_member);
283 * if (evas_list_alloc_error())
284 * {
285 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
286 * exit(-1);
287 * }
288 * list = evas_list_prepend_relative(list, my_data, relative_member);
289 * if (evas_list_alloc_error())
290 * {
291 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
292 * exit(-1);
293 * }
294 * @endcode
295 *
296 * @param list The given linked list.
297 * @param data The given data.
298 * @param relative The data to insert before.
299 * @return A new list pointer that should be used in place of the one
300 * given to this function if successful. Otherwise the old pointer
301 * is returned.
302 * @ingroup Evas_List_Data_Group
303 */
304EAPI Evas_List *
305evas_list_prepend_relative(Evas_List *list,
306 const void *data,
307 const void *relative)
308{
309 Evas_List *l;
310
311 _evas_list_alloc_error = 0;
312 for (l = list; l; l = l->next)
313 {
314 if (l->data == relative)
315 return evas_list_prepend_relative_list(list, data, l);
316 }
317 return evas_list_prepend(list, data);
318}
319
320EAPI Evas_List *
321evas_list_prepend_relative_list(Evas_List *list,
322 const void *data,
323 Evas_List *relative)
324{
325 Evas_List *new_l;
326
327 if ((!list) || (!relative))
328 return evas_list_prepend(list, data);
329
330 _evas_list_alloc_error = 0;
331 new_l = evas_mempool_malloc(&_evas_list_mempool, sizeof(Evas_List));
332 if (!new_l)
333 {
334 _evas_list_alloc_error = 1;
335 return list;
336 }
337
338 new_l->data = (void *)data;
339 new_l->prev = relative->prev;
340 new_l->next = relative;
341 if (relative->prev)
342 relative->prev->next = new_l;
343
344 relative->prev = new_l;
345 new_l->accounting = list->accounting;
346 list->accounting->count++;
347 if (new_l->prev)
348 return list;
349
350 return new_l;
351}
352
353/**
354 * @defgroup Evas_List_Remove_Group Linked List Remove Functions
355 *
356 * Functions that remove data from linked lists.
357 */
358
359/**
360 * Removes the first instance of the specified data from the given list.
361 *
362 * If the specified data is not in the given list, nothing is done.
363 *
364 * @param list The given list.
365 * @param data The specified data.
366 * @return A new list pointer that should be used in place of the one
367 * passed to this functions.
368 * @ingroup Evas_List_Remove_Group
369 */
370EAPI Evas_List *
371evas_list_remove(Evas_List *list, const void *data)
372{
373 Evas_List *l;
374
375 for (l = list; l; l = l->next)
376 {
377 if (l->data == data)
378 return evas_list_remove_list(list, l);
379 }
380 return list;
381}
382
383/**
384 * Removes the specified data
385 *
386 * Remove a specified member from a list
387 * @param list The list handle to remove @p remove_list from
388 * @param remove_list The list node which is to be removed
389 * @return A new list handle to replace the old one
390 *
391 * Calling this function takes the list node @p remove_list and removes it
392 * from the list @p list, freeing the list node structure @p remove_list.
393 *
394 * Example:
395 * @code
396 * extern Evas_List *list;
397 * Evas_List *l;
398 * extern void *my_data;
399 *
400 * for (l = list; l; l= l->next)
401 * {
402 * if (l->data == my_data)
403 * {
404 * list = evas_list_remove_list(list, l);
405 * break;
406 * }
407 * }
408 * @endcode
409 * @ingroup Evas_List_Remove_Group
410 */
411EAPI Evas_List *
412evas_list_remove_list(Evas_List *list, Evas_List *remove_list)
413{
414 Evas_List *return_l;
415
416 if (!list)
417 return NULL;
418
419 if (!remove_list)
420 return list;
421
422 if (remove_list->next)
423 remove_list->next->prev = remove_list->prev;
424
425 if (remove_list->prev)
426 {
427 remove_list->prev->next = remove_list->next;
428 return_l = list;
429 }
430 else
431 return_l = remove_list->next;
432
433 if (remove_list == list->accounting->last)
434 list->accounting->last = remove_list->prev;
435
436 list->accounting->count--;
437 if (list->accounting->count == 0)
438 evas_mempool_free(&_evas_list_accounting_mempool, list->accounting);
439
440 evas_mempool_free(&_evas_list_mempool, remove_list);
441 return return_l;
442}
443
444/**
445 * Moves the specified data to the head of the list
446 *
447 * Move a specified member to the head of the list
448 * @param list The list handle to move @p inside
449 * @param move_list The list node which is to be moved
450 * @return A new list handle to replace the old one
451 *
452 * Calling this function takes the list node @p move_list and moves it
453 * to the front of the @p list.
454 *
455 * Example:
456 * @code
457 * extern Evas_List *list;
458 * Evas_List *l;
459 * extern void *my_data;
460 *
461 * for (l = list; l; l= l->next)
462 * {
463 * if (l->data == my_data)
464 * {
465 * list = evas_list_promote_list(list, l);
466 * break;
467 * }
468 * }
469 * @endcode
470 * @ingroup Evas_List_Promote_Group
471 */
472EAPI Evas_List *
473evas_list_promote_list(Evas_List *list, Evas_List *move_list)
474{
475 Evas_List *return_l;
476
477 if (!list)
478 return NULL;
479
480 if (!move_list)
481 return list;
482
483 if (move_list == list)
484 return list;
485
486 if (move_list->next)
487 move_list->next->prev = move_list->prev;
488
489 if (move_list->prev)
490 {
491 move_list->prev->next = move_list->next;
492 return_l = list;
493 }
494 else
495 return_l = move_list->next;
496
497 if (move_list == list->accounting->last)
498 list->accounting->last = move_list->prev;
499
500 move_list->prev = return_l->prev;
501 if (return_l->prev)
502 return_l->prev->next = move_list;
503
504 return_l->prev = move_list;
505 move_list->next = return_l;
506 return move_list;
507}
508
509
510
511/**
512 * @defgroup Evas_List_Find_Group Linked List Find Functions
513 *
514 * Functions that find specified data in a linked list.
515 */
516
517/**
518 * Find a member of a list and return the member
519 * @param list The list handle to search for @p data
520 * @param data The data pointer to find in the list @p list
521 * @return The found member data pointer
522 *
523 * A call to this function will search the list @p list from beginning to end
524 * for the first member whose data pointer is @p data. If it is found, @p data
525 * will be returned, otherwise NULL will be returned.
526 *
527 * Example:
528 * @code
529 * extern Evas_List *list;
530 * extern void *my_data;
531 *
532 * if (evas_list_find(list, my_data) == my_data)
533 * {
534 * printf("Found member %p\n", my_data);
535 * }
536 * @endcode
537 * @ingroup Evas_List_Find_Group
538 */
539EAPI void *
540evas_list_find(const Evas_List *list, const void *data)
541{
542 const Evas_List *l;
543
544 for (l = list; l; l = l->next)
545 {
546 if (l->data == data)
547 return (void *)data;
548 }
549 return NULL;
550}
551
552/**
553 * Find a member of a list and return the list node containing that member
554 * @param list The list handle to search for @p data
555 * @param data The data pointer to find in the list @p list
556 * @return The found members list node
557 *
558 * A call to this function will search the list @p list from beginning to end
559 * for the first member whose data pointer is @p data. If it is found, the
560 * list node containing the specified member will be returned, otherwise NULL
561 * will be returned.
562 *
563 * Example:
564 * @code
565 * extern Evas_List *list;
566 * extern void *my_data;
567 * Evas_List *found_node;
568 *
569 * found_node = evas_list_find_list(list, my_data);
570 * if (found_node)
571 * {
572 * printf("Found member %p\n", found_node->data);
573 * }
574 * @endcode
575 * @ingroup Evas_List_Find_Group
576 */
577EAPI Evas_List *
578evas_list_find_list(const Evas_List *list, const void *data)
579{
580 const Evas_List *l;
581
582 for (l = list; l; l = l->next)
583 {
584 if (l->data == data)
585 return (Evas_List *)l;
586 }
587 return NULL;
588}
589
590/**
591 * Free an entire list and all the nodes, ignoring the data contained
592 * @param list The list to free
593 * @return A NULL pointer
594 *
595 * This function will free all the list nodes in list specified by @p list.
596 *
597 * Example:
598 * @code
599 * extern Evas_List *list;
600 *
601 * list = evas_list_free(list);
602 * @endcode
603 * @ingroup Evas_List_Remove_Group
604 */
605EAPI Evas_List *
606evas_list_free(Evas_List *list)
607{
608 Evas_List *l, *free_l;
609
610 if (!list)
611 return NULL;
612
613 evas_mempool_free(&_evas_list_accounting_mempool, list->accounting);
614 for (l = list; l; )
615 {
616 free_l = l;
617 l = l->next;
618 evas_mempool_free(&_evas_list_mempool, free_l);
619 }
620 return NULL;
621}
622
623/**
624 * @defgroup Evas_List_Traverse_Group Linked List Traverse Functions
625 *
626 * Functions that you can use to traverse a linked list.
627 */
628
629/**
630 * Get the last list node in the list
631 * @param list The list to get the last list node from
632 * @return The last list node in the list @p list
633 *
634 * This function will return the last list node in the list (or NULL if the
635 * list is empty).
636 *
637 * NB: This is a order-1 operation (it takes the same short time regardless of
638 * the length of the list).
639 *
640 * Example:
641 * @code
642 * extern Evas_List *list;
643 * Evas_List *last, *l;
644 *
645 * last = evas_list_last(list);
646 * printf("The list in reverse:\n");
647 * for (l = last; l; l = l->prev)
648 * {
649 * printf("%p\n", l->data);
650 * }
651 * @endcode
652 * @ingroup Evas_List_Traverse_Group
653 */
654EAPI Evas_List *
655evas_list_last(const Evas_List *list)
656{
657 if (!list)
658 return NULL;
659
660 return list->accounting->last;
661}
662
663/**
664 * Get the next list node after the specified list node
665 * @param list The list node to get the next list node from
666 * @return The next list node, or NULL if no next list node exists
667 *
668 * This function returns the next list node after the current one. It is
669 * equivalent to list->next.
670 *
671 * Example:
672 * @code
673 * extern Evas_List *list;
674 * Evas_List *l;
675 *
676 * printf("The list:\n");
677 * for (l = list; l; l = evas_list_next(l))
678 * {
679 * printf("%p\n", l->data);
680 * }
681 * @endcode
682 * @ingroup Evas_List_Traverse_Group
683 */
684EAPI Evas_List *
685evas_list_next(const Evas_List *list)
686{
687 if (!list)
688 return NULL;
689
690 return list->next;
691}
692
693/**
694 * Get the previous list node before the specified list node
695 * @param list The list node to get the previous list node from
696 * @return The previous list node, or NULL if no previous list node exists
697 *
698 * This function returns the previous list node before the current one. It is
699 * equivalent to list->prev.
700 *
701 * Example:
702 * @code
703 * extern Evas_List *list;
704 * Evas_List *last, *l;
705 *
706 * last = evas_list_last(list);
707 * printf("The list in reverse:\n");
708 * for (l = last; l; l = evas_list_prev(l))
709 * {
710 * printf("%p\n", l->data);
711 * }
712 * @endcode
713 * @ingroup Evas_List_Traverse_Group
714 */
715EAPI Evas_List *
716evas_list_prev(const Evas_List *list)
717{
718 if (!list)
719 return NULL;
720
721 return list->prev;
722}
723
724/**
725 * @defgroup Evas_List_General_Group Linked List General Functions
726 *
727 * Miscellaneous functions that work on linked lists.
728 */
729
730/**
731 * Get the list node data member
732 * @param list The list node to get the data member of
733 * @return The data member from the list node @p list
734 *
735 * This function returns the data member of the specified list node @p list.
736 * It is equivalent to list->data.
737 *
738 * Example:
739 * @code
740 * extern Evas_List *list;
741 * Evas_List *l;
742 *
743 * printf("The list:\n");
744 * for (l = list; l; l = evas_list_next(l))
745 * {
746 * printf("%p\n", evas_list_data(l));
747 * }
748 * @endcode
749 * @ingroup Evas_List_General_Group
750 */
751EAPI void *
752evas_list_data(const Evas_List *list)
753{
754 if (!list)
755 return NULL;
756
757 return list->data;
758}
759
760/**
761 * Get the count of the number of items in a list
762 * @param list The list whose count to return
763 * @return The number of members in the list @p list
764 *
765 * This function returns how many members in the specified list: @p list. If
766 * the list is empty (NULL), 0 is returned.
767 *
768 * NB: This is an order-1 operation and takes the same time regardless of the
769 * length of the list.
770 *
771 * Example:
772 * @code
773 * extern Evas_List *list;
774 *
775 * printf("The list has %i members\n", evas_list_count(list));
776 * @endcode
777 * @ingroup Evas_List_General_Group
778 */
779EAPI int
780evas_list_count(const Evas_List *list)
781{
782 if (!list)
783 return 0;
784
785 return list->accounting->count;
786}
787
788/**
789 * Get the nth member's data pointer in a list
790 * @param list The list to get member number @p n from
791 * @param n The number of the element (0 being the first)
792 * @return The data pointer stored in the specified element
793 *
794 * This function returns the data pointer of element number @p n, in the list
795 * @p list. The first element in the array is element number 0. If the element
796 * number @p n does not exist, NULL will be returned.
797 *
798 * Example:
799 * @code
800 * extern Evas_List *list;
801 * extern int number;
802 * void *data;
803 *
804 * data = evas_list_nth(list, number);
805 * if (data)
806 * printf("Element number %i has data %p\n", number, data);
807 * @endcode
808 * @ingroup Evas_List_Find_Group
809 */
810EAPI void *
811evas_list_nth(const Evas_List *list, int n)
812{
813 Evas_List *l;
814
815 l = evas_list_nth_list(list, n);
816 return l ? l->data : NULL;
817}
818
819/**
820 * Get the nth member's list node in a list
821 * @param list The list to get member number @p n from
822 * @param n The number of the element (0 being the first)
823 * @return The list node stored in the numbered element
824 *
825 * This function returns the list node of element number @p n, in the list
826 * @p list. The first element in the array is element number 0. If the element
827 * number @p n does not exist, NULL will be returned.
828 *
829 * Example:
830 * @code
831 * extern Evas_List *list;
832 * extern int number;
833 * Evas_List *nth_list;
834 *
835 * nth_list = evas_list_nth_list(list, number);
836 * if (nth_list)
837 * printf("Element number %i has data %p\n", number, nth_list->data);
838 * @endcode
839 * @ingroup Evas_List_Find_Group
840 */
841EAPI Evas_List *
842evas_list_nth_list(const Evas_List *list, int n)
843{
844 int i;
845 const Evas_List *l;
846
847 /* check for non-existing nodes */
848 if ((!list) || (n < 0) ||
849 (n > (list->accounting->count - 1)))
850 return NULL;
851
852 /* if the node is in the 2nd half of the list, search from the end
853 * else, search from the beginning.
854 */
855 if (n > (list->accounting->count / 2))
856 for (i = list->accounting->count - 1,
857 l = list->accounting->last;
858 l;
859 l = l->prev, i--)
860 {
861 if (i == n)
862 return (Evas_List *)l;
863 }
864 else
865 for (i = 0, l = list; l; l = l->next, i++)
866 {
867 if (i == n)
868 return (Evas_List *)l;
869 }
870
871 return NULL;
872}
873
874/**
875 * @defgroup Evas_List_Ordering_Group Linked List Ordering Functions
876 *
877 * Functions that change the ordering of data in a linked list.
878 */
879
880/**
881 * Reverse all the elements in the list
882 * @param list The list to reverse
883 * @return The list after it has been reversed
884 *
885 * This takes a list @p list, and reverses the order of all elements in the
886 * list, so the last member is now first, and so on.
887 *
888 * Example:
889 * @code
890 * extern Evas_List *list;
891 *
892 * list = evas_list_reverse(list);
893 * @endcode
894 * @ingroup Evas_List_Ordering_Group
895 */
896EAPI Evas_List *
897evas_list_reverse(Evas_List *list)
898{
899 Evas_List *l1, *l2;
900
901 if (!list)
902 return NULL;
903
904 l1 = list;
905 l2 = list->accounting->last;
906 while (l1 != l2)
907 {
908 void *data;
909
910 data = l1->data;
911 l1->data = l2->data;
912 l2->data = data;
913 l1 = l1->next;
914 if (l1 == l2)
915 break;
916
917 l2 = l2->prev;
918 }
919
920 return list;
921}
922
923/**
924 * Sort a list according to the ordering func will return
925 * @param list The list handle to sort
926 * @param size The length of the list to sort
927 * @param func A function pointer that can handle comparing the list data
928 * nodes
929 * @return A new sorted list
930 *
931 * This function sorts your list. The data in your nodes can be arbitrary,
932 * you just have to be smart enough to know what kind of data is in your
933 * lists
934 *
935 * Example:
936 * @code
937 * int
938 * sort_cb(void *d1, void *d2)
939 * {
940 * const char *txt = NULL;
941 * const char *txt2 = NULL;
942 *
943 * if(!d1) return(1);
944 * if(!d2) return(-1);
945 *
946 * return(strcmp((const char*)d1, (const char*)d2));
947 * }
948 * extern Evas_List *list;
949 *
950 * list = evas_list_sort(list, evas_list_count(list), sort_cb);
951 * if (evas_list_alloc_error())
952 * {
953 * fprintf(stderr, "ERROR: Memory is low. List Sorting failed.\n");
954 * exit(-1);
955 * }
956 * @endcode
957 * @ingroup Evas_List_Ordering_Group
958 */
959EAPI Evas_List *
960evas_list_sort(Evas_List *list, int size, int (*func)(void *, void *))
961{
962 Evas_List *last;
963 unsigned int list_number;
964 unsigned int middle;
965 int list_size;
966
967 if (!list || !func)
968 return NULL;
969
970 /* if the caller specified an invalid size, sort the whole list */
971 if ((size <= 0) ||
972 (size > list->accounting->count))
973 size = list->accounting->count;
974
975 last = list->accounting->last;
976 middle = size - size / 2;
977
978 for (list_number = middle, list_size = 1;
979 list_size < middle * 2;
980 list_number >>= 1, list_size <<= 1)
981 {
982 Evas_List *head1 = list;
983 unsigned int limit = size;
984 unsigned int process_list;
985 unsigned int pass_number;
986 unsigned int split_size = list_size;
987
988 for (process_list = 0; process_list < list_number + 1; ++process_list)
989 {
990 Evas_List *head2;
991 unsigned int size_sum;
992 int size1, size2;
993 int i;
994
995 size1 = limit < split_size ? limit : split_size;
996 limit -= size1;
997
998 size2 = limit < split_size ? limit : split_size;
999 limit -= size2;
1000
1001 size_sum = size1 + size2;
1002
1003 for (head2 = head1, i = 0; i < size1; ++i)
1004 head2 = evas_list_next (head2);
1005
1006 for (pass_number = 0; pass_number < size_sum; ++pass_number)
1007 {
1008 Evas_List *next;
1009 Evas_List *prev1;
1010 Evas_List *prev2;
1011
1012 if (size1 == 0 || !head1) /* List1 is empty, head1 is already at the end of the list. So only need to update head2 */
1013 {
1014 for (; pass_number < size_sum; ++pass_number)
1015 head2 = evas_list_next (head2);
1016 break;
1017 }
1018 else
1019 if (size2 == 0 || !head2) /* List2 is empty, just leave */
1020 break;
1021 else
1022 if (func (head1->data, head2->data) < 0)
1023 {
1024 head1 = evas_list_next (head1);
1025 --size1;
1026 }
1027 else
1028 {
1029 next = evas_list_next (head2);
1030 prev1 = evas_list_prev (head1);
1031 prev2 = evas_list_prev (head2);
1032
1033 if (next)
1034 next->prev = prev2;
1035
1036 if (prev1)
1037 prev1->next = head2;
1038
1039 if (prev2)
1040 prev2->next = next;
1041
1042 head2->prev = prev1;
1043 head2->next = head1;
1044 head1->prev = head2;
1045
1046 --size2;
1047
1048 if (head1 == list)
1049 list = head2;
1050
1051 if (head2 == last)
1052 last = prev2;
1053
1054 head2 = next;
1055 }
1056 }
1057 head1 = head2;
1058 }
1059 }
1060
1061 list->accounting->last = last;
1062 return list;
1063}
1064/**
1065 * Return the memory allocation failure flag after any operation needin allocation
1066 * @return The state of the allocation flag
1067 *
1068 * This function returns the state of the memory allocation flag. This flag is
1069 * set if memory allocations during evas_list_append(), evas_list_prepend(),
1070 * evas_list_append_relative(), or evas_list_prepend_relative() fail. If they
1071 * do fail, 1 will be returned, otherwise 0 will be returned. The flag will
1072 * remain in its current state until the next call that requires allocation
1073 * is called, and is then reset.
1074 *
1075 * Example:
1076 * @code
1077 * Evas_List *list = NULL;
1078 * extern void *my_data;
1079 *
1080 * list = evas_list_append(list, my_data);
1081 * if (evas_list_alloc_error())
1082 * {
1083 * fprintf(stderr, "ERROR: Memory is low. List allocation failed.\n");
1084 * exit(-1);
1085 * }
1086 * @endcode
1087 * @ingroup Evas_List_General_Group
1088 */
1089EAPI int
1090evas_list_alloc_error(void)
1091{
1092 return _evas_list_alloc_error;
1093}
diff --git a/libraries/eina/src/tests/evas_mempool.c b/libraries/eina/src/tests/evas_mempool.c
new file mode 100644
index 0000000..fbc48fa
--- /dev/null
+++ b/libraries/eina/src/tests/evas_mempool.c
@@ -0,0 +1,200 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdlib.h>
6#include <string.h>
7
8#include "Evas_Data.h"
9#include "evas_mempool.h"
10
11//#define NOPOOL
12
13typedef struct _Pool Pool;
14
15struct _Pool
16{
17 int usage;
18 void *base;
19 Pool *prev, *next;
20};
21
22
23Pool *
24_evas_mp_pool_new(Evas_Mempool *pool)
25{
26#ifdef NOPOOL
27 static Pool thepool;
28 return &thepool;
29#else
30 Pool *p;
31 void **ptr;
32 int item_alloc, i;
33
34 item_alloc =
35 ((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *);
36 p = malloc(sizeof(Pool) + (pool->pool_size * item_alloc));
37 ptr = (void **)(((unsigned char *)p) + sizeof(Pool));
38 p->usage = 0;
39 p->base = ptr;
40 for (i = 0; i < pool->pool_size - 1; i++)
41 {
42 *ptr = (void **)(((unsigned char *)ptr) + item_alloc);
43 ptr = *ptr;
44 }
45 *ptr = NULL;
46 return p;
47#endif
48}
49
50void
51_evas_mp_pool_free(Pool *p)
52{
53#if !defined(NOPOOL)
54 free(p);
55#endif
56}
57
58void *
59evas_mempool_malloc(Evas_Mempool *pool, int size)
60{
61#ifdef NOPOOL
62 return malloc(size);
63#else
64 Pool *p;
65 void *mem;
66
67 for (p = pool->first; p; p = p->next) // look 4 pool from 2nd bucket on
68 {
69 if (p->base) // base is not NULL - has a free slot
70 {
71 if (p->prev)
72 {
73 if (pool->last == p)
74 pool->last = p->prev;
75
76 p->prev->next = p->next;
77 p->prev = NULL;
78 p->next = pool->first;
79 p->next->prev = p;
80 pool->first = p;
81 }
82
83 break;
84 }
85 }
86 if (!p) // we have reached the end of the list - no free pools
87 {
88 p = _evas_mp_pool_new(pool);
89 if (!p)
90 return NULL;
91
92 p->prev = NULL;
93 p->next = pool->first;
94 if (p->next)
95 p->next->prev = p;
96
97 if (!pool->last)
98 pool->last = p;
99
100 pool->first = p;
101 }
102
103 mem = p->base; // this points to the next free block - so take it
104 p->base = *((void **)mem); // base now points to the next free block
105 if (!p->base) // move to end - it just filled up
106 if (p->next)
107 {
108 if (p->prev)
109 p->prev->next = p->next;
110 else
111 pool->first = p->next;
112
113 p->next->prev = p->prev;
114 ((Pool *)pool->last)->next = p;
115 p->prev = pool->last;
116 p->next = NULL;
117 pool->last = p;
118 }
119
120 p->usage++;
121 pool->usage++;
122 return mem;
123#endif
124}
125
126void
127evas_mempool_free(Evas_Mempool *pool, void *ptr)
128{
129#ifdef NOPOOL
130 free(ptr);
131#else
132 Pool *p;
133 void *pmem;
134 int item_alloc, psize;
135
136 item_alloc =
137 ((pool->item_size + sizeof(void *) - 1) / sizeof(void *)) * sizeof(void *);
138 psize = item_alloc * pool->pool_size;
139 for (p = (Pool *)(pool->first); p; p = p->next) // look 4 pool
140 {
141 pmem = (void *)(((unsigned char *)p) + sizeof(Pool)); // pool mem base
142 if ((ptr >= pmem) &&
143 ((unsigned char *)ptr < (((unsigned char *)pmem) + psize))) // is it in pool mem?
144 {
145 *((void **)ptr) = p->base; // freed node points to prev free node
146 p->base = ptr; // next free node is now the one we freed
147 p->usage--;
148 pool->usage--;
149 if (p->usage == 0) // free bucket
150 {
151 if (p->prev)
152 p->prev->next = p->next;
153
154 if (p->next)
155 p->next->prev = p->prev;
156
157 if (pool->last == p)
158 pool->last = p->prev;
159
160 if (pool->first == p)
161 pool->first = p->next;
162
163 _evas_mp_pool_free(p);
164 }
165 else if (p->prev) // if not the first - move to front
166 {
167 p->prev->next = p->next;
168 if (p->next)
169 p->next->prev = p->prev;
170
171 if (pool->last == p)
172 pool->last = p->prev;
173
174 p->prev = NULL;
175 p->next = pool->first;
176 p->next->prev = p;
177 pool->first = p;
178 }
179
180 break;
181 }
182 }
183#endif
184}
185
186
187void *
188evas_mempool_calloc(Evas_Mempool *pool, int size)
189{
190#ifdef NOPOOL
191 return calloc(1, size);
192#else
193 void *mem;
194
195 mem = evas_mempool_malloc(pool, size);
196 memset(mem, 0, size);
197 return mem;
198#endif
199}
200
diff --git a/libraries/eina/src/tests/evas_mempool.h b/libraries/eina/src/tests/evas_mempool.h
new file mode 100644
index 0000000..983c434
--- /dev/null
+++ b/libraries/eina/src/tests/evas_mempool.h
@@ -0,0 +1,21 @@
1#ifndef _EVAS_MEMPOOL_H
2#define _EVAS_MEMPOOL_H
3
4
5typedef struct _Evas_Mempool Evas_Mempool;
6
7struct _Evas_Mempool
8{
9 int item_size;
10 int pool_size;
11 int usage;
12 void *first, *last;
13};
14
15
16void *evas_mempool_malloc(Evas_Mempool *pool, int size);
17void evas_mempool_free(Evas_Mempool *pool, void *ptr);
18void *evas_mempool_calloc(Evas_Mempool *pool, int size);
19
20
21#endif /* _EVAS_MEMPOOL_H */
diff --git a/libraries/eina/src/tests/evas_object_list.c b/libraries/eina/src/tests/evas_object_list.c
new file mode 100644
index 0000000..8ba4267
--- /dev/null
+++ b/libraries/eina/src/tests/evas_object_list.c
@@ -0,0 +1,183 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdlib.h>
6
7#include "Evas_Data.h"
8
9/* list ops */
10void *
11evas_object_list_append(void *in_list, void *in_item)
12{
13 Evas_Object_List *l, *new_l;
14 Evas_Object_List *list;
15
16 list = in_list;
17 new_l = in_item;
18 new_l->next = NULL;
19 if (!list)
20 {
21 new_l->prev = NULL;
22 new_l->last = new_l;
23 return new_l;
24 }
25
26 if (list->last)
27 l = list->last;
28 else
29 for (l = list; (l) && (l->next); l = l->next) ;
30
31 l->next = new_l;
32 new_l->prev = l;
33 list->last = new_l;
34 return list;
35}
36
37void *
38evas_object_list_prepend(void *in_list, void *in_item)
39{
40 Evas_Object_List *new_l;
41 Evas_Object_List *list;
42
43 list = in_list;
44 new_l = in_item;
45 new_l->prev = NULL;
46 if (!list)
47 {
48 new_l->next = NULL;
49 new_l->last = new_l;
50 return new_l;
51 }
52
53 new_l->next = list;
54 list->prev = new_l;
55 new_l->last = list->last;
56 list->last = NULL;
57 return new_l;
58}
59
60void *
61evas_object_list_append_relative(void *in_list,
62 void *in_item,
63 void *in_relative)
64{
65 Evas_Object_List *list, *relative, *new_l;
66
67 list = in_list;
68 new_l = in_item;
69 relative = in_relative;
70 if (relative)
71 {
72 if (relative->next)
73 {
74 new_l->next = relative->next;
75 relative->next->prev = new_l;
76 }
77 else
78 new_l->next = NULL;
79
80 relative->next = new_l;
81 new_l->prev = relative;
82 if (!new_l->next)
83 list->last = new_l;
84
85 return list;
86 }
87
88 return evas_object_list_append(list, new_l);
89}
90
91void *
92evas_object_list_prepend_relative(void *in_list,
93 void *in_item,
94 void *in_relative)
95{
96 Evas_Object_List *list, *relative, *new_l;
97
98 list = in_list;
99 new_l = in_item;
100 relative = in_relative;
101 if (relative)
102 {
103 new_l->prev = relative->prev;
104 new_l->next = relative;
105 relative->prev = new_l;
106 if (new_l->prev)
107 {
108 new_l->prev->next = new_l;
109 if (!new_l->next)
110 list->last = new_l;
111
112 return list;
113 }
114 else
115 {
116 if (!new_l->next)
117 new_l->last = new_l;
118 else
119 {
120 new_l->last = list->last;
121 list->last = NULL;
122 }
123
124 return new_l;
125 }
126 }
127
128 return evas_object_list_prepend(list, new_l);
129}
130
131void *
132evas_object_list_remove(void *in_list, void *in_item)
133{
134 Evas_Object_List *return_l;
135 Evas_Object_List *list, *item;
136
137 /* checkme */
138 if(!in_list)
139 return in_list;
140
141 list = in_list;
142 item = in_item;
143 if (!item)
144 return list;
145
146 if (item->next)
147 item->next->prev = item->prev;
148
149 if (item->prev)
150 {
151 item->prev->next = item->next;
152 return_l = list;
153 }
154 else
155 {
156 return_l = item->next;
157 if (return_l)
158 return_l->last = list->last;
159 }
160
161 if (item == list->last)
162 list->last = item->prev;
163
164 item->next = NULL;
165 item->prev = NULL;
166 return return_l;
167}
168
169void *
170evas_object_list_find(void *in_list, void *in_item)
171{
172 Evas_Object_List *l;
173 Evas_Object_List *list, *item;
174
175 list = in_list;
176 item = in_item;
177 for (l = list; l; l = l->next)
178 {
179 if (l == item)
180 return item;
181 }
182 return NULL;
183}
diff --git a/libraries/eina/src/tests/evas_stringshare.c b/libraries/eina/src/tests/evas_stringshare.c
new file mode 100644
index 0000000..6e8797c
--- /dev/null
+++ b/libraries/eina/src/tests/evas_stringshare.c
@@ -0,0 +1,275 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h"
3#endif
4
5#include <stdlib.h>
6#include <stdio.h>
7#include <string.h>
8
9
10#include "Evas_Data.h"
11
12typedef struct _Evas_Stringshare Evas_Stringshare;
13typedef struct _Evas_Stringshare_El Evas_Stringshare_El;
14
15struct _Evas_Stringshare
16{
17 Evas_Stringshare_El *buckets[1024];
18};
19
20struct _Evas_Stringshare_El
21{
22 Evas_Stringshare_El *next;
23// int op;
24 int references;
25};
26
27static Evas_Stringshare share =
28{
29 {
30 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
31 NULL, NULL, NULL, NULL,
32 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
33 NULL, NULL, NULL, NULL,
34 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
35 NULL, NULL, NULL, NULL,
36 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
37 NULL, NULL, NULL, NULL,
38 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
39 NULL, NULL, NULL, NULL,
40 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
41 NULL, NULL, NULL, NULL,
42 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
43 NULL, NULL, NULL, NULL,
44 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
45 NULL, NULL, NULL, NULL,
46 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
47 NULL, NULL, NULL, NULL,
48 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
49 NULL, NULL, NULL, NULL,
50 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
51 NULL, NULL, NULL, NULL,
52 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
53 NULL, NULL, NULL, NULL,
54 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
55 NULL, NULL, NULL, NULL,
56 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
57 NULL, NULL, NULL, NULL,
58 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
59 NULL, NULL, NULL, NULL,
60 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
61 NULL, NULL, NULL, NULL,
62
63 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
64 NULL, NULL, NULL, NULL,
65 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
66 NULL, NULL, NULL, NULL,
67 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
68 NULL, NULL, NULL, NULL,
69 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
70 NULL, NULL, NULL, NULL,
71 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
72 NULL, NULL, NULL, NULL,
73 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
74 NULL, NULL, NULL, NULL,
75 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
76 NULL, NULL, NULL, NULL,
77 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
78 NULL, NULL, NULL, NULL,
79 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
80 NULL, NULL, NULL, NULL,
81 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
82 NULL, NULL, NULL, NULL,
83 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
84 NULL, NULL, NULL, NULL,
85 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
86 NULL, NULL, NULL, NULL,
87 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
88 NULL, NULL, NULL, NULL,
89 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
90 NULL, NULL, NULL, NULL,
91 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
92 NULL, NULL, NULL, NULL,
93 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
94 NULL, NULL, NULL, NULL,
95
96 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
97 NULL, NULL, NULL, NULL,
98 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
99 NULL, NULL, NULL, NULL,
100 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
101 NULL, NULL, NULL, NULL,
102 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
103 NULL, NULL, NULL, NULL,
104 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
105 NULL, NULL, NULL, NULL,
106 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
107 NULL, NULL, NULL, NULL,
108 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
109 NULL, NULL, NULL, NULL,
110 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
111 NULL, NULL, NULL, NULL,
112 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
113 NULL, NULL, NULL, NULL,
114 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
115 NULL, NULL, NULL, NULL,
116 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
117 NULL, NULL, NULL, NULL,
118 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
119 NULL, NULL, NULL, NULL,
120 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
121 NULL, NULL, NULL, NULL,
122 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
123 NULL, NULL, NULL, NULL,
124 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
125 NULL, NULL, NULL, NULL,
126 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
127 NULL, NULL, NULL, NULL,
128
129 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
130 NULL, NULL, NULL, NULL,
131 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
132 NULL, NULL, NULL, NULL,
133 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
134 NULL, NULL, NULL, NULL,
135 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
136 NULL, NULL, NULL, NULL,
137 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
138 NULL, NULL, NULL, NULL,
139 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
140 NULL, NULL, NULL, NULL,
141 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
142 NULL, NULL, NULL, NULL,
143 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
144 NULL, NULL, NULL, NULL,
145 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
146 NULL, NULL, NULL, NULL,
147 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
148 NULL, NULL, NULL, NULL,
149 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
150 NULL, NULL, NULL, NULL,
151 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
152 NULL, NULL, NULL, NULL,
153 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
154 NULL, NULL, NULL, NULL,
155 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
156 NULL, NULL, NULL, NULL,
157 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
158 NULL, NULL, NULL, NULL,
159 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
160 NULL, NULL, NULL, NULL
161 }
162};
163
164//static int op = 0;
165//static FILE *f = NULL;
166
167static inline int
168_evas_stringshare_hash_gen(const char *str, int *len)
169{
170 unsigned int hash_num = 5381;
171 const unsigned char *ptr;
172
173 for (ptr = (const unsigned char *)str; *ptr; ptr++)
174 {
175 hash_num = (hash_num * 33) ^ *ptr;
176 }
177
178 hash_num &= 0x3ff;
179 *len = ptr - (const unsigned char *)str;
180 return (int)hash_num;
181}
182
183EAPI const char *
184evas_stringshare_add(const char *str)
185{
186 int hash_num, slen;
187 char *el_str;
188 Evas_Stringshare_El *el, *pel = NULL;
189
190 if (!str)
191 {
192 return NULL; // if (!f)
193
194 }
195
196// {
197// char bf[256];
198// snprintf(bf, sizeof(bf), "strlog-%i", getpid());
199// f = fopen(bf, "w");
200// }
201 hash_num = _evas_stringshare_hash_gen(str, &slen);
202 for (el = share.buckets[hash_num]; el; pel = el, el = el->next)
203 {
204 el_str = ((char *)el) + sizeof(Evas_Stringshare_El);
205 if (!strcmp(el_str, str))
206 {
207 if (pel)
208 {
209 pel->next = el->next;
210 el->next = share.buckets[hash_num];
211 share.buckets[hash_num] = el;
212 }
213
214 el->references++;
215// fprintf(f, "strings[%i] = str->add(strings[%i]);\n", el->op, el->op);
216// fflush(f);
217 return el_str;
218 }
219 }
220 if (!(el = malloc(sizeof(Evas_Stringshare_El) + slen + 1)))
221 return NULL;
222
223 el_str = ((char *)el) + sizeof(Evas_Stringshare_El);
224 strcpy(el_str, str);
225 el->references = 1;
226 el->next = share.buckets[hash_num];
227 share.buckets[hash_num] = el;
228// el->op = op;
229// fprintf(f, "strings[%i] = str->add(\"%s\");\n", el->op, el_str);
230// fflush(f);
231// op++;
232 return el_str;
233}
234
235EAPI void
236evas_stringshare_del(const char *str)
237{
238 int hash_num, slen;
239 char *el_str;
240 Evas_Stringshare_El *el, *pel = NULL;
241
242 if (!str)
243 return;
244
245 hash_num = _evas_stringshare_hash_gen(str, &slen);
246 for (el = share.buckets[hash_num]; el; pel = el, el = el->next)
247 {
248 el_str = ((char *)el) + sizeof(Evas_Stringshare_El);
249 if (el_str == str)
250 {
251 el->references--;
252// fprintf(f, "str->del(strings[%i]);\n", el->op);
253// fflush(f);
254 if (el->references == 0)
255 {
256 if (pel)
257 pel->next = el->next;
258 else
259 share.buckets[hash_num] = el->next;
260
261 free(el);
262 }
263 else if (pel)
264 {
265 pel->next = el->next;
266 el->next = share.buckets[hash_num];
267 share.buckets[hash_num] = el;
268 }
269
270 return;
271 }
272 }
273 printf("EEEK trying to del non-shared stringshare \"%s\"\n", str);
274 abort();
275}
diff --git a/libraries/eina/src/tests/strlog b/libraries/eina/src/tests/strlog
new file mode 100644
index 0000000..d9fc2af
--- /dev/null
+++ b/libraries/eina/src/tests/strlog
@@ -0,0 +1,46999 @@
1strings[0] = str->add("extensions");
2strings[1] = str->add("Extensions");
3strings[2] = str->add("enlightenment/extensions");
4strings[3] = str->add("modules");
5strings[4] = str->add("Modules");
6strings[5] = str->add("enlightenment/modules");
7strings[6] = str->add("default.edj");
8strings[7] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj");
9strings[8] = str->add("Desktop %i, %i");
10strings[9] = str->add("en_US.UTF-8");
11strings[10] = str->add("note");
12strings[11] = str->add("conf_interaction");
13strings[12] = str->add("fileman");
14strings[13] = str->add("conf_engine");
15strings[14] = str->add("conf_winlist");
16strings[15] = str->add("conf_window_manipulation");
17strings[16] = str->add("conf_window_focus");
18strings[17] = str->add("conf_window_display");
19strings[18] = str->add("conf_wallpaper");
20strings[19] = str->add("conf_transitions");
21strings[20] = str->add("conf_theme");
22strings[21] = str->add("conf_startup");
23strings[22] = str->add("conf_shelves");
24strings[23] = str->add("conf_screensaver");
25strings[24] = str->add("conf_profiles");
26strings[25] = str->add("conf_performance");
27strings[26] = str->add("conf_paths");
28strings[27] = str->add("conf_mouse_cursor");
29strings[28] = str->add("conf_mousebindings");
30strings[29] = str->add("conf_mouse");
31strings[30] = str->add("conf_mime");
32strings[31] = str->add("conf_menus");
33strings[32] = str->add("conf_keybindings");
34strings[33] = str->add("conf_intl");
35strings[34] = str->add("conf_imc");
36strings[35] = str->add("conf_icon_theme");
37strings[36] = str->add("conf_fonts");
38strings[37] = str->add("conf_exebuf");
39strings[38] = str->add("conf_dpms");
40strings[39] = str->add("conf_display");
41strings[40] = str->add("conf_dialogs");
42strings[41] = str->add("conf_desks");
43strings[42] = str->add("conf_desklock");
44strings[43] = str->add("conf_desk");
45strings[44] = str->add("conf_colors");
46strings[45] = str->add("conf_clientlist");
47strings[46] = str->add("conf_borders");
48strings[47] = str->add("conf_applications");
49strings[48] = str->add("conf");
50strings[49] = str->add("winlist");
51strings[50] = str->add("exebuf");
52strings[51] = str->add("pager");
53strings[52] = str->add("temperature");
54strings[53] = str->add("cpufreq");
55strings[54] = str->add("battery");
56strings[55] = str->add("clock");
57strings[56] = str->add("dropshadow");
58strings[57] = str->add("ibox");
59strings[58] = str->add("ibar");
60strings[59] = str->add("start");
61strings[60] = str->add("gadman");
62strings[61] = str->add("default");
63strings[62] = str->add("Vera");
64strings[63] = str->add("theme");
65strings[64] = str->add("/home/cedric/.e/e/themes/b_and_w.edj");
66strings[65] = str->add("menu_show");
67strings[66] = str->add("main");
68strings[67] = str->add("window_move");
69strings[65] = str->add(strings[65]);
70strings[68] = str->add("clients");
71strings[69] = str->add("window_resize");
72strings[65] = str->add(strings[65]);
73strings[70] = str->add("favorites");
74strings[71] = str->add("window_menu");
75strings[72] = str->add("Left");
76strings[73] = str->add("desk_flip_by");
77strings[74] = str->add("-1 0");
78strings[75] = str->add("Right");
79strings[73] = str->add(strings[73]);
80strings[76] = str->add("1 0");
81strings[77] = str->add("Up");
82strings[73] = str->add(strings[73]);
83strings[78] = str->add("0 -1");
84strings[79] = str->add("Down");
85strings[73] = str->add(strings[73]);
86strings[80] = str->add("0 1");
87strings[77] = str->add(strings[77]);
88strings[81] = str->add("window_raise");
89strings[79] = str->add(strings[79]);
90strings[82] = str->add("window_lower");
91strings[83] = str->add("x");
92strings[84] = str->add("window_close");
93strings[85] = str->add("k");
94strings[86] = str->add("window_kill");
95strings[87] = str->add("w");
96strings[71] = str->add(strings[71]);
97strings[88] = str->add("s");
98strings[89] = str->add("window_sticky_toggle");
99strings[90] = str->add("i");
100strings[91] = str->add("window_iconic_toggle");
101strings[92] = str->add("f");
102strings[93] = str->add("window_maximized_toggle");
103strings[94] = str->add("F10");
104strings[93] = str->add(strings[93]);
105strings[95] = str->add("default vertical");
106strings[94] = str->add(strings[94]);
107strings[93] = str->add(strings[93]);
108strings[96] = str->add("default horizontal");
109strings[97] = str->add("r");
110strings[98] = str->add("window_shaded_toggle");
111strings[72] = str->add(strings[72]);
112strings[99] = str->add("desk_linear_flip_by");
113strings[100] = str->add("-1");
114strings[75] = str->add(strings[75]);
115strings[99] = str->add(strings[99]);
116strings[101] = str->add("1");
117strings[102] = str->add("F1");
118strings[103] = str->add("desk_linear_flip_to");
119strings[104] = str->add("0");
120strings[105] = str->add("F2");
121strings[103] = str->add(strings[103]);
122strings[101] = str->add(strings[101]);
123strings[106] = str->add("F3");
124strings[103] = str->add(strings[103]);
125strings[107] = str->add("2");
126strings[108] = str->add("F4");
127strings[103] = str->add(strings[103]);
128strings[109] = str->add("3");
129strings[110] = str->add("F5");
130strings[103] = str->add(strings[103]);
131strings[111] = str->add("4");
132strings[112] = str->add("F6");
133strings[103] = str->add(strings[103]);
134strings[113] = str->add("5");
135strings[114] = str->add("F7");
136strings[103] = str->add(strings[103]);
137strings[115] = str->add("6");
138strings[116] = str->add("F8");
139strings[103] = str->add(strings[103]);
140strings[117] = str->add("7");
141strings[118] = str->add("F9");
142strings[103] = str->add(strings[103]);
143strings[119] = str->add("8");
144strings[94] = str->add(strings[94]);
145strings[103] = str->add(strings[103]);
146strings[120] = str->add("9");
147strings[121] = str->add("F11");
148strings[103] = str->add(strings[103]);
149strings[122] = str->add("10");
150strings[123] = str->add("F12");
151strings[103] = str->add(strings[103]);
152strings[124] = str->add("11");
153strings[125] = str->add("m");
154strings[65] = str->add(strings[65]);
155strings[66] = str->add(strings[66]);
156strings[126] = str->add("a");
157strings[65] = str->add(strings[65]);
158strings[70] = str->add(strings[70]);
159strings[127] = str->add("Menu");
160strings[65] = str->add(strings[65]);
161strings[66] = str->add(strings[66]);
162strings[127] = str->add(strings[127]);
163strings[65] = str->add(strings[65]);
164strings[68] = str->add(strings[68]);
165strings[127] = str->add(strings[127]);
166strings[65] = str->add(strings[65]);
167strings[70] = str->add(strings[70]);
168strings[128] = str->add("Insert");
169strings[129] = str->add("exec");
170strings[130] = str->add("Eterm");
171strings[131] = str->add("Tab");
172strings[49] = str->add(strings[49]);
173strings[132] = str->add("next");
174strings[131] = str->add(strings[131]);
175strings[49] = str->add(strings[49]);
176strings[133] = str->add("prev");
177strings[134] = str->add("End");
178strings[135] = str->add("restart");
179strings[136] = str->add("Delete");
180strings[137] = str->add("logout");
181strings[138] = str->add("Escape");
182strings[50] = str->add(strings[50]);
183strings[139] = str->add("l");
184strings[140] = str->add("desk_lock");
185strings[141] = str->add("d");
186strings[142] = str->add("desk_deskshow_toggle");
187strings[72] = str->add(strings[72]);
188strings[143] = str->add("screen_send_by");
189strings[100] = str->add(strings[100]);
190strings[75] = str->add(strings[75]);
191strings[143] = str->add(strings[143]);
192strings[101] = str->add(strings[101]);
193strings[102] = str->add(strings[102]);
194strings[144] = str->add("screen_send_to");
195strings[104] = str->add(strings[104]);
196strings[105] = str->add(strings[105]);
197strings[144] = str->add(strings[144]);
198strings[101] = str->add(strings[101]);
199strings[106] = str->add(strings[106]);
200strings[144] = str->add(strings[144]);
201strings[107] = str->add(strings[107]);
202strings[108] = str->add(strings[108]);
203strings[144] = str->add(strings[144]);
204strings[109] = str->add(strings[109]);
205strings[145] = str->add("mouse,down,1,double");
206strings[146] = str->add("e.event.titlebar");
207strings[98] = str->add(strings[98]);
208strings[147] = str->add("up");
209strings[148] = str->add("mouse,down,2");
210strings[146] = str->add(strings[146]);
211strings[98] = str->add(strings[98]);
212strings[147] = str->add(strings[147]);
213strings[149] = str->add("mouse,wheel,?,1");
214strings[146] = str->add(strings[146]);
215strings[150] = str->add("window_shaded");
216strings[151] = str->add("0 up");
217strings[152] = str->add("mouse,wheel,?,-1");
218strings[146] = str->add(strings[146]);
219strings[150] = str->add(strings[150]);
220strings[153] = str->add("1 up");
221strings[154] = str->add("mouse,clicked,3");
222strings[146] = str->add(strings[146]);
223strings[71] = str->add(strings[71]);
224strings[155] = str->add("mouse,clicked,?");
225strings[156] = str->add("e.event.icon");
226strings[71] = str->add(strings[71]);
227strings[157] = str->add("mouse,clicked,[12]");
228strings[158] = str->add("e.event.close");
229strings[84] = str->add(strings[84]);
230strings[154] = str->add(strings[154]);
231strings[158] = str->add(strings[158]);
232strings[86] = str->add(strings[86]);
233strings[159] = str->add("mouse,clicked,1");
234strings[160] = str->add("e.event.maximize");
235strings[93] = str->add(strings[93]);
236strings[161] = str->add("mouse,clicked,2");
237strings[160] = str->add(strings[160]);
238strings[93] = str->add(strings[93]);
239strings[162] = str->add("smart");
240strings[154] = str->add(strings[154]);
241strings[160] = str->add(strings[160]);
242strings[93] = str->add(strings[93]);
243strings[163] = str->add("expand");
244strings[155] = str->add(strings[155]);
245strings[164] = str->add("e.event.minimize");
246strings[91] = str->add(strings[91]);
247strings[155] = str->add(strings[155]);
248strings[165] = str->add("e.event.shade");
249strings[98] = str->add(strings[98]);
250strings[147] = str->add(strings[147]);
251strings[155] = str->add(strings[155]);
252strings[166] = str->add("e.event.lower");
253strings[82] = str->add(strings[82]);
254strings[167] = str->add("mouse,down,1");
255strings[156] = str->add(strings[156]);
256strings[168] = str->add("window_drag_icon");
257strings[167] = str->add(strings[167]);
258strings[146] = str->add(strings[146]);
259strings[67] = str->add(strings[67]);
260strings[169] = str->add("mouse,up,1");
261strings[146] = str->add(strings[146]);
262strings[67] = str->add(strings[67]);
263strings[170] = str->add("end");
264strings[167] = str->add(strings[167]);
265strings[171] = str->add("e.event.resize.tl");
266strings[69] = str->add(strings[69]);
267strings[172] = str->add("tl");
268strings[167] = str->add(strings[167]);
269strings[173] = str->add("e.event.resize.t");
270strings[69] = str->add(strings[69]);
271strings[174] = str->add("t");
272strings[167] = str->add(strings[167]);
273strings[175] = str->add("e.event.resize.tr");
274strings[69] = str->add(strings[69]);
275strings[176] = str->add("tr");
276strings[167] = str->add(strings[167]);
277strings[177] = str->add("e.event.resize.r");
278strings[69] = str->add(strings[69]);
279strings[97] = str->add(strings[97]);
280strings[167] = str->add(strings[167]);
281strings[178] = str->add("e.event.resize.br");
282strings[69] = str->add(strings[69]);
283strings[179] = str->add("br");
284strings[167] = str->add(strings[167]);
285strings[180] = str->add("e.event.resize.b");
286strings[69] = str->add(strings[69]);
287strings[181] = str->add("b");
288strings[167] = str->add(strings[167]);
289strings[182] = str->add("e.event.resize.bl");
290strings[69] = str->add(strings[69]);
291strings[183] = str->add("bl");
292strings[167] = str->add(strings[167]);
293strings[184] = str->add("e.event.resize.l");
294strings[69] = str->add(strings[69]);
295strings[139] = str->add(strings[139]);
296strings[169] = str->add(strings[169]);
297strings[185] = str->add("e.event.resize.*");
298strings[69] = str->add(strings[69]);
299strings[170] = str->add(strings[170]);
300strings[186] = str->add("mouse,down,3");
301strings[185] = str->add(strings[185]);
302strings[67] = str->add(strings[67]);
303strings[187] = str->add("mouse,up,3");
304strings[185] = str->add(strings[185]);
305strings[67] = str->add(strings[67]);
306strings[170] = str->add(strings[170]);
307strings[99] = str->add(strings[99]);
308strings[101] = str->add(strings[101]);
309strings[99] = str->add(strings[99]);
310strings[101] = str->add(strings[101]);
311strings[99] = str->add(strings[99]);
312strings[101] = str->add(strings[101]);
313strings[99] = str->add(strings[99]);
314strings[100] = str->add(strings[100]);
315strings[99] = str->add(strings[99]);
316strings[100] = str->add(strings[100]);
317strings[99] = str->add(strings[99]);
318strings[100] = str->add(strings[100]);
319strings[99] = str->add(strings[99]);
320strings[101] = str->add(strings[101]);
321strings[99] = str->add(strings[99]);
322strings[101] = str->add(strings[101]);
323strings[99] = str->add(strings[99]);
324strings[101] = str->add(strings[101]);
325strings[99] = str->add(strings[99]);
326strings[100] = str->add(strings[100]);
327strings[99] = str->add(strings[99]);
328strings[100] = str->add(strings[100]);
329strings[99] = str->add(strings[99]);
330strings[100] = str->add(strings[100]);
331strings[188] = str->add("vswipe");
332strings[189] = str->add("crossfade");
333strings[190] = str->add("E");
334strings[191] = str->add("_config_winlist_dialog...ADVANCED");
335strings[192] = str->add("Window List Settings");
336strings[193] = str->add("enlightenment -display :1.0");
337strings[190] = str->add(strings[190]);
338strings[194] = str->add("_config_focus_dialog...ADVANCED");
339strings[195] = str->add("Focus Settings");
340strings[193] = str->add(strings[193]);
341strings[190] = str->add(strings[190]);
342strings[196] = str->add("_config_window_manipulation_dialog...ADVANCED");
343strings[197] = str->add("Window Manipulation");
344strings[193] = str->add(strings[193]);
345strings[190] = str->add(strings[190]);
346strings[198] = str->add("_config_keybindings_dialog...BASIC");
347strings[199] = str->add("Key Binding Settings");
348strings[193] = str->add(strings[193]);
349strings[190] = str->add(strings[190]);
350strings[200] = str->add("_fwin:://home/cedric/Videos");
351strings[201] = str->add("Videos");
352strings[193] = str->add(strings[193]);
353strings[190] = str->add(strings[190]);
354strings[202] = str->add("_fwin:://home/cedric/Vidéos");
355strings[203] = str->add("Vidéos");
356strings[193] = str->add(strings[193]);
357strings[190] = str->add(strings[190]);
358strings[204] = str->add("_fwin:://home/cedric/wav");
359strings[205] = str->add("wav");
360strings[193] = str->add(strings[193]);
361strings[190] = str->add(strings[190]);
362strings[206] = str->add("_config_startup_dialog...BASIC");
363strings[207] = str->add("Startup Settings");
364strings[193] = str->add(strings[193]);
365strings[190] = str->add(strings[190]);
366strings[208] = str->add("_config_transitions_dialog...BASIC");
367strings[209] = str->add("Transition Settings");
368strings[193] = str->add(strings[193]);
369strings[190] = str->add(strings[190]);
370strings[210] = str->add("_config_cursor_dialog...ADVANCED");
371strings[211] = str->add("Cursor Settings");
372strings[193] = str->add(strings[193]);
373strings[190] = str->add(strings[190]);
374strings[212] = str->add("_config_fonts_dialog...ADVANCED");
375strings[213] = str->add("Font Settings");
376strings[193] = str->add(strings[193]);
377strings[190] = str->add(strings[190]);
378strings[214] = str->add("_config_color_classes_dialog...ADVANCED");
379strings[215] = str->add("Colors");
380strings[193] = str->add(strings[193]);
381strings[190] = str->add(strings[190]);
382strings[216] = str->add("_config_imc_dialog...ADVANCED");
383strings[217] = str->add("Input Method Configuration");
384strings[193] = str->add(strings[193]);
385strings[190] = str->add(strings[190]);
386strings[218] = str->add("_eap_exec_select_dialog");
387strings[219] = str->add("Select an Executable");
388strings[193] = str->add(strings[193]);
389strings[190] = str->add(strings[190]);
390strings[220] = str->add("_desktop_editor_dialog...ADVANCED");
391strings[221] = str->add("Desktop Entry Editor");
392strings[193] = str->add(strings[193]);
393strings[190] = str->add(strings[190]);
394strings[222] = str->add("_theme_web_dialog");
395strings[223] = str->add("[get-e.org] Download 2 images of 28");
396strings[193] = str->add(strings[193]);
397strings[190] = str->add(strings[190]);
398strings[224] = str->add("_config_desks_dialog...ADVANCED");
399strings[225] = str->add("Virtual Desktops Settings");
400strings[193] = str->add(strings[193]);
401strings[190] = str->add(strings[190]);
402strings[226] = str->add("_config_theme_dialog...ADVANCED");
403strings[227] = str->add("Theme Selector");
404strings[193] = str->add(strings[193]);
405strings[190] = str->add(strings[190]);
406strings[228] = str->add("_e_modules_gadman_config_dialog...BASIC");
407strings[229] = str->add("Gadgets Manager");
408strings[193] = str->add(strings[193]);
409strings[190] = str->add(strings[190]);
410strings[230] = str->add("_config_intl_dialog...ADVANCED");
411strings[231] = str->add("Language Configuration");
412strings[193] = str->add(strings[193]);
413strings[190] = str->add(strings[190]);
414strings[232] = str->add("_e_mod_pager_config_dialog...ADVANCED");
415strings[233] = str->add("Configuration du Pager");
416strings[193] = str->add(strings[193]);
417strings[190] = str->add(strings[190]);
418strings[234] = str->add("_shelf_config_dialog...ADVANCED");
419strings[235] = str->add("Shelf Configuration");
420strings[193] = str->add(strings[193]);
421strings[190] = str->add(strings[190]);
422strings[236] = str->add("_gadcon_config_dialog...BASIC");
423strings[237] = str->add("Shelf Contents");
424strings[193] = str->add(strings[193]);
425strings[190] = str->add(strings[190]);
426strings[238] = str->add("_e_mod_temperature_config_dialog...ADVANCED");
427strings[239] = str->add("Configuration de la Température");
428strings[193] = str->add(strings[193]);
429strings[190] = str->add(strings[190]);
430strings[240] = str->add("_e_mod_battery_config_dialog...ADVANCED");
431strings[241] = str->add("Configuration de la batterie");
432strings[193] = str->add(strings[193]);
433strings[190] = str->add(strings[190]);
434strings[242] = str->add("_config_paths_dialog...BASIC");
435strings[243] = str->add("Configuration de dossiers de recherche");
436strings[193] = str->add(strings[193]);
437strings[190] = str->add(strings[190]);
438strings[244] = str->add("_config_profiles_dialog...BASIC");
439strings[245] = str->add("Profile Selector");
440strings[193] = str->add(strings[193]);
441strings[190] = str->add(strings[190]);
442strings[246] = str->add("_config_engine_dialog...BASIC");
443strings[247] = str->add("Engine Settings");
444strings[193] = str->add(strings[193]);
445strings[190] = str->add(strings[190]);
446strings[248] = str->add("_config_exebuf_dialog...ADVANCED");
447strings[249] = str->add("Paramètres de l'exécution de commande");
448strings[193] = str->add(strings[193]);
449strings[190] = str->add(strings[190]);
450strings[250] = str->add("_config_performance_dialog...ADVANCED");
451strings[251] = str->add("Performance Settings");
452strings[193] = str->add(strings[193]);
453strings[190] = str->add(strings[190]);
454strings[252] = str->add("_config_config_interaction_dialog...BASIC");
455strings[253] = str->add("Interaction Settings");
456strings[193] = str->add(strings[193]);
457strings[190] = str->add(strings[190]);
458strings[254] = str->add("_dpms_capable_dialog");
459strings[255] = str->add("Affiché les informations sur la gestion d'énergie");
460strings[193] = str->add(strings[193]);
461strings[190] = str->add(strings[190]);
462strings[256] = str->add("_config_screensaver_dialog...BASIC");
463strings[257] = str->add("Paramètres du verrouillage d'écran");
464strings[193] = str->add(strings[193]);
465strings[190] = str->add(strings[190]);
466strings[258] = str->add("_config_desklock_dialog...BASIC");
467strings[259] = str->add("Paramètres de verrouillage d'écran");
468strings[193] = str->add(strings[193]);
469strings[190] = str->add(strings[190]);
470strings[260] = str->add("_config_display_dialog...BASIC");
471strings[261] = str->add("Paramètre de résolution de l'écran");
472strings[193] = str->add(strings[193]);
473strings[190] = str->add(strings[190]);
474strings[262] = str->add("_mousebind_getmouse_dialog");
475strings[263] = str->add("Séquence de raccourci-souris");
476strings[193] = str->add(strings[193]);
477strings[190] = str->add(strings[190]);
478strings[264] = str->add("_config_mousebindings_dialog...BASIC");
479strings[265] = str->add("Mouse Binding Settings");
480strings[193] = str->add(strings[193]);
481strings[190] = str->add(strings[190]);
482strings[266] = str->add("_config_border_style_dialog...BASIC");
483strings[267] = str->add("Default Border Style");
484strings[193] = str->add(strings[193]);
485strings[190] = str->add(strings[190]);
486strings[268] = str->add("_fwin:://home");
487strings[269] = str->add("home");
488strings[270] = str->add("/usr/devel/bin/enlightenment -display :1.0");
489strings[190] = str->add(strings[190]);
490strings[271] = str->add("_config_winlist_dialog...BASIC");
491strings[272] = str->add("Paramètres de la liste de fenêtres");
492strings[270] = str->add(strings[270]);
493strings[190] = str->add(strings[190]);
494strings[273] = str->add("_config_config_dialog_dialog...BASIC");
495strings[274] = str->add("Dialog Settings");
496strings[193] = str->add(strings[193]);
497strings[190] = str->add(strings[190]);
498strings[275] = str->add("_error_dialog");
499strings[276] = str->add("Error - no PAM support");
500strings[193] = str->add(strings[193]);
501strings[190] = str->add(strings[190]);
502strings[277] = str->add("_shelf_config_dialog...BASIC");
503strings[278] = str->add("Configuration de gondole");
504strings[270] = str->add(strings[270]);
505strings[190] = str->add(strings[190]);
506strings[279] = str->add("_config_imc_dialog...BASIC");
507strings[280] = str->add("Configuration de la méthode de saisie");
508strings[270] = str->add(strings[270]);
509strings[190] = str->add(strings[190]);
510strings[281] = str->add("_e_mod_dropshadow_config_dialog...BASIC");
511strings[282] = str->add("Dropshadow Configuration");
512strings[193] = str->add(strings[193]);
513strings[190] = str->add(strings[190]);
514strings[283] = str->add("_config_cursor_dialog...BASIC");
515strings[284] = str->add("Paramètres du curseur");
516strings[270] = str->add(strings[270]);
517strings[190] = str->add(strings[190]);
518strings[285] = str->add("_config_desks_dialog...BASIC");
519strings[286] = str->add("Configuration des Bureaux virtuels");
520strings[193] = str->add(strings[193]);
521strings[190] = str->add(strings[190]);
522strings[287] = str->add("_config_fileman_dialog...BASIC");
523strings[288] = str->add("Fileman Settings");
524strings[270] = str->add(strings[270]);
525strings[190] = str->add(strings[190]);
526strings[289] = str->add("_fwin:://");
527strings[290] = str->add("Root");
528strings[270] = str->add(strings[270]);
529strings[190] = str->add(strings[190]);
530strings[291] = str->add("_fwin:://home/cedric/tmp");
531strings[292] = str->add("tmp");
532strings[270] = str->add(strings[270]);
533strings[190] = str->add(strings[190]);
534strings[293] = str->add("_fwin:://tmp");
535strings[294] = str->add("Temp");
536strings[193] = str->add(strings[193]);
537strings[190] = str->add(strings[190]);
538strings[295] = str->add("_module_unload_dialog");
539strings[296] = str->add("Erreur de chargement du module");
540strings[193] = str->add(strings[193]);
541strings[190] = str->add(strings[190]);
542strings[297] = str->add("_e_exec_run_error_dialog");
543strings[298] = str->add("Erreur d'exécution d'une application");
544strings[270] = str->add(strings[270]);
545strings[190] = str->add(strings[190]);
546strings[297] = str->add(strings[297]);
547strings[298] = str->add(strings[298]);
548strings[193] = str->add(strings[193]);
549strings[190] = str->add(strings[190]);
550strings[297] = str->add(strings[297]);
551strings[298] = str->add(strings[298]);
552strings[193] = str->add(strings[193]);
553strings[190] = str->add(strings[190]);
554strings[299] = str->add("_sys_logout");
555strings[300] = str->add("Logout in progress");
556strings[193] = str->add(strings[193]);
557strings[190] = str->add(strings[190]);
558strings[301] = str->add("_logout_dialog");
559strings[302] = str->add("Are you sure you want to log out?");
560strings[193] = str->add(strings[193]);
561strings[190] = str->add(strings[190]);
562strings[299] = str->add(strings[299]);
563strings[303] = str->add("Fermeture de votre session en cours");
564strings[193] = str->add(strings[193]);
565strings[190] = str->add(strings[190]);
566strings[301] = str->add(strings[301]);
567strings[304] = str->add("Êtes-vous sur de vouloir fermer votre session ?");
568strings[193] = str->add(strings[193]);
569strings[190] = str->add(strings[190]);
570strings[299] = str->add(strings[299]);
571strings[303] = str->add(strings[303]);
572strings[193] = str->add(strings[193]);
573strings[190] = str->add(strings[190]);
574strings[301] = str->add(strings[301]);
575strings[304] = str->add(strings[304]);
576strings[193] = str->add(strings[193]);
577strings[190] = str->add(strings[190]);
578strings[305] = str->add("_configure");
579strings[306] = str->add("Enlightenment Configuration");
580strings[193] = str->add(strings[193]);
581strings[190] = str->add(strings[190]);
582strings[307] = str->add("_confirm_dialog");
583strings[308] = str->add("Êtes-vous sûr de vouloir supprimer cette gondole ?");
584strings[193] = str->add(strings[193]);
585strings[190] = str->add(strings[190]);
586strings[309] = str->add("_config_shelf_dialog...BASIC");
587strings[310] = str->add("Shelf Settings");
588strings[193] = str->add(strings[193]);
589strings[190] = str->add(strings[190]);
590strings[311] = str->add("_config_modules_dialog...BASIC");
591strings[312] = str->add("Module Settings");
592strings[193] = str->add(strings[193]);
593strings[190] = str->add(strings[190]);
594strings[313] = str->add("_config_icon_theme_dialog...BASIC");
595strings[314] = str->add("Icon Theme Settings");
596strings[193] = str->add(strings[193]);
597strings[190] = str->add(strings[190]);
598strings[315] = str->add("_config_color_classes_dialog...BASIC");
599strings[316] = str->add("Couleurs");
600strings[270] = str->add(strings[270]);
601strings[190] = str->add(strings[190]);
602strings[317] = str->add("_config_wallpaper_dialog...ADVANCED");
603strings[318] = str->add("Wallpaper Settings");
604strings[193] = str->add(strings[193]);
605strings[190] = str->add(strings[190]);
606strings[319] = str->add("_fwin:://home/cedric");
607strings[320] = str->add("Home Directory");
608strings[193] = str->add(strings[193]);
609strings[190] = str->add(strings[190]);
610strings[321] = str->add("_fwin:://home/cedric/.e/e/fileman/favorites");
611strings[70] = str->add(strings[70]);
612strings[193] = str->add(strings[193]);
613strings[190] = str->add(strings[190]);
614strings[322] = str->add("_theme_import_dialog");
615strings[323] = str->add("Select a Theme...");
616strings[193] = str->add(strings[193]);
617strings[190] = str->add(strings[190]);
618strings[324] = str->add("_wallpaper_web_dialog");
619strings[325] = str->add("[get-e.org - Static] Choose an image from list");
620strings[193] = str->add(strings[193]);
621strings[190] = str->add(strings[190]);
622strings[326] = str->add("_config_wallpaper_dialog...BASIC");
623strings[327] = str->add("Paramètres de fond d'écran");
624strings[193] = str->add(strings[193]);
625strings[190] = str->add(strings[190]);
626strings[305] = str->add(strings[305]);
627strings[328] = str->add("Configuration d'Enlightenment");
628strings[193] = str->add(strings[193]);
629strings[190] = str->add(strings[190]);
630strings[299] = str->add(strings[299]);
631strings[303] = str->add(strings[303]);
632strings[193] = str->add(strings[193]);
633strings[190] = str->add(strings[190]);
634strings[301] = str->add(strings[301]);
635strings[304] = str->add(strings[304]);
636strings[193] = str->add(strings[193]);
637strings[190] = str->add(strings[190]);
638strings[329] = str->add("_theme_about");
639strings[330] = str->add("About This Theme");
640strings[193] = str->add(strings[193]);
641strings[190] = str->add(strings[190]);
642strings[331] = str->add("_about");
643strings[332] = str->add("About Enlightenment");
644strings[193] = str->add(strings[193]);
645strings[190] = str->add(strings[190]);
646strings[333] = str->add("_config_theme_dialog...BASIC");
647strings[227] = str->add(strings[227]);
648strings[193] = str->add(strings[193]);
649strings[334] = str->add("xterm -hold -e");
650strings[335] = str->add("shelf");
651strings[59] = str->add(strings[59]);
652strings[59] = str->add(strings[59]);
653strings[336] = str->add("plain");
654strings[51] = str->add(strings[51]);
655strings[51] = str->add(strings[51]);
656strings[337] = str->add("inset");
657strings[57] = str->add(strings[57]);
658strings[338] = str->add("ibox.1");
659strings[337] = str->add(strings[337]);
660strings[58] = str->add(strings[58]);
661strings[339] = str->add("ibar.1");
662strings[337] = str->add(strings[337]);
663strings[52] = str->add(strings[52]);
664strings[340] = str->add("temperature.1");
665strings[336] = str->add(strings[336]);
666strings[53] = str->add(strings[53]);
667strings[53] = str->add(strings[53]);
668strings[336] = str->add(strings[336]);
669strings[54] = str->add(strings[54]);
670strings[54] = str->add(strings[54]);
671strings[336] = str->add(strings[336]);
672strings[55] = str->add(strings[55]);
673strings[55] = str->add(strings[55]);
674strings[336] = str->add(strings[336]);
675strings[10] = str->add(strings[10]);
676strings[341] = str->add("note.1");
677strings[336] = str->add(strings[336]);
678strings[335] = str->add(strings[335]);
679strings[51] = str->add(strings[51]);
680strings[57] = str->add(strings[57]);
681strings[335] = str->add(strings[335]);
682strings[51] = str->add(strings[51]);
683strings[57] = str->add(strings[57]);
684strings[335] = str->add(strings[335]);
685strings[51] = str->add(strings[51]);
686strings[57] = str->add(strings[57]);
687strings[342] = str->add("slipshelf_extra");
688strings[343] = str->add("slipshelf");
689strings[60] = str->add(strings[60]);
690strings[344] = str->add("gadman_top");
691strings[335] = str->add(strings[335]);
692strings[61] = str->add(strings[61]);
693strings[335] = str->add(strings[335]);
694strings[61] = str->add(strings[61]);
695strings[335] = str->add(strings[335]);
696strings[61] = str->add(strings[61]);
697strings[335] = str->add(strings[335]);
698strings[61] = str->add(strings[61]);
699strings[345] = str->add("Tango");
700strings[346] = str->add("~/");
701strings[347] = str->add("/");
702strings[61] = str->add(strings[61]);
703strings[348] = str->add("image/jpeg");
704strings[349] = str->add("THUMB");
705strings[350] = str->add("image/png");
706strings[349] = str->add(strings[349]);
707strings[351] = str->add("image/x-pixmap");
708strings[349] = str->add(strings[349]);
709strings[352] = str->add("image/x-xpixmap");
710strings[349] = str->add(strings[349]);
711strings[353] = str->add("image/svg+xml");
712strings[349] = str->add(strings[349]);
713strings[354] = str->add("image/gif");
714strings[349] = str->add(strings[349]);
715strings[355] = str->add("image/tiff");
716strings[349] = str->add(strings[349]);
717strings[356] = str->add("application/x-desktop");
718strings[357] = str->add("DESKTOP");
719strings[358] = str->add("/usr/devel/share/enlightenment/data");
720strings[359] = str->add("/home/cedric/.e/e/images");
721strings[360] = str->add("/usr/devel/share/enlightenment/data/images");
722strings[361] = str->add("/home/cedric/.e/e/fonts");
723strings[362] = str->add("/usr/devel/share/enlightenment/data/fonts");
724strings[363] = str->add("/home/cedric/.e/e/themes");
725strings[364] = str->add("/usr/devel/share/enlightenment/data/themes");
726strings[365] = str->add("/home/cedric/.e/e/icons");
727strings[366] = str->add("/usr/devel/share/enlightenment/data/icons");
728strings[367] = str->add("/home/cedric/.e/e/init");
729strings[368] = str->add("/usr/devel/share/enlightenment/data/init");
730strings[369] = str->add("/home/cedric/.e/e/modules");
731strings[370] = str->add("/usr/devel/lib/enlightenment/modules");
732strings[371] = str->add("/usr/devel/lib/enlightenment/modules_extra");
733strings[372] = str->add("/home/cedric/.e/e/backgrounds");
734strings[373] = str->add("/home/cedric/.e/e/locale");
735strings[374] = str->add("/usr/devel/share/locale");
736strings[61] = str->add(strings[61]);
737strings[62] = str->add(strings[62]);
738strings[375] = str->add("Set As Theme");
739strings[376] = str->add("enlightenment/themes");
740strings[377] = str->add("base");
741strings[6] = str->add(strings[6]);
742strings[6] = str->add(strings[6]);
743strings[378] = str->add("base/theme");
744strings[64] = str->add(strings[64]);
745strings[64] = str->add(strings[64]);
746strings[64] = str->add(strings[64]);
747strings[379] = str->add("Sans:style=Bold,Edje-Vera-Bold");
748strings[380] = str->add("tb_plain");
749strings[381] = str->add("align=center valign=center color=#fff style=soft_shadow shadow_color=#0000001f wrap=word");
750strings[382] = str->add("\n");
751strings[379] = str->add(strings[379]);
752strings[383] = str->add("tb_light");
753strings[384] = str->add("+");
754strings[385] = str->add("Sans,Edje-Vera");
755strings[380] = str->add(strings[380]);
756strings[386] = str->add("align=center color=#000 style=shadow shadow_color=#ffffff80 wrap=word");
757strings[382] = str->add(strings[382]);
758strings[379] = str->add(strings[379]);
759strings[383] = str->add(strings[383]);
760strings[384] = str->add(strings[384]);
761strings[385] = str->add(strings[385]);
762strings[387] = str->add("align=left color=#000 style=shadow shadow_color=#ffffff80 wrap=word");
763strings[379] = str->add(strings[379]);
764strings[388] = str->add("+ style=soft_shadow color=#fff shadow_color=#00000021");
765strings[389] = str->add("-");
766strings[379] = str->add(strings[379]);
767strings[390] = str->add("+ style=glow color=#fff glow2_color=#333 glow_color=#b01010");
768strings[379] = str->add(strings[379]);
769strings[384] = str->add(strings[384]);
770strings[382] = str->add(strings[382]);
771strings[391] = str->add("e/desktop/background");
772strings[392] = str->add("e/widgets/border/default/border");
773strings[393] = str->add("e/widgets/border/shaped/border");
774strings[394] = str->add("e/widgets/border/noresize/border");
775strings[395] = str->add("e/widgets/border/dialog/border");
776strings[396] = str->add("e/widgets/border/noresize_dialog/border");
777strings[397] = str->add("e/widgets/border/pixel/border");
778strings[398] = str->add("e/pointer/enlightenment/default/color");
779strings[399] = str->add("e/pointer/enlightenment/default/mono");
780strings[400] = str->add("e/widgets/menu/default/background");
781strings[401] = str->add("e/widgets/menu/default/separator");
782strings[402] = str->add("e/widgets/menu/default/item_bg");
783strings[403] = str->add("e/widgets/menu/default/icon");
784strings[404] = str->add("e/widgets/menu/default/label");
785strings[405] = str->add("e/widgets/menu/default/submenu");
786strings[406] = str->add("e/widgets/menu/default/check");
787strings[407] = str->add("e/widgets/menu/default/radio");
788strings[408] = str->add("e/shelf/default/base");
789strings[409] = str->add("e/shelf/default/inset");
790strings[410] = str->add("e/shelf/default/plain");
791strings[411] = str->add("e/shelf/invisible/base");
792strings[412] = str->add("e/shelf/invisible/inset");
793strings[413] = str->add("e/shelf/invisible/plain");
794strings[414] = str->add("e/shelf/alternate/base");
795strings[415] = str->add("e/shelf/alternate/inset");
796strings[416] = str->add("e/shelf/alternate/plain");
797strings[417] = str->add("e/modules/start/main");
798strings[418] = str->add("e/modules/pager/popup");
799strings[419] = str->add("e/modules/pager/desk");
800strings[420] = str->add("e/modules/pager/window");
801strings[421] = str->add("e/modules/battery/main");
802strings[422] = str->add("e/modules/temperature/main");
803strings[423] = str->add("e/modules/clock/main");
804strings[424] = str->add("e/modules/cpufreq/main");
805strings[425] = str->add("e/widgets/winlist/main");
806strings[426] = str->add("e/widgets/winlist/item");
807strings[427] = str->add("e/modules/mixer/main");
808strings[428] = str->add("e/sys/logout");
809strings[429] = str->add("e/widgets/dialog/main");
810strings[430] = str->add("e/widgets/dialog/text");
811strings[431] = str->add("e/widgets/configure/main");
812strings[432] = str->add("e/widgets/border/default/move");
813strings[433] = str->add("e/widgets/border/default/resize");
814strings[434] = str->add("e/transpreview/0");
815strings[435] = str->add("e/transpreview/1");
816strings[436] = str->add("e/transitions/crossfade");
817strings[437] = str->add("e/transitions/vswipe");
818strings[438] = str->add("e/widgets/check");
819strings[439] = str->add("e/widgets/check_icon");
820strings[440] = str->add("e/widgets/radio");
821strings[441] = str->add("e/widgets/radio_icon");
822strings[442] = str->add("e/widgets/button");
823strings[443] = str->add("e/widgets/scrollframe");
824strings[444] = str->add("e/widgets/ilist");
825strings[445] = str->add("e/widgets/ilist_odd");
826strings[446] = str->add("e/widgets/ilist_header");
827strings[447] = str->add("e/widgets/ilist_header_odd");
828strings[448] = str->add("e/widgets/entry");
829strings[449] = str->add("e/widgets/entry/text");
830strings[450] = str->add("e/widgets/entry/cursor");
831strings[451] = str->add("e/widgets/entry/selection");
832strings[452] = str->add("e/widgets/preview");
833strings[453] = str->add("e/widgets/deskpreview/desk");
834strings[454] = str->add("e/widgets/color_well");
835strings[455] = str->add("e/widgets/spectrum");
836strings[456] = str->add("e/widgets/cslider");
837strings[457] = str->add("e/widgets/slider_vertical");
838strings[458] = str->add("e/widgets/slider_horizontal");
839strings[459] = str->add("e/widgets/frame");
840strings[460] = str->add("e/widgets/label");
841strings[461] = str->add("e/widgets/fontpreview");
842strings[462] = str->add("e/widgets/textblock");
843strings[463] = str->add("e/widgets/menu/default/submenu_bg");
844strings[464] = str->add("e/sys/halt");
845strings[465] = str->add("e/sys/reboot");
846strings[466] = str->add("e/sys/suspend");
847strings[467] = str->add("e/sys/hibernate");
848strings[468] = str->add("e/widgets/gradpreview");
849strings[189] = str->add(strings[189]);
850strings[188] = str->add(strings[188]);
851str->del(strings[391]);
852str->del(strings[392]);
853str->del(strings[393]);
854str->del(strings[394]);
855str->del(strings[395]);
856str->del(strings[396]);
857str->del(strings[397]);
858str->del(strings[398]);
859str->del(strings[399]);
860str->del(strings[400]);
861str->del(strings[401]);
862str->del(strings[402]);
863str->del(strings[403]);
864str->del(strings[404]);
865str->del(strings[405]);
866str->del(strings[406]);
867str->del(strings[407]);
868str->del(strings[408]);
869str->del(strings[409]);
870str->del(strings[410]);
871str->del(strings[411]);
872str->del(strings[412]);
873str->del(strings[413]);
874str->del(strings[414]);
875str->del(strings[415]);
876str->del(strings[416]);
877str->del(strings[417]);
878str->del(strings[418]);
879str->del(strings[419]);
880str->del(strings[420]);
881str->del(strings[421]);
882str->del(strings[422]);
883str->del(strings[423]);
884str->del(strings[424]);
885str->del(strings[425]);
886str->del(strings[426]);
887str->del(strings[427]);
888str->del(strings[428]);
889str->del(strings[429]);
890str->del(strings[430]);
891str->del(strings[431]);
892str->del(strings[432]);
893str->del(strings[433]);
894str->del(strings[434]);
895str->del(strings[435]);
896str->del(strings[436]);
897str->del(strings[437]);
898str->del(strings[438]);
899str->del(strings[439]);
900str->del(strings[440]);
901str->del(strings[441]);
902str->del(strings[442]);
903str->del(strings[443]);
904str->del(strings[444]);
905str->del(strings[445]);
906str->del(strings[446]);
907str->del(strings[447]);
908str->del(strings[448]);
909str->del(strings[449]);
910str->del(strings[450]);
911str->del(strings[451]);
912str->del(strings[452]);
913str->del(strings[453]);
914str->del(strings[454]);
915str->del(strings[455]);
916str->del(strings[456]);
917str->del(strings[457]);
918str->del(strings[458]);
919str->del(strings[459]);
920str->del(strings[460]);
921str->del(strings[461]);
922str->del(strings[462]);
923str->del(strings[463]);
924str->del(strings[464]);
925str->del(strings[465]);
926str->del(strings[466]);
927str->del(strings[467]);
928str->del(strings[468]);
929strings[469] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj");
930strings[469] = str->add(strings[469]);
931strings[469] = str->add(strings[469]);
932strings[470] = str->add("fonts/Edje-Vera");
933strings[380] = str->add(strings[380]);
934strings[387] = str->add(strings[387]);
935strings[382] = str->add(strings[382]);
936strings[471] = str->add("fonts/Edje-Vera-Bold");
937strings[383] = str->add(strings[383]);
938strings[472] = str->add("+ style=glow color=#fff glow2_color=#fe87 glow_color=#fa14");
939strings[470] = str->add(strings[470]);
940strings[380] = str->add(strings[380]);
941strings[386] = str->add(strings[386]);
942strings[382] = str->add(strings[382]);
943strings[471] = str->add(strings[471]);
944strings[383] = str->add(strings[383]);
945strings[472] = str->add(strings[472]);
946strings[470] = str->add(strings[470]);
947strings[380] = str->add(strings[380]);
948strings[386] = str->add(strings[386]);
949strings[382] = str->add(strings[382]);
950strings[471] = str->add(strings[471]);
951strings[383] = str->add(strings[383]);
952strings[472] = str->add(strings[472]);
953strings[471] = str->add(strings[471]);
954strings[473] = str->add("tb_big");
955strings[474] = str->add("+ style=soft_shadow color=#fff shadow_color=#00000020");
956strings[475] = str->add("- \n \n");
957strings[470] = str->add(strings[470]);
958strings[476] = str->add("style=glow color=#fff glow2_color=#fe87 glow_color=#fa14 align=center wrap=word");
959strings[382] = str->add(strings[382]);
960strings[471] = str->add(strings[471]);
961strings[384] = str->add(strings[384]);
962strings[470] = str->add(strings[470]);
963strings[477] = str->add("+ style=none color=#0002");
964strings[470] = str->add(strings[470]);
965strings[387] = str->add(strings[387]);
966strings[382] = str->add(strings[382]);
967strings[471] = str->add(strings[471]);
968strings[472] = str->add(strings[472]);
969strings[471] = str->add(strings[471]);
970strings[474] = str->add(strings[474]);
971strings[475] = str->add(strings[475]);
972strings[470] = str->add(strings[470]);
973strings[387] = str->add(strings[387]);
974strings[382] = str->add(strings[382]);
975strings[471] = str->add(strings[471]);
976strings[472] = str->add(strings[472]);
977strings[471] = str->add(strings[471]);
978strings[384] = str->add(strings[384]);
979strings[471] = str->add(strings[471]);
980strings[474] = str->add(strings[474]);
981strings[475] = str->add(strings[475]);
982strings[471] = str->add(strings[471]);
983strings[478] = str->add("tb_large");
984strings[479] = str->add("align=center color=#fff style=soft_shadow shadow_color=#0002 wrap=word");
985strings[382] = str->add(strings[382]);
986strings[471] = str->add(strings[471]);
987strings[480] = str->add("tb_large_light");
988strings[472] = str->add(strings[472]);
989strings[470] = str->add(strings[470]);
990strings[471] = str->add(strings[471]);
991strings[481] = str->add("e/desktop/background");
992strings[482] = str->add("e/modules/battery/main");
993strings[483] = str->add("e/modules/battery/popup");
994strings[484] = str->add("e/widgets/border/default/border");
995strings[485] = str->add("e/widgets/border/shaped/border");
996strings[486] = str->add("e/widgets/border/noresize/border");
997strings[487] = str->add("e/widgets/border/dialog/border");
998strings[488] = str->add("e/widgets/border/noresize_dialog/border");
999strings[489] = str->add("e/widgets/border/pixel/border");
1000strings[490] = str->add("e/widgets/border/default/close");
1001strings[491] = str->add("e/widgets/border/default/minimize");
1002strings[492] = str->add("e/widgets/border/default/maximize");
1003strings[493] = str->add("e/widgets/border/default/shade");
1004strings[494] = str->add("e/widgets/border/default/stick");
1005strings[495] = str->add("e/widgets/border/default/kill");
1006strings[496] = str->add("e/widgets/border/default/locks");
1007strings[497] = str->add("e/widgets/border/default/locks_user");
1008strings[498] = str->add("e/widgets/border/default/locks_application");
1009strings[499] = str->add("e/widgets/border/default/borderless");
1010strings[500] = str->add("e/widgets/border/default/fullscreen");
1011strings[501] = str->add("e/widgets/border/default/remember");
1012strings[502] = str->add("e/widgets/border/default/skip_winlist");
1013strings[503] = str->add("e/widgets/border/default/skip");
1014strings[504] = str->add("e/widgets/border/default/skip_pager");
1015strings[505] = str->add("e/widgets/border/default/sendto");
1016strings[506] = str->add("e/widgets/border/default/stacking");
1017strings[507] = str->add("e/widgets/border/default/stack_on_top");
1018strings[508] = str->add("e/widgets/border/default/stack_normal");
1019strings[509] = str->add("e/widgets/border/default/stack_below");
1020strings[510] = str->add("e/widgets/border/default/properties");
1021strings[511] = str->add("e/modules/clock/main");
1022strings[512] = str->add("e/gadman/control");
1023strings[513] = str->add("e/gadman/popup");
1024strings[514] = str->add("e/gadman/full_bg");
1025strings[515] = str->add("e/gadman/frame");
1026strings[516] = str->add("e/modules/ibar/icon");
1027strings[517] = str->add("e/modules/ibar/icon_overlay");
1028strings[518] = str->add("e/modules/ibar/drop");
1029strings[519] = str->add("e/modules/ibar/drop_overlay");
1030strings[520] = str->add("e/widgets/menu/default/background");
1031strings[521] = str->add("e/widgets/menu/default/separator");
1032strings[522] = str->add("e/widgets/menu/default/item_bg");
1033strings[523] = str->add("e/widgets/menu/default/submenu_bg");
1034strings[524] = str->add("e/widgets/menu/default/check");
1035strings[525] = str->add("e/widgets/menu/default/radio");
1036strings[526] = str->add("e/widgets/menu/default/icon");
1037strings[527] = str->add("e/widgets/menu/default/label");
1038strings[528] = str->add("e/widgets/menu/default/submenu");
1039strings[529] = str->add("e/modules/pager/popup");
1040strings[530] = str->add("e/modules/pager/desk");
1041strings[531] = str->add("e/modules/pager/window");
1042strings[532] = str->add("e/widgets/border/default/resize");
1043strings[533] = str->add("e/widgets/border/default/move");
1044strings[534] = str->add("e/modules/temperature/main");
1045strings[535] = str->add("e/error/main");
1046strings[536] = str->add("e/modules/cpufreq/main");
1047strings[537] = str->add("e/modules/ibox/icon");
1048strings[538] = str->add("e/modules/ibox/icon_overlay");
1049strings[539] = str->add("e/modules/ibox/drop");
1050strings[540] = str->add("e/modules/ibox/drop_overlay");
1051strings[541] = str->add("e/modules/start/main");
1052strings[542] = str->add("e/widgets/winlist/main");
1053strings[543] = str->add("e/widgets/winlist/item");
1054strings[544] = str->add("e/transpreview/0");
1055strings[545] = str->add("e/transpreview/1");
1056strings[546] = str->add("e/transitions/crossfade");
1057strings[547] = str->add("e/transitions/vswipe");
1058strings[548] = str->add("e/widgets/dialog/main");
1059strings[549] = str->add("e/widgets/dialog/text");
1060strings[550] = str->add("e/widgets/configure/main");
1061strings[551] = str->add("e/icons/enlightenment/e");
1062strings[552] = str->add("e/icons/enlightenment/reset");
1063strings[553] = str->add("e/icons/enlightenment/exit");
1064strings[554] = str->add("e/icons/enlightenment/logout");
1065strings[555] = str->add("e/icons/enlightenment/halt");
1066strings[556] = str->add("e/icons/enlightenment/reboot");
1067strings[557] = str->add("e/icons/enlightenment/suspend");
1068strings[558] = str->add("e/icons/enlightenment/hibernate");
1069strings[559] = str->add("e/icons/enlightenment/screen_setup");
1070strings[560] = str->add("e/icons/enlightenment/themes");
1071strings[561] = str->add("e/icons/enlightenment/colors");
1072strings[562] = str->add("e/icons/enlightenment/windows");
1073strings[563] = str->add("e/icons/enlightenment/lost_windows");
1074strings[564] = str->add("e/icons/enlightenment/focus");
1075strings[565] = str->add("e/icons/enlightenment/modules");
1076strings[566] = str->add("e/icons/enlightenment/favorites");
1077strings[567] = str->add("e/icons/enlightenment/desktops");
1078strings[568] = str->add("e/icons/enlightenment/configuration");
1079strings[569] = str->add("e/icons/enlightenment/intl");
1080strings[570] = str->add("e/icons/enlightenment/system");
1081strings[571] = str->add("e/icons/enlightenment/run");
1082strings[572] = str->add("e/icons/enlightenment/directories");
1083strings[573] = str->add("e/icons/enlightenment/fileman");
1084strings[574] = str->add("e/icons/enlightenment/unknown");
1085strings[575] = str->add("e/icons/widget/new_dialog");
1086strings[576] = str->add("e/icons/widget/up_arrow");
1087strings[577] = str->add("e/icons/widget/down_arrow");
1088strings[578] = str->add("e/icons/widget/up_dir");
1089strings[579] = str->add("e/icons/enlightenment/mouse");
1090strings[580] = str->add("e/icons/enlightenment/mouse_left");
1091strings[581] = str->add("e/icons/enlightenment/mouse_middle");
1092strings[582] = str->add("e/icons/enlightenment/mouse_right");
1093strings[583] = str->add("e/icons/enlightenment/mouse_extra");
1094strings[584] = str->add("e/icons/enlightenment/mouse_wheel");
1095strings[585] = str->add("e/icons/enlightenment/mouse_clean");
1096strings[586] = str->add("e/icons/enlightenment/keys");
1097strings[587] = str->add("e/icons/enlightenment/desklock");
1098strings[588] = str->add("e/icons/enlightenment/desklock_menu");
1099strings[589] = str->add("e/icons/enlightenment/regenerate_menus");
1100strings[590] = str->add("e/icons/enlightenment/screen_resolution");
1101strings[591] = str->add("e/icons/enlightenment/shelf");
1102strings[592] = str->add("e/icons/enlightenment/fonts");
1103strings[593] = str->add("e/icons/enlightenment/background");
1104strings[594] = str->add("e/icons/enlightenment/icon_theme");
1105strings[595] = str->add("e/icons/enlightenment/applications");
1106strings[596] = str->add("e/icons/enlightenment/transitions");
1107strings[597] = str->add("e/icons/enlightenment/performance");
1108strings[598] = str->add("e/icons/enlightenment/startup");
1109strings[599] = str->add("e/icons/enlightenment/winlist");
1110strings[600] = str->add("e/icons/enlightenment/window_manipulation");
1111strings[601] = str->add("e/icons/enlightenment/menus");
1112strings[602] = str->add("e/icons/enlightenment/screen_normal");
1113strings[603] = str->add("e/icons/enlightenment/screen_around");
1114strings[604] = str->add("e/icons/enlightenment/screen_left");
1115strings[605] = str->add("e/icons/enlightenment/screen_right");
1116strings[606] = str->add("e/icons/enlightenment/screen_vflip");
1117strings[607] = str->add("e/icons/enlightenment/screen_hflip");
1118strings[608] = str->add("e/icons/enlightenment/shelf_position_bottom");
1119strings[609] = str->add("e/icons/enlightenment/shelf_position_bottom_left");
1120strings[610] = str->add("e/icons/enlightenment/shelf_position_bottom_right");
1121strings[611] = str->add("e/icons/enlightenment/shelf_position_top");
1122strings[612] = str->add("e/icons/enlightenment/shelf_position_top_left");
1123strings[613] = str->add("e/icons/enlightenment/shelf_position_top_right");
1124strings[614] = str->add("e/icons/enlightenment/shelf_position_left");
1125strings[615] = str->add("e/icons/enlightenment/shelf_position_left_top");
1126strings[616] = str->add("e/icons/enlightenment/shelf_position_left_bottom");
1127strings[617] = str->add("e/icons/enlightenment/shelf_position_right");
1128strings[618] = str->add("e/icons/enlightenment/shelf_position_right_top");
1129strings[619] = str->add("e/icons/enlightenment/shelf_position_right_bottom");
1130strings[620] = str->add("e/icons/enlightenment/shelf_bottom_desk");
1131strings[621] = str->add("e/icons/enlightenment/shelf_custom");
1132strings[622] = str->add("e/icons/enlightenment/shelf_dock");
1133strings[623] = str->add("e/icons/enlightenment/shelf_menu_bar");
1134strings[624] = str->add("e/icons/enlightenment/shelf_panel");
1135strings[625] = str->add("e/icons/enlightenment/shelf_top_desk");
1136strings[626] = str->add("e/icons/enlightenment/wallpaper_stretch");
1137strings[627] = str->add("e/icons/enlightenment/wallpaper_tile");
1138strings[628] = str->add("e/icons/enlightenment/wallpaper_center");
1139strings[629] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in");
1140strings[630] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out");
1141strings[631] = str->add("e/icons/enlightenment/gradient_h");
1142strings[632] = str->add("e/icons/enlightenment/gradient_v");
1143strings[633] = str->add("e/icons/enlightenment/gradient_du");
1144strings[634] = str->add("e/icons/enlightenment/gradient_dd");
1145strings[635] = str->add("e/icons/enlightenment/gradient_rad");
1146strings[636] = str->add("e/icons/enlightenment/advanced");
1147strings[637] = str->add("e/icons/enlightenment/behavior");
1148strings[638] = str->add("e/icons/enlightenment/appearance");
1149strings[639] = str->add("e/icons/enlightenment/extensions");
1150strings[640] = str->add("e/icons/enlightenment/imc");
1151strings[641] = str->add("e/icons/enlightenment/file_icons");
1152strings[642] = str->add("e/icons/enlightenment/menu_settings");
1153strings[643] = str->add("e/icons/enlightenment/ibar_applications");
1154strings[644] = str->add("e/icons/enlightenment/restart_applications");
1155strings[645] = str->add("e/icons/enlightenment/startup_applications");
1156strings[646] = str->add("e/icons/enlightenment/power_management");
1157strings[647] = str->add("e/icons/enlightenment/screensaver");
1158strings[648] = str->add("e/icons/enlightenment/window_remembers");
1159strings[649] = str->add("e/pointer/enlightenment/default/color");
1160strings[650] = str->add("e/pointer/enlightenment/default/mono");
1161strings[651] = str->add("e/widgets/about/main");
1162strings[652] = str->add("e/theme/about");
1163strings[653] = str->add("e/widgets/entry");
1164strings[654] = str->add("e/widgets/entry/text");
1165strings[655] = str->add("e/widgets/entry/cursor");
1166strings[656] = str->add("e/widgets/entry/selection");
1167strings[657] = str->add("e/fileman/default/window/main");
1168strings[658] = str->add("e/fileman/default/scrollframe");
1169strings[659] = str->add("e/fileman/default/list/variable");
1170strings[660] = str->add("e/fileman/default/list_odd/variable");
1171strings[661] = str->add("e/fileman/default/list/fixed");
1172strings[662] = str->add("e/fileman/default/list_odd/fixed");
1173strings[663] = str->add("e/fileman/default/icon/fixed");
1174strings[664] = str->add("e/fileman/default/icon/variable");
1175strings[665] = str->add("e/fileman/default/overlay");
1176strings[666] = str->add("e/fileman/default/list/drop_between");
1177strings[667] = str->add("e/fileman/default/list/drop_in");
1178strings[668] = str->add("e/fileman/desktop/scrollframe");
1179strings[669] = str->add("e/fileman/desktop/icon/fixed");
1180strings[670] = str->add("e/fileman/desktop/icon/variable");
1181strings[671] = str->add("e/fileman/desktop/overlay");
1182strings[672] = str->add("e/fileman/desktop/list/drop_between");
1183strings[673] = str->add("e/fileman/desktop/list/drop_in");
1184strings[674] = str->add("e/fileman/default/rubberband");
1185strings[675] = str->add("e/icons/fileman/folder");
1186strings[676] = str->add("e/icons/fileman/file");
1187strings[677] = str->add("e/icons/fileman/home");
1188strings[678] = str->add("e/icons/fileman/desktop");
1189strings[679] = str->add("e/icons/fileman/hdd");
1190strings[680] = str->add("e/icons/fileman/hd");
1191strings[681] = str->add("e/icons/fileman/mime/application/pdf");
1192strings[682] = str->add("e/icons/fileman/mime/text/x-csrc");
1193strings[683] = str->add("e/icons/fileman/mime/text/x-chdr");
1194strings[684] = str->add("e/icons/fileman/mime/application/x-object");
1195strings[685] = str->add("e/icons/fileman/mime/application/x-shellscript");
1196strings[686] = str->add("e/icons/fileman/mime/image/png");
1197strings[687] = str->add("e/icons/fileman/mime/image/jpeg");
1198strings[688] = str->add("e/icons/fileman/mime/video/x-msvideo");
1199strings[689] = str->add("e/icons/fileman/mime/audio/mpeg");
1200strings[690] = str->add("e/icons/fileman/mime/application/x-xcf");
1201strings[691] = str->add("e/icons/fileman/mime/text/x-c++src");
1202strings[692] = str->add("e/icons/fileman/mime/text/x-csharp");
1203strings[693] = str->add("e/icons/fileman/mime/text/x-patch");
1204strings[694] = str->add("e/icons/fileman/mime/application/msword");
1205strings[695] = str->add("e/icons/fileman/mime/application/ogg");
1206strings[696] = str->add("e/icons/fileman/mime/text/plain");
1207strings[697] = str->add("e/icons/fileman/mime/application/x-bzip");
1208strings[698] = str->add("e/icons/fileman/mime/application/x-deb");
1209strings[699] = str->add("e/icons/fileman/mime/application/x-font-ttf");
1210strings[700] = str->add("e/icons/fileman/mime/application/x-font-pcf");
1211strings[701] = str->add("e/icons/fileman/mime/application/x-font-bdf");
1212strings[702] = str->add("e/icons/fileman/mime/text/css");
1213strings[703] = str->add("e/icons/fileman/mime/text/html");
1214strings[703] = str->add(strings[703]);
1215strings[704] = str->add("e/icons/fileman/mime/application/zip");
1216strings[705] = str->add("e/icons/fileman/mime/application/x-gzip");
1217strings[706] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar");
1218strings[707] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar");
1219strings[708] = str->add("e/icons/fileman/mime/application/x-compressed-tar");
1220strings[709] = str->add("e/icons/fileman/mime/application/x-tar");
1221strings[710] = str->add("e/icons/fileman/mime/application/x-rar");
1222strings[711] = str->add("e/icons/fileman/mime/video/mpeg");
1223strings[712] = str->add("e/icons/fileman/mime/video");
1224strings[713] = str->add("e/icons/fileman/mime/text");
1225strings[714] = str->add("e/icons/fileman/mime/image");
1226strings[715] = str->add("e/icons/fileman/mime/audio");
1227strings[716] = str->add("e/fileman/default/button/open");
1228strings[717] = str->add("e/fileman/default/button/copy");
1229strings[718] = str->add("e/fileman/default/button/cut");
1230strings[719] = str->add("e/fileman/default/button/paste");
1231strings[720] = str->add("e/fileman/default/button/delete");
1232strings[721] = str->add("e/fileman/default/button/rename");
1233strings[722] = str->add("e/fileman/default/button/properties");
1234strings[723] = str->add("e/fileman/default/button/arrange_name");
1235strings[724] = str->add("e/fileman/default/button/arrange");
1236strings[725] = str->add("e/fileman/default/button/arrange_time");
1237strings[726] = str->add("e/fileman/default/button/new");
1238strings[727] = str->add("e/fileman/default/button/new_dir");
1239strings[728] = str->add("e/fileman/default/button/refresh");
1240strings[729] = str->add("e/fileman/default/button/view_details");
1241strings[730] = str->add("e/fileman/default/button/view_name");
1242strings[731] = str->add("e/fileman/default/button/view");
1243strings[732] = str->add("e/fileman/default/button/select");
1244strings[733] = str->add("e/widgets/fileselector/main");
1245strings[734] = str->add("e/widgets/check");
1246strings[735] = str->add("e/widgets/check_icon");
1247strings[736] = str->add("e/widgets/radio");
1248strings[737] = str->add("e/widgets/radio_icon");
1249strings[738] = str->add("e/widgets/frame");
1250strings[739] = str->add("e/widgets/button");
1251strings[740] = str->add("e/widgets/label");
1252strings[741] = str->add("e/widgets/scrollframe");
1253strings[742] = str->add("e/widgets/ilist");
1254strings[743] = str->add("e/widgets/ilist_odd");
1255strings[744] = str->add("e/widgets/ilist_header");
1256strings[745] = str->add("e/widgets/tlist");
1257strings[746] = str->add("e/widgets/tlist_odd");
1258strings[747] = str->add("e/widgets/slider_vertical");
1259strings[748] = str->add("e/widgets/slider_horizontal");
1260strings[749] = str->add("e/widgets/exebuf/main");
1261strings[750] = str->add("e/widgets/exebuf/item");
1262strings[751] = str->add("e/desklock/background");
1263strings[752] = str->add("e/desklock/login_box");
1264strings[753] = str->add("e/widgets/textblock");
1265strings[754] = str->add("e/shelf/default/base");
1266strings[755] = str->add("e/shelf/default/inset");
1267strings[756] = str->add("e/shelf/default/plain");
1268strings[757] = str->add("e/shelf/alternate/base");
1269strings[758] = str->add("e/shelf/alternate/inset");
1270strings[759] = str->add("e/shelf/alternate/plain");
1271strings[760] = str->add("e/shelf/invisible/base");
1272strings[761] = str->add("e/shelf/invisible/inset");
1273strings[762] = str->add("e/shelf/invisible/plain");
1274strings[763] = str->add("e/widgets/preview");
1275strings[764] = str->add("e/widgets/cslider");
1276strings[765] = str->add("e/widgets/spectrum");
1277strings[766] = str->add("e/widgets/color_well");
1278strings[767] = str->add("e/sys/logout");
1279strings[768] = str->add("e/sys/halt");
1280strings[769] = str->add("e/sys/reboot");
1281strings[770] = str->add("e/sys/suspend");
1282strings[771] = str->add("e/sys/hibernate");
1283strings[772] = str->add("e/widgets/deskpreview/desk");
1284strings[773] = str->add("e/widgets/fontpreview");
1285strings[774] = str->add("e/wizard/extra");
1286strings[775] = str->add("e/wizard/main");
1287strings[776] = str->add("e/toolbar/default/base");
1288strings[777] = str->add("e/widgets/slidesel");
1289strings[778] = str->add("e/modules/mixer/main");
1290strings[779] = str->add("e/modules/connman/main");
1291strings[780] = str->add("e/modules/connman/network");
1292strings[781] = str->add("e/widgets/gradpreview");
1293str->del(strings[481]);
1294str->del(strings[482]);
1295str->del(strings[483]);
1296str->del(strings[484]);
1297str->del(strings[485]);
1298str->del(strings[486]);
1299str->del(strings[487]);
1300str->del(strings[488]);
1301str->del(strings[489]);
1302str->del(strings[490]);
1303str->del(strings[491]);
1304str->del(strings[492]);
1305str->del(strings[493]);
1306str->del(strings[494]);
1307str->del(strings[495]);
1308str->del(strings[496]);
1309str->del(strings[497]);
1310str->del(strings[498]);
1311str->del(strings[499]);
1312str->del(strings[500]);
1313str->del(strings[501]);
1314str->del(strings[502]);
1315str->del(strings[503]);
1316str->del(strings[504]);
1317str->del(strings[505]);
1318str->del(strings[506]);
1319str->del(strings[507]);
1320str->del(strings[508]);
1321str->del(strings[509]);
1322str->del(strings[510]);
1323str->del(strings[511]);
1324str->del(strings[512]);
1325str->del(strings[513]);
1326str->del(strings[514]);
1327str->del(strings[515]);
1328str->del(strings[516]);
1329str->del(strings[517]);
1330str->del(strings[518]);
1331str->del(strings[519]);
1332str->del(strings[520]);
1333str->del(strings[521]);
1334str->del(strings[522]);
1335str->del(strings[523]);
1336str->del(strings[524]);
1337str->del(strings[525]);
1338str->del(strings[526]);
1339str->del(strings[527]);
1340str->del(strings[528]);
1341str->del(strings[529]);
1342str->del(strings[530]);
1343str->del(strings[531]);
1344str->del(strings[532]);
1345str->del(strings[533]);
1346str->del(strings[534]);
1347str->del(strings[535]);
1348str->del(strings[536]);
1349str->del(strings[537]);
1350str->del(strings[538]);
1351str->del(strings[539]);
1352str->del(strings[540]);
1353str->del(strings[541]);
1354str->del(strings[542]);
1355str->del(strings[543]);
1356str->del(strings[544]);
1357str->del(strings[545]);
1358str->del(strings[546]);
1359str->del(strings[547]);
1360str->del(strings[548]);
1361str->del(strings[549]);
1362str->del(strings[550]);
1363str->del(strings[551]);
1364str->del(strings[552]);
1365str->del(strings[553]);
1366str->del(strings[554]);
1367str->del(strings[555]);
1368str->del(strings[556]);
1369str->del(strings[557]);
1370str->del(strings[558]);
1371str->del(strings[559]);
1372str->del(strings[560]);
1373str->del(strings[561]);
1374str->del(strings[562]);
1375str->del(strings[563]);
1376str->del(strings[564]);
1377str->del(strings[565]);
1378str->del(strings[566]);
1379str->del(strings[567]);
1380str->del(strings[568]);
1381str->del(strings[569]);
1382str->del(strings[570]);
1383str->del(strings[571]);
1384str->del(strings[572]);
1385str->del(strings[573]);
1386str->del(strings[574]);
1387str->del(strings[575]);
1388str->del(strings[576]);
1389str->del(strings[577]);
1390str->del(strings[578]);
1391str->del(strings[579]);
1392str->del(strings[580]);
1393str->del(strings[581]);
1394str->del(strings[582]);
1395str->del(strings[583]);
1396str->del(strings[584]);
1397str->del(strings[585]);
1398str->del(strings[586]);
1399str->del(strings[587]);
1400str->del(strings[588]);
1401str->del(strings[589]);
1402str->del(strings[590]);
1403str->del(strings[591]);
1404str->del(strings[592]);
1405str->del(strings[593]);
1406str->del(strings[594]);
1407str->del(strings[595]);
1408str->del(strings[596]);
1409str->del(strings[597]);
1410str->del(strings[598]);
1411str->del(strings[599]);
1412str->del(strings[600]);
1413str->del(strings[601]);
1414str->del(strings[602]);
1415str->del(strings[603]);
1416str->del(strings[604]);
1417str->del(strings[605]);
1418str->del(strings[606]);
1419str->del(strings[607]);
1420str->del(strings[608]);
1421str->del(strings[609]);
1422str->del(strings[610]);
1423str->del(strings[611]);
1424str->del(strings[612]);
1425str->del(strings[613]);
1426str->del(strings[614]);
1427str->del(strings[615]);
1428str->del(strings[616]);
1429str->del(strings[617]);
1430str->del(strings[618]);
1431str->del(strings[619]);
1432str->del(strings[620]);
1433str->del(strings[621]);
1434str->del(strings[622]);
1435str->del(strings[623]);
1436str->del(strings[624]);
1437str->del(strings[625]);
1438str->del(strings[626]);
1439str->del(strings[627]);
1440str->del(strings[628]);
1441str->del(strings[629]);
1442str->del(strings[630]);
1443str->del(strings[631]);
1444str->del(strings[632]);
1445str->del(strings[633]);
1446str->del(strings[634]);
1447str->del(strings[635]);
1448str->del(strings[636]);
1449str->del(strings[637]);
1450str->del(strings[638]);
1451str->del(strings[639]);
1452str->del(strings[640]);
1453str->del(strings[641]);
1454str->del(strings[642]);
1455str->del(strings[643]);
1456str->del(strings[644]);
1457str->del(strings[645]);
1458str->del(strings[646]);
1459str->del(strings[647]);
1460str->del(strings[648]);
1461str->del(strings[649]);
1462str->del(strings[650]);
1463str->del(strings[651]);
1464str->del(strings[652]);
1465str->del(strings[653]);
1466str->del(strings[654]);
1467str->del(strings[655]);
1468str->del(strings[656]);
1469str->del(strings[657]);
1470str->del(strings[658]);
1471str->del(strings[659]);
1472str->del(strings[660]);
1473str->del(strings[661]);
1474str->del(strings[662]);
1475str->del(strings[663]);
1476str->del(strings[664]);
1477str->del(strings[665]);
1478str->del(strings[666]);
1479str->del(strings[667]);
1480str->del(strings[668]);
1481str->del(strings[669]);
1482str->del(strings[670]);
1483str->del(strings[671]);
1484str->del(strings[672]);
1485str->del(strings[673]);
1486str->del(strings[674]);
1487str->del(strings[675]);
1488str->del(strings[676]);
1489str->del(strings[677]);
1490str->del(strings[678]);
1491str->del(strings[679]);
1492str->del(strings[680]);
1493str->del(strings[681]);
1494str->del(strings[682]);
1495str->del(strings[683]);
1496str->del(strings[684]);
1497str->del(strings[685]);
1498str->del(strings[686]);
1499str->del(strings[687]);
1500str->del(strings[688]);
1501str->del(strings[689]);
1502str->del(strings[690]);
1503str->del(strings[691]);
1504str->del(strings[692]);
1505str->del(strings[693]);
1506str->del(strings[694]);
1507str->del(strings[695]);
1508str->del(strings[696]);
1509str->del(strings[697]);
1510str->del(strings[698]);
1511str->del(strings[699]);
1512str->del(strings[700]);
1513str->del(strings[701]);
1514str->del(strings[702]);
1515str->del(strings[703]);
1516str->del(strings[703]);
1517str->del(strings[704]);
1518str->del(strings[705]);
1519str->del(strings[706]);
1520str->del(strings[707]);
1521str->del(strings[708]);
1522str->del(strings[709]);
1523str->del(strings[710]);
1524str->del(strings[711]);
1525str->del(strings[712]);
1526str->del(strings[713]);
1527str->del(strings[714]);
1528str->del(strings[715]);
1529str->del(strings[716]);
1530str->del(strings[717]);
1531str->del(strings[718]);
1532str->del(strings[719]);
1533str->del(strings[720]);
1534str->del(strings[721]);
1535str->del(strings[722]);
1536str->del(strings[723]);
1537str->del(strings[724]);
1538str->del(strings[725]);
1539str->del(strings[726]);
1540str->del(strings[727]);
1541str->del(strings[728]);
1542str->del(strings[729]);
1543str->del(strings[730]);
1544str->del(strings[731]);
1545str->del(strings[732]);
1546str->del(strings[733]);
1547str->del(strings[734]);
1548str->del(strings[735]);
1549str->del(strings[736]);
1550str->del(strings[737]);
1551str->del(strings[738]);
1552str->del(strings[739]);
1553str->del(strings[740]);
1554str->del(strings[741]);
1555str->del(strings[742]);
1556str->del(strings[743]);
1557str->del(strings[744]);
1558str->del(strings[745]);
1559str->del(strings[746]);
1560str->del(strings[747]);
1561str->del(strings[748]);
1562str->del(strings[749]);
1563str->del(strings[750]);
1564str->del(strings[751]);
1565str->del(strings[752]);
1566str->del(strings[753]);
1567str->del(strings[754]);
1568str->del(strings[755]);
1569str->del(strings[756]);
1570str->del(strings[757]);
1571str->del(strings[758]);
1572str->del(strings[759]);
1573str->del(strings[760]);
1574str->del(strings[761]);
1575str->del(strings[762]);
1576str->del(strings[763]);
1577str->del(strings[764]);
1578str->del(strings[765]);
1579str->del(strings[766]);
1580str->del(strings[767]);
1581str->del(strings[768]);
1582str->del(strings[769]);
1583str->del(strings[770]);
1584str->del(strings[771]);
1585str->del(strings[772]);
1586str->del(strings[773]);
1587str->del(strings[774]);
1588str->del(strings[775]);
1589str->del(strings[776]);
1590str->del(strings[777]);
1591str->del(strings[778]);
1592str->del(strings[779]);
1593str->del(strings[780]);
1594str->del(strings[781]);
1595strings[782] = str->add("e/desktop/background");
1596strings[783] = str->add("e/widgets/border/default/border");
1597strings[784] = str->add("e/widgets/border/shaped/border");
1598strings[785] = str->add("e/widgets/border/noresize/border");
1599strings[786] = str->add("e/widgets/border/dialog/border");
1600strings[787] = str->add("e/widgets/border/noresize_dialog/border");
1601strings[788] = str->add("e/widgets/border/pixel/border");
1602strings[789] = str->add("e/pointer/enlightenment/default/color");
1603strings[790] = str->add("e/pointer/enlightenment/default/mono");
1604strings[791] = str->add("e/widgets/menu/default/background");
1605strings[792] = str->add("e/widgets/menu/default/separator");
1606strings[793] = str->add("e/widgets/menu/default/item_bg");
1607strings[794] = str->add("e/widgets/menu/default/icon");
1608strings[795] = str->add("e/widgets/menu/default/label");
1609strings[796] = str->add("e/widgets/menu/default/submenu");
1610strings[797] = str->add("e/widgets/menu/default/check");
1611strings[798] = str->add("e/widgets/menu/default/radio");
1612strings[799] = str->add("e/shelf/default/base");
1613strings[800] = str->add("e/shelf/default/inset");
1614strings[801] = str->add("e/shelf/default/plain");
1615strings[802] = str->add("e/shelf/invisible/base");
1616strings[803] = str->add("e/shelf/invisible/inset");
1617strings[804] = str->add("e/shelf/invisible/plain");
1618strings[805] = str->add("e/shelf/alternate/base");
1619strings[806] = str->add("e/shelf/alternate/inset");
1620strings[807] = str->add("e/shelf/alternate/plain");
1621strings[808] = str->add("e/modules/start/main");
1622strings[809] = str->add("e/modules/pager/popup");
1623strings[810] = str->add("e/modules/pager/desk");
1624strings[811] = str->add("e/modules/pager/window");
1625strings[812] = str->add("e/modules/battery/main");
1626strings[813] = str->add("e/modules/temperature/main");
1627strings[814] = str->add("e/modules/clock/main");
1628strings[815] = str->add("e/modules/cpufreq/main");
1629strings[816] = str->add("e/widgets/winlist/main");
1630strings[817] = str->add("e/widgets/winlist/item");
1631strings[818] = str->add("e/modules/mixer/main");
1632strings[819] = str->add("e/sys/logout");
1633strings[820] = str->add("e/widgets/dialog/main");
1634strings[821] = str->add("e/widgets/dialog/text");
1635strings[822] = str->add("e/widgets/configure/main");
1636strings[823] = str->add("e/widgets/border/default/move");
1637strings[824] = str->add("e/widgets/border/default/resize");
1638strings[825] = str->add("e/transpreview/0");
1639strings[826] = str->add("e/transpreview/1");
1640strings[827] = str->add("e/transitions/crossfade");
1641strings[828] = str->add("e/transitions/vswipe");
1642strings[829] = str->add("e/widgets/check");
1643strings[830] = str->add("e/widgets/check_icon");
1644strings[831] = str->add("e/widgets/radio");
1645strings[832] = str->add("e/widgets/radio_icon");
1646strings[833] = str->add("e/widgets/button");
1647strings[834] = str->add("e/widgets/scrollframe");
1648strings[835] = str->add("e/widgets/ilist");
1649strings[836] = str->add("e/widgets/ilist_odd");
1650strings[837] = str->add("e/widgets/ilist_header");
1651strings[838] = str->add("e/widgets/ilist_header_odd");
1652strings[839] = str->add("e/widgets/entry");
1653strings[840] = str->add("e/widgets/entry/text");
1654strings[841] = str->add("e/widgets/entry/cursor");
1655strings[842] = str->add("e/widgets/entry/selection");
1656strings[843] = str->add("e/widgets/preview");
1657strings[844] = str->add("e/widgets/deskpreview/desk");
1658strings[845] = str->add("e/widgets/color_well");
1659strings[846] = str->add("e/widgets/spectrum");
1660strings[847] = str->add("e/widgets/cslider");
1661strings[848] = str->add("e/widgets/slider_vertical");
1662strings[849] = str->add("e/widgets/slider_horizontal");
1663strings[850] = str->add("e/widgets/frame");
1664strings[851] = str->add("e/widgets/label");
1665strings[852] = str->add("e/widgets/fontpreview");
1666strings[853] = str->add("e/widgets/textblock");
1667strings[854] = str->add("e/widgets/menu/default/submenu_bg");
1668strings[855] = str->add("e/sys/halt");
1669strings[856] = str->add("e/sys/reboot");
1670strings[857] = str->add("e/sys/suspend");
1671strings[858] = str->add("e/sys/hibernate");
1672strings[859] = str->add("e/widgets/gradpreview");
1673strings[61] = str->add(strings[61]);
1674strings[860] = str->add("shaped");
1675strings[861] = str->add("noresize");
1676strings[862] = str->add("dialog");
1677strings[863] = str->add("noresize_dialog");
1678strings[864] = str->add("pixel");
1679str->del(strings[782]);
1680str->del(strings[783]);
1681str->del(strings[784]);
1682str->del(strings[785]);
1683str->del(strings[786]);
1684str->del(strings[787]);
1685str->del(strings[788]);
1686str->del(strings[789]);
1687str->del(strings[790]);
1688str->del(strings[791]);
1689str->del(strings[792]);
1690str->del(strings[793]);
1691str->del(strings[794]);
1692str->del(strings[795]);
1693str->del(strings[796]);
1694str->del(strings[797]);
1695str->del(strings[798]);
1696str->del(strings[799]);
1697str->del(strings[800]);
1698str->del(strings[801]);
1699str->del(strings[802]);
1700str->del(strings[803]);
1701str->del(strings[804]);
1702str->del(strings[805]);
1703str->del(strings[806]);
1704str->del(strings[807]);
1705str->del(strings[808]);
1706str->del(strings[809]);
1707str->del(strings[810]);
1708str->del(strings[811]);
1709str->del(strings[812]);
1710str->del(strings[813]);
1711str->del(strings[814]);
1712str->del(strings[815]);
1713str->del(strings[816]);
1714str->del(strings[817]);
1715str->del(strings[818]);
1716str->del(strings[819]);
1717str->del(strings[820]);
1718str->del(strings[821]);
1719str->del(strings[822]);
1720str->del(strings[823]);
1721str->del(strings[824]);
1722str->del(strings[825]);
1723str->del(strings[826]);
1724str->del(strings[827]);
1725str->del(strings[828]);
1726str->del(strings[829]);
1727str->del(strings[830]);
1728str->del(strings[831]);
1729str->del(strings[832]);
1730str->del(strings[833]);
1731str->del(strings[834]);
1732str->del(strings[835]);
1733str->del(strings[836]);
1734str->del(strings[837]);
1735str->del(strings[838]);
1736str->del(strings[839]);
1737str->del(strings[840]);
1738str->del(strings[841]);
1739str->del(strings[842]);
1740str->del(strings[843]);
1741str->del(strings[844]);
1742str->del(strings[845]);
1743str->del(strings[846]);
1744str->del(strings[847]);
1745str->del(strings[848]);
1746str->del(strings[849]);
1747str->del(strings[850]);
1748str->del(strings[851]);
1749str->del(strings[852]);
1750str->del(strings[853]);
1751str->del(strings[854]);
1752str->del(strings[855]);
1753str->del(strings[856]);
1754str->del(strings[857]);
1755str->del(strings[858]);
1756str->del(strings[859]);
1757strings[865] = str->add("e/desktop/background");
1758strings[866] = str->add("e/modules/battery/main");
1759strings[867] = str->add("e/modules/battery/popup");
1760strings[868] = str->add("e/widgets/border/default/border");
1761strings[869] = str->add("e/widgets/border/shaped/border");
1762strings[870] = str->add("e/widgets/border/noresize/border");
1763strings[871] = str->add("e/widgets/border/dialog/border");
1764strings[872] = str->add("e/widgets/border/noresize_dialog/border");
1765strings[873] = str->add("e/widgets/border/pixel/border");
1766strings[874] = str->add("e/widgets/border/default/close");
1767strings[875] = str->add("e/widgets/border/default/minimize");
1768strings[876] = str->add("e/widgets/border/default/maximize");
1769strings[877] = str->add("e/widgets/border/default/shade");
1770strings[878] = str->add("e/widgets/border/default/stick");
1771strings[879] = str->add("e/widgets/border/default/kill");
1772strings[880] = str->add("e/widgets/border/default/locks");
1773strings[881] = str->add("e/widgets/border/default/locks_user");
1774strings[882] = str->add("e/widgets/border/default/locks_application");
1775strings[883] = str->add("e/widgets/border/default/borderless");
1776strings[884] = str->add("e/widgets/border/default/fullscreen");
1777strings[885] = str->add("e/widgets/border/default/remember");
1778strings[886] = str->add("e/widgets/border/default/skip_winlist");
1779strings[887] = str->add("e/widgets/border/default/skip");
1780strings[888] = str->add("e/widgets/border/default/skip_pager");
1781strings[889] = str->add("e/widgets/border/default/sendto");
1782strings[890] = str->add("e/widgets/border/default/stacking");
1783strings[891] = str->add("e/widgets/border/default/stack_on_top");
1784strings[892] = str->add("e/widgets/border/default/stack_normal");
1785strings[893] = str->add("e/widgets/border/default/stack_below");
1786strings[894] = str->add("e/widgets/border/default/properties");
1787strings[895] = str->add("e/modules/clock/main");
1788strings[896] = str->add("e/gadman/control");
1789strings[897] = str->add("e/gadman/popup");
1790strings[898] = str->add("e/gadman/full_bg");
1791strings[899] = str->add("e/gadman/frame");
1792strings[900] = str->add("e/modules/ibar/icon");
1793strings[901] = str->add("e/modules/ibar/icon_overlay");
1794strings[902] = str->add("e/modules/ibar/drop");
1795strings[903] = str->add("e/modules/ibar/drop_overlay");
1796strings[904] = str->add("e/widgets/menu/default/background");
1797strings[905] = str->add("e/widgets/menu/default/separator");
1798strings[906] = str->add("e/widgets/menu/default/item_bg");
1799strings[907] = str->add("e/widgets/menu/default/submenu_bg");
1800strings[908] = str->add("e/widgets/menu/default/check");
1801strings[909] = str->add("e/widgets/menu/default/radio");
1802strings[910] = str->add("e/widgets/menu/default/icon");
1803strings[911] = str->add("e/widgets/menu/default/label");
1804strings[912] = str->add("e/widgets/menu/default/submenu");
1805strings[913] = str->add("e/modules/pager/popup");
1806strings[914] = str->add("e/modules/pager/desk");
1807strings[915] = str->add("e/modules/pager/window");
1808strings[916] = str->add("e/widgets/border/default/resize");
1809strings[917] = str->add("e/widgets/border/default/move");
1810strings[918] = str->add("e/modules/temperature/main");
1811strings[919] = str->add("e/error/main");
1812strings[920] = str->add("e/modules/cpufreq/main");
1813strings[921] = str->add("e/modules/ibox/icon");
1814strings[922] = str->add("e/modules/ibox/icon_overlay");
1815strings[923] = str->add("e/modules/ibox/drop");
1816strings[924] = str->add("e/modules/ibox/drop_overlay");
1817strings[925] = str->add("e/modules/start/main");
1818strings[926] = str->add("e/widgets/winlist/main");
1819strings[927] = str->add("e/widgets/winlist/item");
1820strings[928] = str->add("e/transpreview/0");
1821strings[929] = str->add("e/transpreview/1");
1822strings[930] = str->add("e/transitions/crossfade");
1823strings[931] = str->add("e/transitions/vswipe");
1824strings[932] = str->add("e/widgets/dialog/main");
1825strings[933] = str->add("e/widgets/dialog/text");
1826strings[934] = str->add("e/widgets/configure/main");
1827strings[935] = str->add("e/icons/enlightenment/e");
1828strings[936] = str->add("e/icons/enlightenment/reset");
1829strings[937] = str->add("e/icons/enlightenment/exit");
1830strings[938] = str->add("e/icons/enlightenment/logout");
1831strings[939] = str->add("e/icons/enlightenment/halt");
1832strings[940] = str->add("e/icons/enlightenment/reboot");
1833strings[941] = str->add("e/icons/enlightenment/suspend");
1834strings[942] = str->add("e/icons/enlightenment/hibernate");
1835strings[943] = str->add("e/icons/enlightenment/screen_setup");
1836strings[944] = str->add("e/icons/enlightenment/themes");
1837strings[945] = str->add("e/icons/enlightenment/colors");
1838strings[946] = str->add("e/icons/enlightenment/windows");
1839strings[947] = str->add("e/icons/enlightenment/lost_windows");
1840strings[948] = str->add("e/icons/enlightenment/focus");
1841strings[949] = str->add("e/icons/enlightenment/modules");
1842strings[950] = str->add("e/icons/enlightenment/favorites");
1843strings[951] = str->add("e/icons/enlightenment/desktops");
1844strings[952] = str->add("e/icons/enlightenment/configuration");
1845strings[953] = str->add("e/icons/enlightenment/intl");
1846strings[954] = str->add("e/icons/enlightenment/system");
1847strings[955] = str->add("e/icons/enlightenment/run");
1848strings[956] = str->add("e/icons/enlightenment/directories");
1849strings[957] = str->add("e/icons/enlightenment/fileman");
1850strings[958] = str->add("e/icons/enlightenment/unknown");
1851strings[959] = str->add("e/icons/widget/new_dialog");
1852strings[960] = str->add("e/icons/widget/up_arrow");
1853strings[961] = str->add("e/icons/widget/down_arrow");
1854strings[962] = str->add("e/icons/widget/up_dir");
1855strings[963] = str->add("e/icons/enlightenment/mouse");
1856strings[964] = str->add("e/icons/enlightenment/mouse_left");
1857strings[965] = str->add("e/icons/enlightenment/mouse_middle");
1858strings[966] = str->add("e/icons/enlightenment/mouse_right");
1859strings[967] = str->add("e/icons/enlightenment/mouse_extra");
1860strings[968] = str->add("e/icons/enlightenment/mouse_wheel");
1861strings[969] = str->add("e/icons/enlightenment/mouse_clean");
1862strings[970] = str->add("e/icons/enlightenment/keys");
1863strings[971] = str->add("e/icons/enlightenment/desklock");
1864strings[972] = str->add("e/icons/enlightenment/desklock_menu");
1865strings[973] = str->add("e/icons/enlightenment/regenerate_menus");
1866strings[974] = str->add("e/icons/enlightenment/screen_resolution");
1867strings[975] = str->add("e/icons/enlightenment/shelf");
1868strings[976] = str->add("e/icons/enlightenment/fonts");
1869strings[977] = str->add("e/icons/enlightenment/background");
1870strings[978] = str->add("e/icons/enlightenment/icon_theme");
1871strings[979] = str->add("e/icons/enlightenment/applications");
1872strings[980] = str->add("e/icons/enlightenment/transitions");
1873strings[981] = str->add("e/icons/enlightenment/performance");
1874strings[982] = str->add("e/icons/enlightenment/startup");
1875strings[983] = str->add("e/icons/enlightenment/winlist");
1876strings[984] = str->add("e/icons/enlightenment/window_manipulation");
1877strings[985] = str->add("e/icons/enlightenment/menus");
1878strings[986] = str->add("e/icons/enlightenment/screen_normal");
1879strings[987] = str->add("e/icons/enlightenment/screen_around");
1880strings[988] = str->add("e/icons/enlightenment/screen_left");
1881strings[989] = str->add("e/icons/enlightenment/screen_right");
1882strings[990] = str->add("e/icons/enlightenment/screen_vflip");
1883strings[991] = str->add("e/icons/enlightenment/screen_hflip");
1884strings[992] = str->add("e/icons/enlightenment/shelf_position_bottom");
1885strings[993] = str->add("e/icons/enlightenment/shelf_position_bottom_left");
1886strings[994] = str->add("e/icons/enlightenment/shelf_position_bottom_right");
1887strings[995] = str->add("e/icons/enlightenment/shelf_position_top");
1888strings[996] = str->add("e/icons/enlightenment/shelf_position_top_left");
1889strings[997] = str->add("e/icons/enlightenment/shelf_position_top_right");
1890strings[998] = str->add("e/icons/enlightenment/shelf_position_left");
1891strings[999] = str->add("e/icons/enlightenment/shelf_position_left_top");
1892strings[1000] = str->add("e/icons/enlightenment/shelf_position_left_bottom");
1893strings[1001] = str->add("e/icons/enlightenment/shelf_position_right");
1894strings[1002] = str->add("e/icons/enlightenment/shelf_position_right_top");
1895strings[1003] = str->add("e/icons/enlightenment/shelf_position_right_bottom");
1896strings[1004] = str->add("e/icons/enlightenment/shelf_bottom_desk");
1897strings[1005] = str->add("e/icons/enlightenment/shelf_custom");
1898strings[1006] = str->add("e/icons/enlightenment/shelf_dock");
1899strings[1007] = str->add("e/icons/enlightenment/shelf_menu_bar");
1900strings[1008] = str->add("e/icons/enlightenment/shelf_panel");
1901strings[1009] = str->add("e/icons/enlightenment/shelf_top_desk");
1902strings[1010] = str->add("e/icons/enlightenment/wallpaper_stretch");
1903strings[1011] = str->add("e/icons/enlightenment/wallpaper_tile");
1904strings[1012] = str->add("e/icons/enlightenment/wallpaper_center");
1905strings[1013] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in");
1906strings[1014] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out");
1907strings[1015] = str->add("e/icons/enlightenment/gradient_h");
1908strings[1016] = str->add("e/icons/enlightenment/gradient_v");
1909strings[1017] = str->add("e/icons/enlightenment/gradient_du");
1910strings[1018] = str->add("e/icons/enlightenment/gradient_dd");
1911strings[1019] = str->add("e/icons/enlightenment/gradient_rad");
1912strings[1020] = str->add("e/icons/enlightenment/advanced");
1913strings[1021] = str->add("e/icons/enlightenment/behavior");
1914strings[1022] = str->add("e/icons/enlightenment/appearance");
1915strings[1023] = str->add("e/icons/enlightenment/extensions");
1916strings[1024] = str->add("e/icons/enlightenment/imc");
1917strings[1025] = str->add("e/icons/enlightenment/file_icons");
1918strings[1026] = str->add("e/icons/enlightenment/menu_settings");
1919strings[1027] = str->add("e/icons/enlightenment/ibar_applications");
1920strings[1028] = str->add("e/icons/enlightenment/restart_applications");
1921strings[1029] = str->add("e/icons/enlightenment/startup_applications");
1922strings[1030] = str->add("e/icons/enlightenment/power_management");
1923strings[1031] = str->add("e/icons/enlightenment/screensaver");
1924strings[1032] = str->add("e/icons/enlightenment/window_remembers");
1925strings[1033] = str->add("e/pointer/enlightenment/default/color");
1926strings[1034] = str->add("e/pointer/enlightenment/default/mono");
1927strings[1035] = str->add("e/widgets/about/main");
1928strings[1036] = str->add("e/theme/about");
1929strings[1037] = str->add("e/widgets/entry");
1930strings[1038] = str->add("e/widgets/entry/text");
1931strings[1039] = str->add("e/widgets/entry/cursor");
1932strings[1040] = str->add("e/widgets/entry/selection");
1933strings[1041] = str->add("e/fileman/default/window/main");
1934strings[1042] = str->add("e/fileman/default/scrollframe");
1935strings[1043] = str->add("e/fileman/default/list/variable");
1936strings[1044] = str->add("e/fileman/default/list_odd/variable");
1937strings[1045] = str->add("e/fileman/default/list/fixed");
1938strings[1046] = str->add("e/fileman/default/list_odd/fixed");
1939strings[1047] = str->add("e/fileman/default/icon/fixed");
1940strings[1048] = str->add("e/fileman/default/icon/variable");
1941strings[1049] = str->add("e/fileman/default/overlay");
1942strings[1050] = str->add("e/fileman/default/list/drop_between");
1943strings[1051] = str->add("e/fileman/default/list/drop_in");
1944strings[1052] = str->add("e/fileman/desktop/scrollframe");
1945strings[1053] = str->add("e/fileman/desktop/icon/fixed");
1946strings[1054] = str->add("e/fileman/desktop/icon/variable");
1947strings[1055] = str->add("e/fileman/desktop/overlay");
1948strings[1056] = str->add("e/fileman/desktop/list/drop_between");
1949strings[1057] = str->add("e/fileman/desktop/list/drop_in");
1950strings[1058] = str->add("e/fileman/default/rubberband");
1951strings[1059] = str->add("e/icons/fileman/folder");
1952strings[1060] = str->add("e/icons/fileman/file");
1953strings[1061] = str->add("e/icons/fileman/home");
1954strings[1062] = str->add("e/icons/fileman/desktop");
1955strings[1063] = str->add("e/icons/fileman/hdd");
1956strings[1064] = str->add("e/icons/fileman/hd");
1957strings[1065] = str->add("e/icons/fileman/mime/application/pdf");
1958strings[1066] = str->add("e/icons/fileman/mime/text/x-csrc");
1959strings[1067] = str->add("e/icons/fileman/mime/text/x-chdr");
1960strings[1068] = str->add("e/icons/fileman/mime/application/x-object");
1961strings[1069] = str->add("e/icons/fileman/mime/application/x-shellscript");
1962strings[1070] = str->add("e/icons/fileman/mime/image/png");
1963strings[1071] = str->add("e/icons/fileman/mime/image/jpeg");
1964strings[1072] = str->add("e/icons/fileman/mime/video/x-msvideo");
1965strings[1073] = str->add("e/icons/fileman/mime/audio/mpeg");
1966strings[1074] = str->add("e/icons/fileman/mime/application/x-xcf");
1967strings[1075] = str->add("e/icons/fileman/mime/text/x-c++src");
1968strings[1076] = str->add("e/icons/fileman/mime/text/x-csharp");
1969strings[1077] = str->add("e/icons/fileman/mime/text/x-patch");
1970strings[1078] = str->add("e/icons/fileman/mime/application/msword");
1971strings[1079] = str->add("e/icons/fileman/mime/application/ogg");
1972strings[1080] = str->add("e/icons/fileman/mime/text/plain");
1973strings[1081] = str->add("e/icons/fileman/mime/application/x-bzip");
1974strings[1082] = str->add("e/icons/fileman/mime/application/x-deb");
1975strings[1083] = str->add("e/icons/fileman/mime/application/x-font-ttf");
1976strings[1084] = str->add("e/icons/fileman/mime/application/x-font-pcf");
1977strings[1085] = str->add("e/icons/fileman/mime/application/x-font-bdf");
1978strings[1086] = str->add("e/icons/fileman/mime/text/css");
1979strings[1087] = str->add("e/icons/fileman/mime/text/html");
1980strings[1087] = str->add(strings[1087]);
1981strings[1088] = str->add("e/icons/fileman/mime/application/zip");
1982strings[1089] = str->add("e/icons/fileman/mime/application/x-gzip");
1983strings[1090] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar");
1984strings[1091] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar");
1985strings[1092] = str->add("e/icons/fileman/mime/application/x-compressed-tar");
1986strings[1093] = str->add("e/icons/fileman/mime/application/x-tar");
1987strings[1094] = str->add("e/icons/fileman/mime/application/x-rar");
1988strings[1095] = str->add("e/icons/fileman/mime/video/mpeg");
1989strings[1096] = str->add("e/icons/fileman/mime/video");
1990strings[1097] = str->add("e/icons/fileman/mime/text");
1991strings[1098] = str->add("e/icons/fileman/mime/image");
1992strings[1099] = str->add("e/icons/fileman/mime/audio");
1993strings[1100] = str->add("e/fileman/default/button/open");
1994strings[1101] = str->add("e/fileman/default/button/copy");
1995strings[1102] = str->add("e/fileman/default/button/cut");
1996strings[1103] = str->add("e/fileman/default/button/paste");
1997strings[1104] = str->add("e/fileman/default/button/delete");
1998strings[1105] = str->add("e/fileman/default/button/rename");
1999strings[1106] = str->add("e/fileman/default/button/properties");
2000strings[1107] = str->add("e/fileman/default/button/arrange_name");
2001strings[1108] = str->add("e/fileman/default/button/arrange");
2002strings[1109] = str->add("e/fileman/default/button/arrange_time");
2003strings[1110] = str->add("e/fileman/default/button/new");
2004strings[1111] = str->add("e/fileman/default/button/new_dir");
2005strings[1112] = str->add("e/fileman/default/button/refresh");
2006strings[1113] = str->add("e/fileman/default/button/view_details");
2007strings[1114] = str->add("e/fileman/default/button/view_name");
2008strings[1115] = str->add("e/fileman/default/button/view");
2009strings[1116] = str->add("e/fileman/default/button/select");
2010strings[1117] = str->add("e/widgets/fileselector/main");
2011strings[1118] = str->add("e/widgets/check");
2012strings[1119] = str->add("e/widgets/check_icon");
2013strings[1120] = str->add("e/widgets/radio");
2014strings[1121] = str->add("e/widgets/radio_icon");
2015strings[1122] = str->add("e/widgets/frame");
2016strings[1123] = str->add("e/widgets/button");
2017strings[1124] = str->add("e/widgets/label");
2018strings[1125] = str->add("e/widgets/scrollframe");
2019strings[1126] = str->add("e/widgets/ilist");
2020strings[1127] = str->add("e/widgets/ilist_odd");
2021strings[1128] = str->add("e/widgets/ilist_header");
2022strings[1129] = str->add("e/widgets/tlist");
2023strings[1130] = str->add("e/widgets/tlist_odd");
2024strings[1131] = str->add("e/widgets/slider_vertical");
2025strings[1132] = str->add("e/widgets/slider_horizontal");
2026strings[1133] = str->add("e/widgets/exebuf/main");
2027strings[1134] = str->add("e/widgets/exebuf/item");
2028strings[1135] = str->add("e/desklock/background");
2029strings[1136] = str->add("e/desklock/login_box");
2030strings[1137] = str->add("e/widgets/textblock");
2031strings[1138] = str->add("e/shelf/default/base");
2032strings[1139] = str->add("e/shelf/default/inset");
2033strings[1140] = str->add("e/shelf/default/plain");
2034strings[1141] = str->add("e/shelf/alternate/base");
2035strings[1142] = str->add("e/shelf/alternate/inset");
2036strings[1143] = str->add("e/shelf/alternate/plain");
2037strings[1144] = str->add("e/shelf/invisible/base");
2038strings[1145] = str->add("e/shelf/invisible/inset");
2039strings[1146] = str->add("e/shelf/invisible/plain");
2040strings[1147] = str->add("e/widgets/preview");
2041strings[1148] = str->add("e/widgets/cslider");
2042strings[1149] = str->add("e/widgets/spectrum");
2043strings[1150] = str->add("e/widgets/color_well");
2044strings[1151] = str->add("e/sys/logout");
2045strings[1152] = str->add("e/sys/halt");
2046strings[1153] = str->add("e/sys/reboot");
2047strings[1154] = str->add("e/sys/suspend");
2048strings[1155] = str->add("e/sys/hibernate");
2049strings[1156] = str->add("e/widgets/deskpreview/desk");
2050strings[1157] = str->add("e/widgets/fontpreview");
2051strings[1158] = str->add("e/wizard/extra");
2052strings[1159] = str->add("e/wizard/main");
2053strings[1160] = str->add("e/toolbar/default/base");
2054strings[1161] = str->add("e/widgets/slidesel");
2055strings[1162] = str->add("e/modules/mixer/main");
2056strings[1163] = str->add("e/modules/connman/main");
2057strings[1164] = str->add("e/modules/connman/network");
2058strings[1165] = str->add("e/widgets/gradpreview");
2059str->del(strings[865]);
2060str->del(strings[866]);
2061str->del(strings[867]);
2062str->del(strings[868]);
2063str->del(strings[869]);
2064str->del(strings[870]);
2065str->del(strings[871]);
2066str->del(strings[872]);
2067str->del(strings[873]);
2068str->del(strings[874]);
2069str->del(strings[875]);
2070str->del(strings[876]);
2071str->del(strings[877]);
2072str->del(strings[878]);
2073str->del(strings[879]);
2074str->del(strings[880]);
2075str->del(strings[881]);
2076str->del(strings[882]);
2077str->del(strings[883]);
2078str->del(strings[884]);
2079str->del(strings[885]);
2080str->del(strings[886]);
2081str->del(strings[887]);
2082str->del(strings[888]);
2083str->del(strings[889]);
2084str->del(strings[890]);
2085str->del(strings[891]);
2086str->del(strings[892]);
2087str->del(strings[893]);
2088str->del(strings[894]);
2089str->del(strings[895]);
2090str->del(strings[896]);
2091str->del(strings[897]);
2092str->del(strings[898]);
2093str->del(strings[899]);
2094str->del(strings[900]);
2095str->del(strings[901]);
2096str->del(strings[902]);
2097str->del(strings[903]);
2098str->del(strings[904]);
2099str->del(strings[905]);
2100str->del(strings[906]);
2101str->del(strings[907]);
2102str->del(strings[908]);
2103str->del(strings[909]);
2104str->del(strings[910]);
2105str->del(strings[911]);
2106str->del(strings[912]);
2107str->del(strings[913]);
2108str->del(strings[914]);
2109str->del(strings[915]);
2110str->del(strings[916]);
2111str->del(strings[917]);
2112str->del(strings[918]);
2113str->del(strings[919]);
2114str->del(strings[920]);
2115str->del(strings[921]);
2116str->del(strings[922]);
2117str->del(strings[923]);
2118str->del(strings[924]);
2119str->del(strings[925]);
2120str->del(strings[926]);
2121str->del(strings[927]);
2122str->del(strings[928]);
2123str->del(strings[929]);
2124str->del(strings[930]);
2125str->del(strings[931]);
2126str->del(strings[932]);
2127str->del(strings[933]);
2128str->del(strings[934]);
2129str->del(strings[935]);
2130str->del(strings[936]);
2131str->del(strings[937]);
2132str->del(strings[938]);
2133str->del(strings[939]);
2134str->del(strings[940]);
2135str->del(strings[941]);
2136str->del(strings[942]);
2137str->del(strings[943]);
2138str->del(strings[944]);
2139str->del(strings[945]);
2140str->del(strings[946]);
2141str->del(strings[947]);
2142str->del(strings[948]);
2143str->del(strings[949]);
2144str->del(strings[950]);
2145str->del(strings[951]);
2146str->del(strings[952]);
2147str->del(strings[953]);
2148str->del(strings[954]);
2149str->del(strings[955]);
2150str->del(strings[956]);
2151str->del(strings[957]);
2152str->del(strings[958]);
2153str->del(strings[959]);
2154str->del(strings[960]);
2155str->del(strings[961]);
2156str->del(strings[962]);
2157str->del(strings[963]);
2158str->del(strings[964]);
2159str->del(strings[965]);
2160str->del(strings[966]);
2161str->del(strings[967]);
2162str->del(strings[968]);
2163str->del(strings[969]);
2164str->del(strings[970]);
2165str->del(strings[971]);
2166str->del(strings[972]);
2167str->del(strings[973]);
2168str->del(strings[974]);
2169str->del(strings[975]);
2170str->del(strings[976]);
2171str->del(strings[977]);
2172str->del(strings[978]);
2173str->del(strings[979]);
2174str->del(strings[980]);
2175str->del(strings[981]);
2176str->del(strings[982]);
2177str->del(strings[983]);
2178str->del(strings[984]);
2179str->del(strings[985]);
2180str->del(strings[986]);
2181str->del(strings[987]);
2182str->del(strings[988]);
2183str->del(strings[989]);
2184str->del(strings[990]);
2185str->del(strings[991]);
2186str->del(strings[992]);
2187str->del(strings[993]);
2188str->del(strings[994]);
2189str->del(strings[995]);
2190str->del(strings[996]);
2191str->del(strings[997]);
2192str->del(strings[998]);
2193str->del(strings[999]);
2194str->del(strings[1000]);
2195str->del(strings[1001]);
2196str->del(strings[1002]);
2197str->del(strings[1003]);
2198str->del(strings[1004]);
2199str->del(strings[1005]);
2200str->del(strings[1006]);
2201str->del(strings[1007]);
2202str->del(strings[1008]);
2203str->del(strings[1009]);
2204str->del(strings[1010]);
2205str->del(strings[1011]);
2206str->del(strings[1012]);
2207str->del(strings[1013]);
2208str->del(strings[1014]);
2209str->del(strings[1015]);
2210str->del(strings[1016]);
2211str->del(strings[1017]);
2212str->del(strings[1018]);
2213str->del(strings[1019]);
2214str->del(strings[1020]);
2215str->del(strings[1021]);
2216str->del(strings[1022]);
2217str->del(strings[1023]);
2218str->del(strings[1024]);
2219str->del(strings[1025]);
2220str->del(strings[1026]);
2221str->del(strings[1027]);
2222str->del(strings[1028]);
2223str->del(strings[1029]);
2224str->del(strings[1030]);
2225str->del(strings[1031]);
2226str->del(strings[1032]);
2227str->del(strings[1033]);
2228str->del(strings[1034]);
2229str->del(strings[1035]);
2230str->del(strings[1036]);
2231str->del(strings[1037]);
2232str->del(strings[1038]);
2233str->del(strings[1039]);
2234str->del(strings[1040]);
2235str->del(strings[1041]);
2236str->del(strings[1042]);
2237str->del(strings[1043]);
2238str->del(strings[1044]);
2239str->del(strings[1045]);
2240str->del(strings[1046]);
2241str->del(strings[1047]);
2242str->del(strings[1048]);
2243str->del(strings[1049]);
2244str->del(strings[1050]);
2245str->del(strings[1051]);
2246str->del(strings[1052]);
2247str->del(strings[1053]);
2248str->del(strings[1054]);
2249str->del(strings[1055]);
2250str->del(strings[1056]);
2251str->del(strings[1057]);
2252str->del(strings[1058]);
2253str->del(strings[1059]);
2254str->del(strings[1060]);
2255str->del(strings[1061]);
2256str->del(strings[1062]);
2257str->del(strings[1063]);
2258str->del(strings[1064]);
2259str->del(strings[1065]);
2260str->del(strings[1066]);
2261str->del(strings[1067]);
2262str->del(strings[1068]);
2263str->del(strings[1069]);
2264str->del(strings[1070]);
2265str->del(strings[1071]);
2266str->del(strings[1072]);
2267str->del(strings[1073]);
2268str->del(strings[1074]);
2269str->del(strings[1075]);
2270str->del(strings[1076]);
2271str->del(strings[1077]);
2272str->del(strings[1078]);
2273str->del(strings[1079]);
2274str->del(strings[1080]);
2275str->del(strings[1081]);
2276str->del(strings[1082]);
2277str->del(strings[1083]);
2278str->del(strings[1084]);
2279str->del(strings[1085]);
2280str->del(strings[1086]);
2281str->del(strings[1087]);
2282str->del(strings[1087]);
2283str->del(strings[1088]);
2284str->del(strings[1089]);
2285str->del(strings[1090]);
2286str->del(strings[1091]);
2287str->del(strings[1092]);
2288str->del(strings[1093]);
2289str->del(strings[1094]);
2290str->del(strings[1095]);
2291str->del(strings[1096]);
2292str->del(strings[1097]);
2293str->del(strings[1098]);
2294str->del(strings[1099]);
2295str->del(strings[1100]);
2296str->del(strings[1101]);
2297str->del(strings[1102]);
2298str->del(strings[1103]);
2299str->del(strings[1104]);
2300str->del(strings[1105]);
2301str->del(strings[1106]);
2302str->del(strings[1107]);
2303str->del(strings[1108]);
2304str->del(strings[1109]);
2305str->del(strings[1110]);
2306str->del(strings[1111]);
2307str->del(strings[1112]);
2308str->del(strings[1113]);
2309str->del(strings[1114]);
2310str->del(strings[1115]);
2311str->del(strings[1116]);
2312str->del(strings[1117]);
2313str->del(strings[1118]);
2314str->del(strings[1119]);
2315str->del(strings[1120]);
2316str->del(strings[1121]);
2317str->del(strings[1122]);
2318str->del(strings[1123]);
2319str->del(strings[1124]);
2320str->del(strings[1125]);
2321str->del(strings[1126]);
2322str->del(strings[1127]);
2323str->del(strings[1128]);
2324str->del(strings[1129]);
2325str->del(strings[1130]);
2326str->del(strings[1131]);
2327str->del(strings[1132]);
2328str->del(strings[1133]);
2329str->del(strings[1134]);
2330str->del(strings[1135]);
2331str->del(strings[1136]);
2332str->del(strings[1137]);
2333str->del(strings[1138]);
2334str->del(strings[1139]);
2335str->del(strings[1140]);
2336str->del(strings[1141]);
2337str->del(strings[1142]);
2338str->del(strings[1143]);
2339str->del(strings[1144]);
2340str->del(strings[1145]);
2341str->del(strings[1146]);
2342str->del(strings[1147]);
2343str->del(strings[1148]);
2344str->del(strings[1149]);
2345str->del(strings[1150]);
2346str->del(strings[1151]);
2347str->del(strings[1152]);
2348str->del(strings[1153]);
2349str->del(strings[1154]);
2350str->del(strings[1155]);
2351str->del(strings[1156]);
2352str->del(strings[1157]);
2353str->del(strings[1158]);
2354str->del(strings[1159]);
2355str->del(strings[1160]);
2356str->del(strings[1161]);
2357str->del(strings[1162]);
2358str->del(strings[1163]);
2359str->del(strings[1164]);
2360str->del(strings[1165]);
2361strings[1166] = str->add("e/desktop/background");
2362strings[1167] = str->add("e/widgets/border/default/border");
2363strings[1168] = str->add("e/widgets/border/shaped/border");
2364strings[1169] = str->add("e/widgets/border/noresize/border");
2365strings[1170] = str->add("e/widgets/border/dialog/border");
2366strings[1171] = str->add("e/widgets/border/noresize_dialog/border");
2367strings[1172] = str->add("e/widgets/border/pixel/border");
2368strings[1173] = str->add("e/pointer/enlightenment/default/color");
2369strings[1174] = str->add("e/pointer/enlightenment/default/mono");
2370strings[1175] = str->add("e/widgets/menu/default/background");
2371strings[1176] = str->add("e/widgets/menu/default/separator");
2372strings[1177] = str->add("e/widgets/menu/default/item_bg");
2373strings[1178] = str->add("e/widgets/menu/default/icon");
2374strings[1179] = str->add("e/widgets/menu/default/label");
2375strings[1180] = str->add("e/widgets/menu/default/submenu");
2376strings[1181] = str->add("e/widgets/menu/default/check");
2377strings[1182] = str->add("e/widgets/menu/default/radio");
2378strings[1183] = str->add("e/shelf/default/base");
2379strings[1184] = str->add("e/shelf/default/inset");
2380strings[1185] = str->add("e/shelf/default/plain");
2381strings[1186] = str->add("e/shelf/invisible/base");
2382strings[1187] = str->add("e/shelf/invisible/inset");
2383strings[1188] = str->add("e/shelf/invisible/plain");
2384strings[1189] = str->add("e/shelf/alternate/base");
2385strings[1190] = str->add("e/shelf/alternate/inset");
2386strings[1191] = str->add("e/shelf/alternate/plain");
2387strings[1192] = str->add("e/modules/start/main");
2388strings[1193] = str->add("e/modules/pager/popup");
2389strings[1194] = str->add("e/modules/pager/desk");
2390strings[1195] = str->add("e/modules/pager/window");
2391strings[1196] = str->add("e/modules/battery/main");
2392strings[1197] = str->add("e/modules/temperature/main");
2393strings[1198] = str->add("e/modules/clock/main");
2394strings[1199] = str->add("e/modules/cpufreq/main");
2395strings[1200] = str->add("e/widgets/winlist/main");
2396strings[1201] = str->add("e/widgets/winlist/item");
2397strings[1202] = str->add("e/modules/mixer/main");
2398strings[1203] = str->add("e/sys/logout");
2399strings[1204] = str->add("e/widgets/dialog/main");
2400strings[1205] = str->add("e/widgets/dialog/text");
2401strings[1206] = str->add("e/widgets/configure/main");
2402strings[1207] = str->add("e/widgets/border/default/move");
2403strings[1208] = str->add("e/widgets/border/default/resize");
2404strings[1209] = str->add("e/transpreview/0");
2405strings[1210] = str->add("e/transpreview/1");
2406strings[1211] = str->add("e/transitions/crossfade");
2407strings[1212] = str->add("e/transitions/vswipe");
2408strings[1213] = str->add("e/widgets/check");
2409strings[1214] = str->add("e/widgets/check_icon");
2410strings[1215] = str->add("e/widgets/radio");
2411strings[1216] = str->add("e/widgets/radio_icon");
2412strings[1217] = str->add("e/widgets/button");
2413strings[1218] = str->add("e/widgets/scrollframe");
2414strings[1219] = str->add("e/widgets/ilist");
2415strings[1220] = str->add("e/widgets/ilist_odd");
2416strings[1221] = str->add("e/widgets/ilist_header");
2417strings[1222] = str->add("e/widgets/ilist_header_odd");
2418strings[1223] = str->add("e/widgets/entry");
2419strings[1224] = str->add("e/widgets/entry/text");
2420strings[1225] = str->add("e/widgets/entry/cursor");
2421strings[1226] = str->add("e/widgets/entry/selection");
2422strings[1227] = str->add("e/widgets/preview");
2423strings[1228] = str->add("e/widgets/deskpreview/desk");
2424strings[1229] = str->add("e/widgets/color_well");
2425strings[1230] = str->add("e/widgets/spectrum");
2426strings[1231] = str->add("e/widgets/cslider");
2427strings[1232] = str->add("e/widgets/slider_vertical");
2428strings[1233] = str->add("e/widgets/slider_horizontal");
2429strings[1234] = str->add("e/widgets/frame");
2430strings[1235] = str->add("e/widgets/label");
2431strings[1236] = str->add("e/widgets/fontpreview");
2432strings[1237] = str->add("e/widgets/textblock");
2433strings[1238] = str->add("e/widgets/menu/default/submenu_bg");
2434strings[1239] = str->add("e/sys/halt");
2435strings[1240] = str->add("e/sys/reboot");
2436strings[1241] = str->add("e/sys/suspend");
2437strings[1242] = str->add("e/sys/hibernate");
2438strings[1243] = str->add("e/widgets/gradpreview");
2439strings[61] = str->add(strings[61]);
2440strings[1244] = str->add("invisible");
2441strings[1245] = str->add("alternate");
2442str->del(strings[1166]);
2443str->del(strings[1167]);
2444str->del(strings[1168]);
2445str->del(strings[1169]);
2446str->del(strings[1170]);
2447str->del(strings[1171]);
2448str->del(strings[1172]);
2449str->del(strings[1173]);
2450str->del(strings[1174]);
2451str->del(strings[1175]);
2452str->del(strings[1176]);
2453str->del(strings[1177]);
2454str->del(strings[1178]);
2455str->del(strings[1179]);
2456str->del(strings[1180]);
2457str->del(strings[1181]);
2458str->del(strings[1182]);
2459str->del(strings[1183]);
2460str->del(strings[1184]);
2461str->del(strings[1185]);
2462str->del(strings[1186]);
2463str->del(strings[1187]);
2464str->del(strings[1188]);
2465str->del(strings[1189]);
2466str->del(strings[1190]);
2467str->del(strings[1191]);
2468str->del(strings[1192]);
2469str->del(strings[1193]);
2470str->del(strings[1194]);
2471str->del(strings[1195]);
2472str->del(strings[1196]);
2473str->del(strings[1197]);
2474str->del(strings[1198]);
2475str->del(strings[1199]);
2476str->del(strings[1200]);
2477str->del(strings[1201]);
2478str->del(strings[1202]);
2479str->del(strings[1203]);
2480str->del(strings[1204]);
2481str->del(strings[1205]);
2482str->del(strings[1206]);
2483str->del(strings[1207]);
2484str->del(strings[1208]);
2485str->del(strings[1209]);
2486str->del(strings[1210]);
2487str->del(strings[1211]);
2488str->del(strings[1212]);
2489str->del(strings[1213]);
2490str->del(strings[1214]);
2491str->del(strings[1215]);
2492str->del(strings[1216]);
2493str->del(strings[1217]);
2494str->del(strings[1218]);
2495str->del(strings[1219]);
2496str->del(strings[1220]);
2497str->del(strings[1221]);
2498str->del(strings[1222]);
2499str->del(strings[1223]);
2500str->del(strings[1224]);
2501str->del(strings[1225]);
2502str->del(strings[1226]);
2503str->del(strings[1227]);
2504str->del(strings[1228]);
2505str->del(strings[1229]);
2506str->del(strings[1230]);
2507str->del(strings[1231]);
2508str->del(strings[1232]);
2509str->del(strings[1233]);
2510str->del(strings[1234]);
2511str->del(strings[1235]);
2512str->del(strings[1236]);
2513str->del(strings[1237]);
2514str->del(strings[1238]);
2515str->del(strings[1239]);
2516str->del(strings[1240]);
2517str->del(strings[1241]);
2518str->del(strings[1242]);
2519str->del(strings[1243]);
2520strings[1246] = str->add("e/desktop/background");
2521strings[1247] = str->add("e/modules/battery/main");
2522strings[1248] = str->add("e/modules/battery/popup");
2523strings[1249] = str->add("e/widgets/border/default/border");
2524strings[1250] = str->add("e/widgets/border/shaped/border");
2525strings[1251] = str->add("e/widgets/border/noresize/border");
2526strings[1252] = str->add("e/widgets/border/dialog/border");
2527strings[1253] = str->add("e/widgets/border/noresize_dialog/border");
2528strings[1254] = str->add("e/widgets/border/pixel/border");
2529strings[1255] = str->add("e/widgets/border/default/close");
2530strings[1256] = str->add("e/widgets/border/default/minimize");
2531strings[1257] = str->add("e/widgets/border/default/maximize");
2532strings[1258] = str->add("e/widgets/border/default/shade");
2533strings[1259] = str->add("e/widgets/border/default/stick");
2534strings[1260] = str->add("e/widgets/border/default/kill");
2535strings[1261] = str->add("e/widgets/border/default/locks");
2536strings[1262] = str->add("e/widgets/border/default/locks_user");
2537strings[1263] = str->add("e/widgets/border/default/locks_application");
2538strings[1264] = str->add("e/widgets/border/default/borderless");
2539strings[1265] = str->add("e/widgets/border/default/fullscreen");
2540strings[1266] = str->add("e/widgets/border/default/remember");
2541strings[1267] = str->add("e/widgets/border/default/skip_winlist");
2542strings[1268] = str->add("e/widgets/border/default/skip");
2543strings[1269] = str->add("e/widgets/border/default/skip_pager");
2544strings[1270] = str->add("e/widgets/border/default/sendto");
2545strings[1271] = str->add("e/widgets/border/default/stacking");
2546strings[1272] = str->add("e/widgets/border/default/stack_on_top");
2547strings[1273] = str->add("e/widgets/border/default/stack_normal");
2548strings[1274] = str->add("e/widgets/border/default/stack_below");
2549strings[1275] = str->add("e/widgets/border/default/properties");
2550strings[1276] = str->add("e/modules/clock/main");
2551strings[1277] = str->add("e/gadman/control");
2552strings[1278] = str->add("e/gadman/popup");
2553strings[1279] = str->add("e/gadman/full_bg");
2554strings[1280] = str->add("e/gadman/frame");
2555strings[1281] = str->add("e/modules/ibar/icon");
2556strings[1282] = str->add("e/modules/ibar/icon_overlay");
2557strings[1283] = str->add("e/modules/ibar/drop");
2558strings[1284] = str->add("e/modules/ibar/drop_overlay");
2559strings[1285] = str->add("e/widgets/menu/default/background");
2560strings[1286] = str->add("e/widgets/menu/default/separator");
2561strings[1287] = str->add("e/widgets/menu/default/item_bg");
2562strings[1288] = str->add("e/widgets/menu/default/submenu_bg");
2563strings[1289] = str->add("e/widgets/menu/default/check");
2564strings[1290] = str->add("e/widgets/menu/default/radio");
2565strings[1291] = str->add("e/widgets/menu/default/icon");
2566strings[1292] = str->add("e/widgets/menu/default/label");
2567strings[1293] = str->add("e/widgets/menu/default/submenu");
2568strings[1294] = str->add("e/modules/pager/popup");
2569strings[1295] = str->add("e/modules/pager/desk");
2570strings[1296] = str->add("e/modules/pager/window");
2571strings[1297] = str->add("e/widgets/border/default/resize");
2572strings[1298] = str->add("e/widgets/border/default/move");
2573strings[1299] = str->add("e/modules/temperature/main");
2574strings[1300] = str->add("e/error/main");
2575strings[1301] = str->add("e/modules/cpufreq/main");
2576strings[1302] = str->add("e/modules/ibox/icon");
2577strings[1303] = str->add("e/modules/ibox/icon_overlay");
2578strings[1304] = str->add("e/modules/ibox/drop");
2579strings[1305] = str->add("e/modules/ibox/drop_overlay");
2580strings[1306] = str->add("e/modules/start/main");
2581strings[1307] = str->add("e/widgets/winlist/main");
2582strings[1308] = str->add("e/widgets/winlist/item");
2583strings[1309] = str->add("e/transpreview/0");
2584strings[1310] = str->add("e/transpreview/1");
2585strings[1311] = str->add("e/transitions/crossfade");
2586strings[1312] = str->add("e/transitions/vswipe");
2587strings[1313] = str->add("e/widgets/dialog/main");
2588strings[1314] = str->add("e/widgets/dialog/text");
2589strings[1315] = str->add("e/widgets/configure/main");
2590strings[1316] = str->add("e/icons/enlightenment/e");
2591strings[1317] = str->add("e/icons/enlightenment/reset");
2592strings[1318] = str->add("e/icons/enlightenment/exit");
2593strings[1319] = str->add("e/icons/enlightenment/logout");
2594strings[1320] = str->add("e/icons/enlightenment/halt");
2595strings[1321] = str->add("e/icons/enlightenment/reboot");
2596strings[1322] = str->add("e/icons/enlightenment/suspend");
2597strings[1323] = str->add("e/icons/enlightenment/hibernate");
2598strings[1324] = str->add("e/icons/enlightenment/screen_setup");
2599strings[1325] = str->add("e/icons/enlightenment/themes");
2600strings[1326] = str->add("e/icons/enlightenment/colors");
2601strings[1327] = str->add("e/icons/enlightenment/windows");
2602strings[1328] = str->add("e/icons/enlightenment/lost_windows");
2603strings[1329] = str->add("e/icons/enlightenment/focus");
2604strings[1330] = str->add("e/icons/enlightenment/modules");
2605strings[1331] = str->add("e/icons/enlightenment/favorites");
2606strings[1332] = str->add("e/icons/enlightenment/desktops");
2607strings[1333] = str->add("e/icons/enlightenment/configuration");
2608strings[1334] = str->add("e/icons/enlightenment/intl");
2609strings[1335] = str->add("e/icons/enlightenment/system");
2610strings[1336] = str->add("e/icons/enlightenment/run");
2611strings[1337] = str->add("e/icons/enlightenment/directories");
2612strings[1338] = str->add("e/icons/enlightenment/fileman");
2613strings[1339] = str->add("e/icons/enlightenment/unknown");
2614strings[1340] = str->add("e/icons/widget/new_dialog");
2615strings[1341] = str->add("e/icons/widget/up_arrow");
2616strings[1342] = str->add("e/icons/widget/down_arrow");
2617strings[1343] = str->add("e/icons/widget/up_dir");
2618strings[1344] = str->add("e/icons/enlightenment/mouse");
2619strings[1345] = str->add("e/icons/enlightenment/mouse_left");
2620strings[1346] = str->add("e/icons/enlightenment/mouse_middle");
2621strings[1347] = str->add("e/icons/enlightenment/mouse_right");
2622strings[1348] = str->add("e/icons/enlightenment/mouse_extra");
2623strings[1349] = str->add("e/icons/enlightenment/mouse_wheel");
2624strings[1350] = str->add("e/icons/enlightenment/mouse_clean");
2625strings[1351] = str->add("e/icons/enlightenment/keys");
2626strings[1352] = str->add("e/icons/enlightenment/desklock");
2627strings[1353] = str->add("e/icons/enlightenment/desklock_menu");
2628strings[1354] = str->add("e/icons/enlightenment/regenerate_menus");
2629strings[1355] = str->add("e/icons/enlightenment/screen_resolution");
2630strings[1356] = str->add("e/icons/enlightenment/shelf");
2631strings[1357] = str->add("e/icons/enlightenment/fonts");
2632strings[1358] = str->add("e/icons/enlightenment/background");
2633strings[1359] = str->add("e/icons/enlightenment/icon_theme");
2634strings[1360] = str->add("e/icons/enlightenment/applications");
2635strings[1361] = str->add("e/icons/enlightenment/transitions");
2636strings[1362] = str->add("e/icons/enlightenment/performance");
2637strings[1363] = str->add("e/icons/enlightenment/startup");
2638strings[1364] = str->add("e/icons/enlightenment/winlist");
2639strings[1365] = str->add("e/icons/enlightenment/window_manipulation");
2640strings[1366] = str->add("e/icons/enlightenment/menus");
2641strings[1367] = str->add("e/icons/enlightenment/screen_normal");
2642strings[1368] = str->add("e/icons/enlightenment/screen_around");
2643strings[1369] = str->add("e/icons/enlightenment/screen_left");
2644strings[1370] = str->add("e/icons/enlightenment/screen_right");
2645strings[1371] = str->add("e/icons/enlightenment/screen_vflip");
2646strings[1372] = str->add("e/icons/enlightenment/screen_hflip");
2647strings[1373] = str->add("e/icons/enlightenment/shelf_position_bottom");
2648strings[1374] = str->add("e/icons/enlightenment/shelf_position_bottom_left");
2649strings[1375] = str->add("e/icons/enlightenment/shelf_position_bottom_right");
2650strings[1376] = str->add("e/icons/enlightenment/shelf_position_top");
2651strings[1377] = str->add("e/icons/enlightenment/shelf_position_top_left");
2652strings[1378] = str->add("e/icons/enlightenment/shelf_position_top_right");
2653strings[1379] = str->add("e/icons/enlightenment/shelf_position_left");
2654strings[1380] = str->add("e/icons/enlightenment/shelf_position_left_top");
2655strings[1381] = str->add("e/icons/enlightenment/shelf_position_left_bottom");
2656strings[1382] = str->add("e/icons/enlightenment/shelf_position_right");
2657strings[1383] = str->add("e/icons/enlightenment/shelf_position_right_top");
2658strings[1384] = str->add("e/icons/enlightenment/shelf_position_right_bottom");
2659strings[1385] = str->add("e/icons/enlightenment/shelf_bottom_desk");
2660strings[1386] = str->add("e/icons/enlightenment/shelf_custom");
2661strings[1387] = str->add("e/icons/enlightenment/shelf_dock");
2662strings[1388] = str->add("e/icons/enlightenment/shelf_menu_bar");
2663strings[1389] = str->add("e/icons/enlightenment/shelf_panel");
2664strings[1390] = str->add("e/icons/enlightenment/shelf_top_desk");
2665strings[1391] = str->add("e/icons/enlightenment/wallpaper_stretch");
2666strings[1392] = str->add("e/icons/enlightenment/wallpaper_tile");
2667strings[1393] = str->add("e/icons/enlightenment/wallpaper_center");
2668strings[1394] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in");
2669strings[1395] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out");
2670strings[1396] = str->add("e/icons/enlightenment/gradient_h");
2671strings[1397] = str->add("e/icons/enlightenment/gradient_v");
2672strings[1398] = str->add("e/icons/enlightenment/gradient_du");
2673strings[1399] = str->add("e/icons/enlightenment/gradient_dd");
2674strings[1400] = str->add("e/icons/enlightenment/gradient_rad");
2675strings[1401] = str->add("e/icons/enlightenment/advanced");
2676strings[1402] = str->add("e/icons/enlightenment/behavior");
2677strings[1403] = str->add("e/icons/enlightenment/appearance");
2678strings[1404] = str->add("e/icons/enlightenment/extensions");
2679strings[1405] = str->add("e/icons/enlightenment/imc");
2680strings[1406] = str->add("e/icons/enlightenment/file_icons");
2681strings[1407] = str->add("e/icons/enlightenment/menu_settings");
2682strings[1408] = str->add("e/icons/enlightenment/ibar_applications");
2683strings[1409] = str->add("e/icons/enlightenment/restart_applications");
2684strings[1410] = str->add("e/icons/enlightenment/startup_applications");
2685strings[1411] = str->add("e/icons/enlightenment/power_management");
2686strings[1412] = str->add("e/icons/enlightenment/screensaver");
2687strings[1413] = str->add("e/icons/enlightenment/window_remembers");
2688strings[1414] = str->add("e/pointer/enlightenment/default/color");
2689strings[1415] = str->add("e/pointer/enlightenment/default/mono");
2690strings[1416] = str->add("e/widgets/about/main");
2691strings[1417] = str->add("e/theme/about");
2692strings[1418] = str->add("e/widgets/entry");
2693strings[1419] = str->add("e/widgets/entry/text");
2694strings[1420] = str->add("e/widgets/entry/cursor");
2695strings[1421] = str->add("e/widgets/entry/selection");
2696strings[1422] = str->add("e/fileman/default/window/main");
2697strings[1423] = str->add("e/fileman/default/scrollframe");
2698strings[1424] = str->add("e/fileman/default/list/variable");
2699strings[1425] = str->add("e/fileman/default/list_odd/variable");
2700strings[1426] = str->add("e/fileman/default/list/fixed");
2701strings[1427] = str->add("e/fileman/default/list_odd/fixed");
2702strings[1428] = str->add("e/fileman/default/icon/fixed");
2703strings[1429] = str->add("e/fileman/default/icon/variable");
2704strings[1430] = str->add("e/fileman/default/overlay");
2705strings[1431] = str->add("e/fileman/default/list/drop_between");
2706strings[1432] = str->add("e/fileman/default/list/drop_in");
2707strings[1433] = str->add("e/fileman/desktop/scrollframe");
2708strings[1434] = str->add("e/fileman/desktop/icon/fixed");
2709strings[1435] = str->add("e/fileman/desktop/icon/variable");
2710strings[1436] = str->add("e/fileman/desktop/overlay");
2711strings[1437] = str->add("e/fileman/desktop/list/drop_between");
2712strings[1438] = str->add("e/fileman/desktop/list/drop_in");
2713strings[1439] = str->add("e/fileman/default/rubberband");
2714strings[1440] = str->add("e/icons/fileman/folder");
2715strings[1441] = str->add("e/icons/fileman/file");
2716strings[1442] = str->add("e/icons/fileman/home");
2717strings[1443] = str->add("e/icons/fileman/desktop");
2718strings[1444] = str->add("e/icons/fileman/hdd");
2719strings[1445] = str->add("e/icons/fileman/hd");
2720strings[1446] = str->add("e/icons/fileman/mime/application/pdf");
2721strings[1447] = str->add("e/icons/fileman/mime/text/x-csrc");
2722strings[1448] = str->add("e/icons/fileman/mime/text/x-chdr");
2723strings[1449] = str->add("e/icons/fileman/mime/application/x-object");
2724strings[1450] = str->add("e/icons/fileman/mime/application/x-shellscript");
2725strings[1451] = str->add("e/icons/fileman/mime/image/png");
2726strings[1452] = str->add("e/icons/fileman/mime/image/jpeg");
2727strings[1453] = str->add("e/icons/fileman/mime/video/x-msvideo");
2728strings[1454] = str->add("e/icons/fileman/mime/audio/mpeg");
2729strings[1455] = str->add("e/icons/fileman/mime/application/x-xcf");
2730strings[1456] = str->add("e/icons/fileman/mime/text/x-c++src");
2731strings[1457] = str->add("e/icons/fileman/mime/text/x-csharp");
2732strings[1458] = str->add("e/icons/fileman/mime/text/x-patch");
2733strings[1459] = str->add("e/icons/fileman/mime/application/msword");
2734strings[1460] = str->add("e/icons/fileman/mime/application/ogg");
2735strings[1461] = str->add("e/icons/fileman/mime/text/plain");
2736strings[1462] = str->add("e/icons/fileman/mime/application/x-bzip");
2737strings[1463] = str->add("e/icons/fileman/mime/application/x-deb");
2738strings[1464] = str->add("e/icons/fileman/mime/application/x-font-ttf");
2739strings[1465] = str->add("e/icons/fileman/mime/application/x-font-pcf");
2740strings[1466] = str->add("e/icons/fileman/mime/application/x-font-bdf");
2741strings[1467] = str->add("e/icons/fileman/mime/text/css");
2742strings[1468] = str->add("e/icons/fileman/mime/text/html");
2743strings[1468] = str->add(strings[1468]);
2744strings[1469] = str->add("e/icons/fileman/mime/application/zip");
2745strings[1470] = str->add("e/icons/fileman/mime/application/x-gzip");
2746strings[1471] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar");
2747strings[1472] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar");
2748strings[1473] = str->add("e/icons/fileman/mime/application/x-compressed-tar");
2749strings[1474] = str->add("e/icons/fileman/mime/application/x-tar");
2750strings[1475] = str->add("e/icons/fileman/mime/application/x-rar");
2751strings[1476] = str->add("e/icons/fileman/mime/video/mpeg");
2752strings[1477] = str->add("e/icons/fileman/mime/video");
2753strings[1478] = str->add("e/icons/fileman/mime/text");
2754strings[1479] = str->add("e/icons/fileman/mime/image");
2755strings[1480] = str->add("e/icons/fileman/mime/audio");
2756strings[1481] = str->add("e/fileman/default/button/open");
2757strings[1482] = str->add("e/fileman/default/button/copy");
2758strings[1483] = str->add("e/fileman/default/button/cut");
2759strings[1484] = str->add("e/fileman/default/button/paste");
2760strings[1485] = str->add("e/fileman/default/button/delete");
2761strings[1486] = str->add("e/fileman/default/button/rename");
2762strings[1487] = str->add("e/fileman/default/button/properties");
2763strings[1488] = str->add("e/fileman/default/button/arrange_name");
2764strings[1489] = str->add("e/fileman/default/button/arrange");
2765strings[1490] = str->add("e/fileman/default/button/arrange_time");
2766strings[1491] = str->add("e/fileman/default/button/new");
2767strings[1492] = str->add("e/fileman/default/button/new_dir");
2768strings[1493] = str->add("e/fileman/default/button/refresh");
2769strings[1494] = str->add("e/fileman/default/button/view_details");
2770strings[1495] = str->add("e/fileman/default/button/view_name");
2771strings[1496] = str->add("e/fileman/default/button/view");
2772strings[1497] = str->add("e/fileman/default/button/select");
2773strings[1498] = str->add("e/widgets/fileselector/main");
2774strings[1499] = str->add("e/widgets/check");
2775strings[1500] = str->add("e/widgets/check_icon");
2776strings[1501] = str->add("e/widgets/radio");
2777strings[1502] = str->add("e/widgets/radio_icon");
2778strings[1503] = str->add("e/widgets/frame");
2779strings[1504] = str->add("e/widgets/button");
2780strings[1505] = str->add("e/widgets/label");
2781strings[1506] = str->add("e/widgets/scrollframe");
2782strings[1507] = str->add("e/widgets/ilist");
2783strings[1508] = str->add("e/widgets/ilist_odd");
2784strings[1509] = str->add("e/widgets/ilist_header");
2785strings[1510] = str->add("e/widgets/tlist");
2786strings[1511] = str->add("e/widgets/tlist_odd");
2787strings[1512] = str->add("e/widgets/slider_vertical");
2788strings[1513] = str->add("e/widgets/slider_horizontal");
2789strings[1514] = str->add("e/widgets/exebuf/main");
2790strings[1515] = str->add("e/widgets/exebuf/item");
2791strings[1516] = str->add("e/desklock/background");
2792strings[1517] = str->add("e/desklock/login_box");
2793strings[1518] = str->add("e/widgets/textblock");
2794strings[1519] = str->add("e/shelf/default/base");
2795strings[1520] = str->add("e/shelf/default/inset");
2796strings[1521] = str->add("e/shelf/default/plain");
2797strings[1522] = str->add("e/shelf/alternate/base");
2798strings[1523] = str->add("e/shelf/alternate/inset");
2799strings[1524] = str->add("e/shelf/alternate/plain");
2800strings[1525] = str->add("e/shelf/invisible/base");
2801strings[1526] = str->add("e/shelf/invisible/inset");
2802strings[1527] = str->add("e/shelf/invisible/plain");
2803strings[1528] = str->add("e/widgets/preview");
2804strings[1529] = str->add("e/widgets/cslider");
2805strings[1530] = str->add("e/widgets/spectrum");
2806strings[1531] = str->add("e/widgets/color_well");
2807strings[1532] = str->add("e/sys/logout");
2808strings[1533] = str->add("e/sys/halt");
2809strings[1534] = str->add("e/sys/reboot");
2810strings[1535] = str->add("e/sys/suspend");
2811strings[1536] = str->add("e/sys/hibernate");
2812strings[1537] = str->add("e/widgets/deskpreview/desk");
2813strings[1538] = str->add("e/widgets/fontpreview");
2814strings[1539] = str->add("e/wizard/extra");
2815strings[1540] = str->add("e/wizard/main");
2816strings[1541] = str->add("e/toolbar/default/base");
2817strings[1542] = str->add("e/widgets/slidesel");
2818strings[1543] = str->add("e/modules/mixer/main");
2819strings[1544] = str->add("e/modules/connman/main");
2820strings[1545] = str->add("e/modules/connman/network");
2821strings[1546] = str->add("e/widgets/gradpreview");
2822str->del(strings[1246]);
2823str->del(strings[1247]);
2824str->del(strings[1248]);
2825str->del(strings[1249]);
2826str->del(strings[1250]);
2827str->del(strings[1251]);
2828str->del(strings[1252]);
2829str->del(strings[1253]);
2830str->del(strings[1254]);
2831str->del(strings[1255]);
2832str->del(strings[1256]);
2833str->del(strings[1257]);
2834str->del(strings[1258]);
2835str->del(strings[1259]);
2836str->del(strings[1260]);
2837str->del(strings[1261]);
2838str->del(strings[1262]);
2839str->del(strings[1263]);
2840str->del(strings[1264]);
2841str->del(strings[1265]);
2842str->del(strings[1266]);
2843str->del(strings[1267]);
2844str->del(strings[1268]);
2845str->del(strings[1269]);
2846str->del(strings[1270]);
2847str->del(strings[1271]);
2848str->del(strings[1272]);
2849str->del(strings[1273]);
2850str->del(strings[1274]);
2851str->del(strings[1275]);
2852str->del(strings[1276]);
2853str->del(strings[1277]);
2854str->del(strings[1278]);
2855str->del(strings[1279]);
2856str->del(strings[1280]);
2857str->del(strings[1281]);
2858str->del(strings[1282]);
2859str->del(strings[1283]);
2860str->del(strings[1284]);
2861str->del(strings[1285]);
2862str->del(strings[1286]);
2863str->del(strings[1287]);
2864str->del(strings[1288]);
2865str->del(strings[1289]);
2866str->del(strings[1290]);
2867str->del(strings[1291]);
2868str->del(strings[1292]);
2869str->del(strings[1293]);
2870str->del(strings[1294]);
2871str->del(strings[1295]);
2872str->del(strings[1296]);
2873str->del(strings[1297]);
2874str->del(strings[1298]);
2875str->del(strings[1299]);
2876str->del(strings[1300]);
2877str->del(strings[1301]);
2878str->del(strings[1302]);
2879str->del(strings[1303]);
2880str->del(strings[1304]);
2881str->del(strings[1305]);
2882str->del(strings[1306]);
2883str->del(strings[1307]);
2884str->del(strings[1308]);
2885str->del(strings[1309]);
2886str->del(strings[1310]);
2887str->del(strings[1311]);
2888str->del(strings[1312]);
2889str->del(strings[1313]);
2890str->del(strings[1314]);
2891str->del(strings[1315]);
2892str->del(strings[1316]);
2893str->del(strings[1317]);
2894str->del(strings[1318]);
2895str->del(strings[1319]);
2896str->del(strings[1320]);
2897str->del(strings[1321]);
2898str->del(strings[1322]);
2899str->del(strings[1323]);
2900str->del(strings[1324]);
2901str->del(strings[1325]);
2902str->del(strings[1326]);
2903str->del(strings[1327]);
2904str->del(strings[1328]);
2905str->del(strings[1329]);
2906str->del(strings[1330]);
2907str->del(strings[1331]);
2908str->del(strings[1332]);
2909str->del(strings[1333]);
2910str->del(strings[1334]);
2911str->del(strings[1335]);
2912str->del(strings[1336]);
2913str->del(strings[1337]);
2914str->del(strings[1338]);
2915str->del(strings[1339]);
2916str->del(strings[1340]);
2917str->del(strings[1341]);
2918str->del(strings[1342]);
2919str->del(strings[1343]);
2920str->del(strings[1344]);
2921str->del(strings[1345]);
2922str->del(strings[1346]);
2923str->del(strings[1347]);
2924str->del(strings[1348]);
2925str->del(strings[1349]);
2926str->del(strings[1350]);
2927str->del(strings[1351]);
2928str->del(strings[1352]);
2929str->del(strings[1353]);
2930str->del(strings[1354]);
2931str->del(strings[1355]);
2932str->del(strings[1356]);
2933str->del(strings[1357]);
2934str->del(strings[1358]);
2935str->del(strings[1359]);
2936str->del(strings[1360]);
2937str->del(strings[1361]);
2938str->del(strings[1362]);
2939str->del(strings[1363]);
2940str->del(strings[1364]);
2941str->del(strings[1365]);
2942str->del(strings[1366]);
2943str->del(strings[1367]);
2944str->del(strings[1368]);
2945str->del(strings[1369]);
2946str->del(strings[1370]);
2947str->del(strings[1371]);
2948str->del(strings[1372]);
2949str->del(strings[1373]);
2950str->del(strings[1374]);
2951str->del(strings[1375]);
2952str->del(strings[1376]);
2953str->del(strings[1377]);
2954str->del(strings[1378]);
2955str->del(strings[1379]);
2956str->del(strings[1380]);
2957str->del(strings[1381]);
2958str->del(strings[1382]);
2959str->del(strings[1383]);
2960str->del(strings[1384]);
2961str->del(strings[1385]);
2962str->del(strings[1386]);
2963str->del(strings[1387]);
2964str->del(strings[1388]);
2965str->del(strings[1389]);
2966str->del(strings[1390]);
2967str->del(strings[1391]);
2968str->del(strings[1392]);
2969str->del(strings[1393]);
2970str->del(strings[1394]);
2971str->del(strings[1395]);
2972str->del(strings[1396]);
2973str->del(strings[1397]);
2974str->del(strings[1398]);
2975str->del(strings[1399]);
2976str->del(strings[1400]);
2977str->del(strings[1401]);
2978str->del(strings[1402]);
2979str->del(strings[1403]);
2980str->del(strings[1404]);
2981str->del(strings[1405]);
2982str->del(strings[1406]);
2983str->del(strings[1407]);
2984str->del(strings[1408]);
2985str->del(strings[1409]);
2986str->del(strings[1410]);
2987str->del(strings[1411]);
2988str->del(strings[1412]);
2989str->del(strings[1413]);
2990str->del(strings[1414]);
2991str->del(strings[1415]);
2992str->del(strings[1416]);
2993str->del(strings[1417]);
2994str->del(strings[1418]);
2995str->del(strings[1419]);
2996str->del(strings[1420]);
2997str->del(strings[1421]);
2998str->del(strings[1422]);
2999str->del(strings[1423]);
3000str->del(strings[1424]);
3001str->del(strings[1425]);
3002str->del(strings[1426]);
3003str->del(strings[1427]);
3004str->del(strings[1428]);
3005str->del(strings[1429]);
3006str->del(strings[1430]);
3007str->del(strings[1431]);
3008str->del(strings[1432]);
3009str->del(strings[1433]);
3010str->del(strings[1434]);
3011str->del(strings[1435]);
3012str->del(strings[1436]);
3013str->del(strings[1437]);
3014str->del(strings[1438]);
3015str->del(strings[1439]);
3016str->del(strings[1440]);
3017str->del(strings[1441]);
3018str->del(strings[1442]);
3019str->del(strings[1443]);
3020str->del(strings[1444]);
3021str->del(strings[1445]);
3022str->del(strings[1446]);
3023str->del(strings[1447]);
3024str->del(strings[1448]);
3025str->del(strings[1449]);
3026str->del(strings[1450]);
3027str->del(strings[1451]);
3028str->del(strings[1452]);
3029str->del(strings[1453]);
3030str->del(strings[1454]);
3031str->del(strings[1455]);
3032str->del(strings[1456]);
3033str->del(strings[1457]);
3034str->del(strings[1458]);
3035str->del(strings[1459]);
3036str->del(strings[1460]);
3037str->del(strings[1461]);
3038str->del(strings[1462]);
3039str->del(strings[1463]);
3040str->del(strings[1464]);
3041str->del(strings[1465]);
3042str->del(strings[1466]);
3043str->del(strings[1467]);
3044str->del(strings[1468]);
3045str->del(strings[1468]);
3046str->del(strings[1469]);
3047str->del(strings[1470]);
3048str->del(strings[1471]);
3049str->del(strings[1472]);
3050str->del(strings[1473]);
3051str->del(strings[1474]);
3052str->del(strings[1475]);
3053str->del(strings[1476]);
3054str->del(strings[1477]);
3055str->del(strings[1478]);
3056str->del(strings[1479]);
3057str->del(strings[1480]);
3058str->del(strings[1481]);
3059str->del(strings[1482]);
3060str->del(strings[1483]);
3061str->del(strings[1484]);
3062str->del(strings[1485]);
3063str->del(strings[1486]);
3064str->del(strings[1487]);
3065str->del(strings[1488]);
3066str->del(strings[1489]);
3067str->del(strings[1490]);
3068str->del(strings[1491]);
3069str->del(strings[1492]);
3070str->del(strings[1493]);
3071str->del(strings[1494]);
3072str->del(strings[1495]);
3073str->del(strings[1496]);
3074str->del(strings[1497]);
3075str->del(strings[1498]);
3076str->del(strings[1499]);
3077str->del(strings[1500]);
3078str->del(strings[1501]);
3079str->del(strings[1502]);
3080str->del(strings[1503]);
3081str->del(strings[1504]);
3082str->del(strings[1505]);
3083str->del(strings[1506]);
3084str->del(strings[1507]);
3085str->del(strings[1508]);
3086str->del(strings[1509]);
3087str->del(strings[1510]);
3088str->del(strings[1511]);
3089str->del(strings[1512]);
3090str->del(strings[1513]);
3091str->del(strings[1514]);
3092str->del(strings[1515]);
3093str->del(strings[1516]);
3094str->del(strings[1517]);
3095str->del(strings[1518]);
3096str->del(strings[1519]);
3097str->del(strings[1520]);
3098str->del(strings[1521]);
3099str->del(strings[1522]);
3100str->del(strings[1523]);
3101str->del(strings[1524]);
3102str->del(strings[1525]);
3103str->del(strings[1526]);
3104str->del(strings[1527]);
3105str->del(strings[1528]);
3106str->del(strings[1529]);
3107str->del(strings[1530]);
3108str->del(strings[1531]);
3109str->del(strings[1532]);
3110str->del(strings[1533]);
3111str->del(strings[1534]);
3112str->del(strings[1535]);
3113str->del(strings[1536]);
3114str->del(strings[1537]);
3115str->del(strings[1538]);
3116str->del(strings[1539]);
3117str->del(strings[1540]);
3118str->del(strings[1541]);
3119str->del(strings[1542]);
3120str->del(strings[1543]);
3121str->del(strings[1544]);
3122str->del(strings[1545]);
3123str->del(strings[1546]);
3124strings[1547] = str->add("/usr/devel/share/enlightenment/data/images/test.png");
3125strings[1548] = str->add("/usr/devel/share/enlightenment/data/images/test.png//://(nil)");
3126strings[1547] = str->add(strings[1547]);
3127str->del(strings[1547]);
3128strings[1549] = str->add("/usr/devel/share/enlightenment/data/images/test.jpg");
3129strings[1550] = str->add("/usr/devel/share/enlightenment/data/images/test.jpg//://(nil)");
3130strings[1549] = str->add(strings[1549]);
3131str->del(strings[1549]);
3132strings[1551] = str->add("/usr/devel/share/enlightenment/data/images/test.edj");
3133strings[1552] = str->add("images/0");
3134strings[1553] = str->add("/usr/devel/share/enlightenment/data/images/test.edj//://images/0");
3135strings[1551] = str->add(strings[1551]);
3136strings[1552] = str->add(strings[1552]);
3137str->del(strings[1551]);
3138str->del(strings[1552]);
3139strings[373] = str->add(strings[373]);
3140strings[374] = str->add(strings[374]);
3141str->del(strings[373]);
3142str->del(strings[374]);
3143strings[1554] = str->add("en");
3144strings[1555] = str->add("US");
3145strings[1556] = str->add("UTF-8");
3146strings[1554] = str->add(strings[1554]);
3147strings[1557] = str->add("AU");
3148strings[1558] = str->add("utf8");
3149str->del(strings[1554]);
3150str->del(strings[1557]);
3151str->del(strings[1558]);
3152strings[1554] = str->add(strings[1554]);
3153strings[1559] = str->add("BW");
3154strings[1560] = str->add("utf8");
3155str->del(strings[1554]);
3156str->del(strings[1559]);
3157str->del(strings[1560]);
3158strings[1554] = str->add(strings[1554]);
3159strings[1561] = str->add("CA");
3160strings[1562] = str->add("utf8");
3161str->del(strings[1554]);
3162str->del(strings[1561]);
3163str->del(strings[1562]);
3164strings[1554] = str->add(strings[1554]);
3165strings[1563] = str->add("DK");
3166strings[1564] = str->add("utf8");
3167str->del(strings[1554]);
3168str->del(strings[1563]);
3169str->del(strings[1564]);
3170strings[1554] = str->add(strings[1554]);
3171strings[1565] = str->add("GB");
3172strings[1566] = str->add("utf8");
3173str->del(strings[1554]);
3174str->del(strings[1565]);
3175str->del(strings[1566]);
3176strings[1554] = str->add(strings[1554]);
3177strings[1567] = str->add("HK");
3178strings[1568] = str->add("utf8");
3179str->del(strings[1554]);
3180str->del(strings[1567]);
3181str->del(strings[1568]);
3182strings[1554] = str->add(strings[1554]);
3183strings[1569] = str->add("IE");
3184strings[1570] = str->add("utf8");
3185str->del(strings[1554]);
3186str->del(strings[1569]);
3187str->del(strings[1570]);
3188strings[1554] = str->add(strings[1554]);
3189strings[1571] = str->add("IN");
3190str->del(strings[1554]);
3191str->del(strings[1571]);
3192strings[1554] = str->add(strings[1554]);
3193strings[1572] = str->add("NZ");
3194strings[1573] = str->add("utf8");
3195str->del(strings[1554]);
3196str->del(strings[1572]);
3197str->del(strings[1573]);
3198strings[1554] = str->add(strings[1554]);
3199strings[1574] = str->add("PH");
3200strings[1575] = str->add("utf8");
3201str->del(strings[1554]);
3202str->del(strings[1574]);
3203str->del(strings[1575]);
3204strings[1554] = str->add(strings[1554]);
3205strings[1576] = str->add("SG");
3206strings[1577] = str->add("utf8");
3207str->del(strings[1554]);
3208str->del(strings[1576]);
3209str->del(strings[1577]);
3210strings[1554] = str->add(strings[1554]);
3211strings[1555] = str->add(strings[1555]);
3212strings[1578] = str->add("utf8");
3213str->del(strings[1554]);
3214str->del(strings[1555]);
3215str->del(strings[1578]);
3216str->del(strings[1554]);
3217str->del(strings[1555]);
3218str->del(strings[1556]);
3219strings[1579] = str->add("en");
3220strings[1580] = str->add("US");
3221strings[1581] = str->add("UTF-8");
3222str->del(strings[1579]);
3223str->del(strings[1580]);
3224str->del(strings[1581]);
3225strings[373] = str->add(strings[373]);
3226strings[374] = str->add(strings[374]);
3227str->del(strings[373]);
3228str->del(strings[374]);
3229strings[1582] = str->add("en");
3230strings[1583] = str->add("US");
3231strings[1584] = str->add("UTF-8");
3232str->del(strings[1582]);
3233str->del(strings[1583]);
3234str->del(strings[1584]);
3235strings[1585] = str->add("Window : Actions");
3236strings[1586] = str->add("Move");
3237strings[67] = str->add(strings[67]);
3238strings[1587] = str->add("Resize");
3239strings[69] = str->add(strings[69]);
3240strings[127] = str->add(strings[127]);
3241strings[1588] = str->add("Window Menu");
3242strings[71] = str->add(strings[71]);
3243strings[1589] = str->add("Raise");
3244strings[81] = str->add(strings[81]);
3245strings[1590] = str->add("Lower");
3246strings[82] = str->add(strings[82]);
3247strings[1591] = str->add("Close");
3248strings[84] = str->add(strings[84]);
3249strings[1592] = str->add("Kill");
3250strings[86] = str->add(strings[86]);
3251strings[1593] = str->add("Window : State");
3252strings[1594] = str->add("Sticky Mode Toggle");
3253strings[89] = str->add(strings[89]);
3254strings[1595] = str->add("Iconic Mode Toggle");
3255strings[91] = str->add(strings[91]);
3256strings[1596] = str->add("Fullscreen Mode Toggle");
3257strings[1597] = str->add("window_fullscreen_toggle");
3258strings[1598] = str->add("Maximize");
3259strings[93] = str->add(strings[93]);
3260strings[1599] = str->add("Maximize Vertically");
3261strings[93] = str->add(strings[93]);
3262strings[95] = str->add(strings[95]);
3263strings[1600] = str->add("Maximize Horizontally");
3264strings[93] = str->add(strings[93]);
3265strings[96] = str->add(strings[96]);
3266strings[1601] = str->add("Maximize Fullscreen");
3267strings[93] = str->add(strings[93]);
3268strings[1602] = str->add("fullscreen");
3269strings[1603] = str->add("Maximize Mode \"Smart\"");
3270strings[93] = str->add(strings[93]);
3271strings[162] = str->add(strings[162]);
3272strings[1604] = str->add("Maximize Mode \"Expand\"");
3273strings[93] = str->add(strings[93]);
3274strings[163] = str->add(strings[163]);
3275strings[1605] = str->add("Maximize Mode \"Fill\"");
3276strings[93] = str->add(strings[93]);
3277strings[1606] = str->add("fill");
3278strings[1607] = str->add("Shade Up Mode Toggle");
3279strings[98] = str->add(strings[98]);
3280strings[147] = str->add(strings[147]);
3281strings[1608] = str->add("Shade Down Mode Toggle");
3282strings[98] = str->add(strings[98]);
3283strings[1609] = str->add("down");
3284strings[1610] = str->add("Shade Left Mode Toggle");
3285strings[98] = str->add(strings[98]);
3286strings[1611] = str->add("left");
3287strings[1612] = str->add("Shade Right Mode Toggle");
3288strings[98] = str->add(strings[98]);
3289strings[1613] = str->add("right");
3290strings[1614] = str->add("Shade Mode Toggle");
3291strings[98] = str->add(strings[98]);
3292strings[1615] = str->add("Toggle Borderless State");
3293strings[1616] = str->add("window_borderless_toggle");
3294strings[1617] = str->add("Toggle Pinned State");
3295strings[1618] = str->add("window_pinned_toggle");
3296strings[1619] = str->add("Desktop");
3297strings[1620] = str->add("Flip Desktop Left");
3298strings[73] = str->add(strings[73]);
3299strings[74] = str->add(strings[74]);
3300strings[1621] = str->add("Flip Desktop Right");
3301strings[73] = str->add(strings[73]);
3302strings[76] = str->add(strings[76]);
3303strings[1622] = str->add("Flip Desktop Up");
3304strings[73] = str->add(strings[73]);
3305strings[78] = str->add(strings[78]);
3306strings[1623] = str->add("Flip Desktop Down");
3307strings[73] = str->add(strings[73]);
3308strings[80] = str->add(strings[80]);
3309strings[1624] = str->add("Flip Desktop By...");
3310strings[73] = str->add(strings[73]);
3311strings[1625] = str->add("syntax: X-offset Y-offset, example: -1 0");
3312strings[1626] = str->add("Show The Desktop");
3313strings[142] = str->add(strings[142]);
3314strings[1627] = str->add("Flip Desktop To...");
3315strings[1628] = str->add("desk_flip_to");
3316strings[1629] = str->add("syntax: X Y, example: 1 2");
3317strings[1630] = str->add("Flip Desktop Linearly...");
3318strings[99] = str->add(strings[99]);
3319strings[1631] = str->add("syntax: N-offset, example: -2");
3320strings[1632] = str->add("Switch To Desktop 0");
3321strings[103] = str->add(strings[103]);
3322strings[104] = str->add(strings[104]);
3323strings[1633] = str->add("Switch To Desktop 1");
3324strings[103] = str->add(strings[103]);
3325strings[101] = str->add(strings[101]);
3326strings[1634] = str->add("Switch To Desktop 2");
3327strings[103] = str->add(strings[103]);
3328strings[107] = str->add(strings[107]);
3329strings[1635] = str->add("Switch To Desktop 3");
3330strings[103] = str->add(strings[103]);
3331strings[109] = str->add(strings[109]);
3332strings[1636] = str->add("Switch To Desktop 4");
3333strings[103] = str->add(strings[103]);
3334strings[111] = str->add(strings[111]);
3335strings[1637] = str->add("Switch To Desktop 5");
3336strings[103] = str->add(strings[103]);
3337strings[113] = str->add(strings[113]);
3338strings[1638] = str->add("Switch To Desktop 6");
3339strings[103] = str->add(strings[103]);
3340strings[115] = str->add(strings[115]);
3341strings[1639] = str->add("Switch To Desktop 7");
3342strings[103] = str->add(strings[103]);
3343strings[117] = str->add(strings[117]);
3344strings[1640] = str->add("Switch To Desktop 8");
3345strings[103] = str->add(strings[103]);
3346strings[119] = str->add(strings[119]);
3347strings[1641] = str->add("Switch To Desktop 9");
3348strings[103] = str->add(strings[103]);
3349strings[120] = str->add(strings[120]);
3350strings[1642] = str->add("Switch To Desktop 10");
3351strings[103] = str->add(strings[103]);
3352strings[122] = str->add(strings[122]);
3353strings[1643] = str->add("Switch To Desktop 11");
3354strings[103] = str->add(strings[103]);
3355strings[124] = str->add(strings[124]);
3356strings[1644] = str->add("Switch To Desktop...");
3357strings[103] = str->add(strings[103]);
3358strings[1645] = str->add("syntax: N, example: 1");
3359strings[1646] = str->add("Flip Desktop Left (All Screens)");
3360strings[1647] = str->add("desk_flip_by_all");
3361strings[74] = str->add(strings[74]);
3362strings[1648] = str->add("Flip Desktop Right (All Screens)");
3363strings[1647] = str->add(strings[1647]);
3364strings[76] = str->add(strings[76]);
3365strings[1649] = str->add("Flip Desktop Up (All Screens)");
3366strings[1647] = str->add(strings[1647]);
3367strings[78] = str->add(strings[78]);
3368strings[1650] = str->add("Flip Desktop Down (All Screens)");
3369strings[1647] = str->add(strings[1647]);
3370strings[80] = str->add(strings[80]);
3371strings[1651] = str->add("Flip Desktop By... (All Screens)");
3372strings[1647] = str->add(strings[1647]);
3373strings[1625] = str->add(strings[1625]);
3374strings[1652] = str->add("Flip Desktop To... (All Screens)");
3375strings[1653] = str->add("desk_flip_to_all");
3376strings[1629] = str->add(strings[1629]);
3377strings[1654] = str->add("Flip Desktop Linearly... (All Screens)");
3378strings[1655] = str->add("desk_linear_flip_by_all");
3379strings[1631] = str->add(strings[1631]);
3380strings[1656] = str->add("Switch To Desktop 0 (All Screens)");
3381strings[1657] = str->add("desk_linear_flip_to_all");
3382strings[104] = str->add(strings[104]);
3383strings[1658] = str->add("Switch To Desktop 1 (All Screens)");
3384strings[1657] = str->add(strings[1657]);
3385strings[101] = str->add(strings[101]);
3386strings[1659] = str->add("Switch To Desktop 2 (All Screens)");
3387strings[1657] = str->add(strings[1657]);
3388strings[107] = str->add(strings[107]);
3389strings[1660] = str->add("Switch To Desktop 3 (All Screens)");
3390strings[1657] = str->add(strings[1657]);
3391strings[109] = str->add(strings[109]);
3392strings[1661] = str->add("Switch To Desktop 4 (All Screens)");
3393strings[1657] = str->add(strings[1657]);
3394strings[111] = str->add(strings[111]);
3395strings[1662] = str->add("Switch To Desktop 5 (All Screens)");
3396strings[1657] = str->add(strings[1657]);
3397strings[113] = str->add(strings[113]);
3398strings[1663] = str->add("Switch To Desktop 6 (All Screens)");
3399strings[1657] = str->add(strings[1657]);
3400strings[115] = str->add(strings[115]);
3401strings[1664] = str->add("Switch To Desktop 7 (All Screens)");
3402strings[1657] = str->add(strings[1657]);
3403strings[117] = str->add(strings[117]);
3404strings[1665] = str->add("Switch To Desktop 8 (All Screens)");
3405strings[1657] = str->add(strings[1657]);
3406strings[119] = str->add(strings[119]);
3407strings[1666] = str->add("Switch To Desktop 9 (All Screens)");
3408strings[1657] = str->add(strings[1657]);
3409strings[120] = str->add(strings[120]);
3410strings[1667] = str->add("Switch To Desktop 10 (All Screens)");
3411strings[1657] = str->add(strings[1657]);
3412strings[122] = str->add(strings[122]);
3413strings[1668] = str->add("Switch To Desktop 11 (All Screens)");
3414strings[1657] = str->add(strings[1657]);
3415strings[124] = str->add(strings[124]);
3416strings[1669] = str->add("Switch To Desktop... (All Screens)");
3417strings[1657] = str->add(strings[1657]);
3418strings[1645] = str->add(strings[1645]);
3419strings[1670] = str->add("Screen");
3420strings[1671] = str->add("Send Mouse To Screen 0");
3421strings[144] = str->add(strings[144]);
3422strings[104] = str->add(strings[104]);
3423strings[1672] = str->add("Send Mouse To Screen 1");
3424strings[144] = str->add(strings[144]);
3425strings[101] = str->add(strings[101]);
3426strings[1673] = str->add("Send Mouse To Screen...");
3427strings[144] = str->add(strings[144]);
3428strings[1674] = str->add("syntax: N, example: 0");
3429strings[1675] = str->add("Send Mouse Forward 1 Screen");
3430strings[143] = str->add(strings[143]);
3431strings[101] = str->add(strings[101]);
3432strings[1676] = str->add("Send Mouse Back 1 Screen");
3433strings[143] = str->add(strings[143]);
3434strings[100] = str->add(strings[100]);
3435strings[1677] = str->add("Send Mouse Forward/Back Screens...");
3436strings[143] = str->add(strings[143]);
3437strings[1631] = str->add(strings[1631]);
3438strings[1678] = str->add("Move To...");
3439strings[1679] = str->add("window_move_to");
3440strings[1680] = str->add("syntax: [ ,-]X [ ,-]Y or * [ ,-]Y or [ , -]X *, example: -1 1");
3441strings[1681] = str->add("Move By...");
3442strings[1682] = str->add("window_move_by");
3443strings[1625] = str->add(strings[1625]);
3444strings[1683] = str->add("Resize By...");
3445strings[1684] = str->add("window_resize_by");
3446strings[1685] = str->add("syntax: W H, example: 100 150");
3447strings[1686] = str->add("Push in Direction...");
3448strings[1687] = str->add("window_push");
3449strings[1688] = str->add("syntax: direction, example: up, down, left, right");
3450strings[1689] = str->add("Drag Icon...");
3451strings[168] = str->add(strings[168]);
3452strings[1690] = str->add("Window : Moving");
3453strings[1691] = str->add("To Next Desktop");
3454strings[1692] = str->add("window_desk_move_by");
3455strings[76] = str->add(strings[76]);
3456strings[1693] = str->add("To Previous Desktop");
3457strings[1692] = str->add(strings[1692]);
3458strings[74] = str->add(strings[74]);
3459strings[1694] = str->add("By Desktop #...");
3460strings[1692] = str->add(strings[1692]);
3461strings[1695] = str->add("syntax: X-offset Y-offset, example: -2 2");
3462strings[1696] = str->add("To Desktop...");
3463strings[1697] = str->add("window_desk_move_to");
3464strings[1698] = str->add("syntax: X Y, example: 0 1");
3465strings[1699] = str->add("Show Main Menu");
3466strings[65] = str->add(strings[65]);
3467strings[66] = str->add(strings[66]);
3468strings[1700] = str->add("Show Favorites Menu");
3469strings[65] = str->add(strings[65]);
3470strings[70] = str->add(strings[70]);
3471strings[1701] = str->add("Show All Applications Menu");
3472strings[65] = str->add(strings[65]);
3473strings[1702] = str->add("all");
3474strings[1703] = str->add("Show Clients Menu");
3475strings[65] = str->add(strings[65]);
3476strings[68] = str->add(strings[68]);
3477strings[1704] = str->add("Show Menu...");
3478strings[65] = str->add(strings[65]);
3479strings[1705] = str->add("syntax: MenuName, example: MyMenu");
3480strings[1706] = str->add("Launch");
3481strings[1707] = str->add("Defined Command");
3482strings[129] = str->add(strings[129]);
3483strings[1708] = str->add("syntax: CommandName, example: /usr/bin/xmms");
3484strings[1709] = str->add("Application");
3485strings[1710] = str->add("app");
3486strings[1711] = str->add("syntax: , example:");
3487strings[1712] = str->add("Enlightenment");
3488strings[1713] = str->add("Restart");
3489strings[135] = str->add(strings[135]);
3490strings[1714] = str->add("Exit");
3491strings[1715] = str->add("exit");
3492strings[1716] = str->add("Log Out");
3493strings[137] = str->add(strings[137]);
3494strings[1717] = str->add("Exit Immediately");
3495strings[1718] = str->add("exit_now");
3496strings[1719] = str->add("Shut Down Immediately");
3497strings[1720] = str->add("halt_now");
3498strings[1721] = str->add("System");
3499strings[1722] = str->add("Shut Down");
3500strings[1723] = str->add("halt");
3501strings[1724] = str->add("Reboot");
3502strings[1725] = str->add("reboot");
3503strings[1726] = str->add("Suspend");
3504strings[1727] = str->add("suspend");
3505strings[1728] = str->add("Suspend to Disk");
3506strings[1729] = str->add("hibernate");
3507strings[1730] = str->add("Desktop Lock");
3508strings[140] = str->add(strings[140]);
3509strings[1731] = str->add("Cleanup Windows");
3510strings[1732] = str->add("cleanup_windows");
3511strings[1733] = str->add("Generic : Actions");
3512strings[1734] = str->add("Delayed Action");
3513strings[1735] = str->add("delayed_action");
3514strings[1736] = str->add("[0.0 exec xterm] [0.3 exec xev]");
3515strings[65] = str->add(strings[65]);
3516strings[66] = str->add(strings[66]);
3517strings[67] = str->add(strings[67]);
3518strings[65] = str->add(strings[65]);
3519strings[68] = str->add(strings[68]);
3520strings[69] = str->add(strings[69]);
3521strings[65] = str->add(strings[65]);
3522strings[70] = str->add(strings[70]);
3523strings[71] = str->add(strings[71]);
3524strings[72] = str->add(strings[72]);
3525strings[73] = str->add(strings[73]);
3526strings[74] = str->add(strings[74]);
3527strings[75] = str->add(strings[75]);
3528strings[73] = str->add(strings[73]);
3529strings[76] = str->add(strings[76]);
3530strings[77] = str->add(strings[77]);
3531strings[73] = str->add(strings[73]);
3532strings[78] = str->add(strings[78]);
3533strings[79] = str->add(strings[79]);
3534strings[73] = str->add(strings[73]);
3535strings[80] = str->add(strings[80]);
3536strings[77] = str->add(strings[77]);
3537strings[81] = str->add(strings[81]);
3538strings[79] = str->add(strings[79]);
3539strings[82] = str->add(strings[82]);
3540strings[83] = str->add(strings[83]);
3541strings[84] = str->add(strings[84]);
3542strings[85] = str->add(strings[85]);
3543strings[86] = str->add(strings[86]);
3544strings[87] = str->add(strings[87]);
3545strings[71] = str->add(strings[71]);
3546strings[88] = str->add(strings[88]);
3547strings[89] = str->add(strings[89]);
3548strings[90] = str->add(strings[90]);
3549strings[91] = str->add(strings[91]);
3550strings[92] = str->add(strings[92]);
3551strings[93] = str->add(strings[93]);
3552strings[94] = str->add(strings[94]);
3553strings[93] = str->add(strings[93]);
3554strings[95] = str->add(strings[95]);
3555strings[94] = str->add(strings[94]);
3556strings[93] = str->add(strings[93]);
3557strings[96] = str->add(strings[96]);
3558strings[97] = str->add(strings[97]);
3559strings[98] = str->add(strings[98]);
3560strings[72] = str->add(strings[72]);
3561strings[99] = str->add(strings[99]);
3562strings[100] = str->add(strings[100]);
3563strings[75] = str->add(strings[75]);
3564strings[99] = str->add(strings[99]);
3565strings[101] = str->add(strings[101]);
3566strings[102] = str->add(strings[102]);
3567strings[103] = str->add(strings[103]);
3568strings[104] = str->add(strings[104]);
3569strings[105] = str->add(strings[105]);
3570strings[103] = str->add(strings[103]);
3571strings[101] = str->add(strings[101]);
3572strings[106] = str->add(strings[106]);
3573strings[103] = str->add(strings[103]);
3574strings[107] = str->add(strings[107]);
3575strings[108] = str->add(strings[108]);
3576strings[103] = str->add(strings[103]);
3577strings[109] = str->add(strings[109]);
3578strings[110] = str->add(strings[110]);
3579strings[103] = str->add(strings[103]);
3580strings[111] = str->add(strings[111]);
3581strings[112] = str->add(strings[112]);
3582strings[103] = str->add(strings[103]);
3583strings[113] = str->add(strings[113]);
3584strings[114] = str->add(strings[114]);
3585strings[103] = str->add(strings[103]);
3586strings[115] = str->add(strings[115]);
3587strings[116] = str->add(strings[116]);
3588strings[103] = str->add(strings[103]);
3589strings[117] = str->add(strings[117]);
3590strings[118] = str->add(strings[118]);
3591strings[103] = str->add(strings[103]);
3592strings[119] = str->add(strings[119]);
3593strings[94] = str->add(strings[94]);
3594strings[103] = str->add(strings[103]);
3595strings[120] = str->add(strings[120]);
3596strings[121] = str->add(strings[121]);
3597strings[103] = str->add(strings[103]);
3598strings[122] = str->add(strings[122]);
3599strings[123] = str->add(strings[123]);
3600strings[103] = str->add(strings[103]);
3601strings[124] = str->add(strings[124]);
3602strings[125] = str->add(strings[125]);
3603strings[65] = str->add(strings[65]);
3604strings[66] = str->add(strings[66]);
3605strings[126] = str->add(strings[126]);
3606strings[65] = str->add(strings[65]);
3607strings[70] = str->add(strings[70]);
3608strings[127] = str->add(strings[127]);
3609strings[65] = str->add(strings[65]);
3610strings[66] = str->add(strings[66]);
3611strings[127] = str->add(strings[127]);
3612strings[65] = str->add(strings[65]);
3613strings[68] = str->add(strings[68]);
3614strings[127] = str->add(strings[127]);
3615strings[65] = str->add(strings[65]);
3616strings[70] = str->add(strings[70]);
3617strings[128] = str->add(strings[128]);
3618strings[129] = str->add(strings[129]);
3619strings[130] = str->add(strings[130]);
3620strings[131] = str->add(strings[131]);
3621strings[49] = str->add(strings[49]);
3622strings[132] = str->add(strings[132]);
3623strings[131] = str->add(strings[131]);
3624strings[49] = str->add(strings[49]);
3625strings[133] = str->add(strings[133]);
3626strings[134] = str->add(strings[134]);
3627strings[135] = str->add(strings[135]);
3628strings[136] = str->add(strings[136]);
3629strings[137] = str->add(strings[137]);
3630strings[138] = str->add(strings[138]);
3631strings[50] = str->add(strings[50]);
3632strings[139] = str->add(strings[139]);
3633strings[140] = str->add(strings[140]);
3634strings[141] = str->add(strings[141]);
3635strings[142] = str->add(strings[142]);
3636strings[72] = str->add(strings[72]);
3637strings[143] = str->add(strings[143]);
3638strings[100] = str->add(strings[100]);
3639strings[75] = str->add(strings[75]);
3640strings[143] = str->add(strings[143]);
3641strings[101] = str->add(strings[101]);
3642strings[102] = str->add(strings[102]);
3643strings[144] = str->add(strings[144]);
3644strings[104] = str->add(strings[104]);
3645strings[105] = str->add(strings[105]);
3646strings[144] = str->add(strings[144]);
3647strings[101] = str->add(strings[101]);
3648strings[106] = str->add(strings[106]);
3649strings[144] = str->add(strings[144]);
3650strings[107] = str->add(strings[107]);
3651strings[108] = str->add(strings[108]);
3652strings[144] = str->add(strings[144]);
3653strings[109] = str->add(strings[109]);
3654strings[145] = str->add(strings[145]);
3655strings[146] = str->add(strings[146]);
3656strings[98] = str->add(strings[98]);
3657strings[147] = str->add(strings[147]);
3658strings[148] = str->add(strings[148]);
3659strings[146] = str->add(strings[146]);
3660strings[98] = str->add(strings[98]);
3661strings[147] = str->add(strings[147]);
3662strings[149] = str->add(strings[149]);
3663strings[146] = str->add(strings[146]);
3664strings[150] = str->add(strings[150]);
3665strings[151] = str->add(strings[151]);
3666strings[152] = str->add(strings[152]);
3667strings[146] = str->add(strings[146]);
3668strings[150] = str->add(strings[150]);
3669strings[153] = str->add(strings[153]);
3670strings[154] = str->add(strings[154]);
3671strings[146] = str->add(strings[146]);
3672strings[71] = str->add(strings[71]);
3673strings[155] = str->add(strings[155]);
3674strings[156] = str->add(strings[156]);
3675strings[71] = str->add(strings[71]);
3676strings[157] = str->add(strings[157]);
3677strings[158] = str->add(strings[158]);
3678strings[84] = str->add(strings[84]);
3679strings[154] = str->add(strings[154]);
3680strings[158] = str->add(strings[158]);
3681strings[86] = str->add(strings[86]);
3682strings[159] = str->add(strings[159]);
3683strings[160] = str->add(strings[160]);
3684strings[93] = str->add(strings[93]);
3685strings[161] = str->add(strings[161]);
3686strings[160] = str->add(strings[160]);
3687strings[93] = str->add(strings[93]);
3688strings[162] = str->add(strings[162]);
3689strings[154] = str->add(strings[154]);
3690strings[160] = str->add(strings[160]);
3691strings[93] = str->add(strings[93]);
3692strings[163] = str->add(strings[163]);
3693strings[155] = str->add(strings[155]);
3694strings[164] = str->add(strings[164]);
3695strings[91] = str->add(strings[91]);
3696strings[155] = str->add(strings[155]);
3697strings[165] = str->add(strings[165]);
3698strings[98] = str->add(strings[98]);
3699strings[147] = str->add(strings[147]);
3700strings[155] = str->add(strings[155]);
3701strings[166] = str->add(strings[166]);
3702strings[82] = str->add(strings[82]);
3703strings[167] = str->add(strings[167]);
3704strings[156] = str->add(strings[156]);
3705strings[168] = str->add(strings[168]);
3706strings[167] = str->add(strings[167]);
3707strings[146] = str->add(strings[146]);
3708strings[67] = str->add(strings[67]);
3709strings[169] = str->add(strings[169]);
3710strings[146] = str->add(strings[146]);
3711strings[67] = str->add(strings[67]);
3712strings[170] = str->add(strings[170]);
3713strings[167] = str->add(strings[167]);
3714strings[171] = str->add(strings[171]);
3715strings[69] = str->add(strings[69]);
3716strings[172] = str->add(strings[172]);
3717strings[1737] = str->add("mouse,in");
3718strings[171] = str->add(strings[171]);
3719strings[1738] = str->add("pointer_resize_push");
3720strings[1739] = str->add("resize_tl");
3721strings[1740] = str->add("mouse,out");
3722strings[171] = str->add(strings[171]);
3723strings[1741] = str->add("pointer_resize_pop");
3724strings[1739] = str->add(strings[1739]);
3725strings[167] = str->add(strings[167]);
3726strings[173] = str->add(strings[173]);
3727strings[69] = str->add(strings[69]);
3728strings[174] = str->add(strings[174]);
3729strings[1737] = str->add(strings[1737]);
3730strings[173] = str->add(strings[173]);
3731strings[1738] = str->add(strings[1738]);
3732strings[1742] = str->add("resize_t");
3733strings[1740] = str->add(strings[1740]);
3734strings[173] = str->add(strings[173]);
3735strings[1741] = str->add(strings[1741]);
3736strings[1742] = str->add(strings[1742]);
3737strings[167] = str->add(strings[167]);
3738strings[175] = str->add(strings[175]);
3739strings[69] = str->add(strings[69]);
3740strings[176] = str->add(strings[176]);
3741strings[1737] = str->add(strings[1737]);
3742strings[175] = str->add(strings[175]);
3743strings[1738] = str->add(strings[1738]);
3744strings[1743] = str->add("resize_tr");
3745strings[1740] = str->add(strings[1740]);
3746strings[175] = str->add(strings[175]);
3747strings[1741] = str->add(strings[1741]);
3748strings[1743] = str->add(strings[1743]);
3749strings[167] = str->add(strings[167]);
3750strings[177] = str->add(strings[177]);
3751strings[69] = str->add(strings[69]);
3752strings[97] = str->add(strings[97]);
3753strings[1737] = str->add(strings[1737]);
3754strings[177] = str->add(strings[177]);
3755strings[1738] = str->add(strings[1738]);
3756strings[1744] = str->add("resize_r");
3757strings[1740] = str->add(strings[1740]);
3758strings[177] = str->add(strings[177]);
3759strings[1741] = str->add(strings[1741]);
3760strings[1744] = str->add(strings[1744]);
3761strings[167] = str->add(strings[167]);
3762strings[178] = str->add(strings[178]);
3763strings[69] = str->add(strings[69]);
3764strings[179] = str->add(strings[179]);
3765strings[1737] = str->add(strings[1737]);
3766strings[178] = str->add(strings[178]);
3767strings[1738] = str->add(strings[1738]);
3768strings[1745] = str->add("resize_br");
3769strings[1740] = str->add(strings[1740]);
3770strings[178] = str->add(strings[178]);
3771strings[1741] = str->add(strings[1741]);
3772strings[1745] = str->add(strings[1745]);
3773strings[167] = str->add(strings[167]);
3774strings[180] = str->add(strings[180]);
3775strings[69] = str->add(strings[69]);
3776strings[181] = str->add(strings[181]);
3777strings[1737] = str->add(strings[1737]);
3778strings[180] = str->add(strings[180]);
3779strings[1738] = str->add(strings[1738]);
3780strings[1746] = str->add("resize_b");
3781strings[1740] = str->add(strings[1740]);
3782strings[180] = str->add(strings[180]);
3783strings[1741] = str->add(strings[1741]);
3784strings[1746] = str->add(strings[1746]);
3785strings[167] = str->add(strings[167]);
3786strings[182] = str->add(strings[182]);
3787strings[69] = str->add(strings[69]);
3788strings[183] = str->add(strings[183]);
3789strings[1737] = str->add(strings[1737]);
3790strings[182] = str->add(strings[182]);
3791strings[1738] = str->add(strings[1738]);
3792strings[1747] = str->add("resize_bl");
3793strings[1740] = str->add(strings[1740]);
3794strings[182] = str->add(strings[182]);
3795strings[1741] = str->add(strings[1741]);
3796strings[1747] = str->add(strings[1747]);
3797strings[167] = str->add(strings[167]);
3798strings[184] = str->add(strings[184]);
3799strings[69] = str->add(strings[69]);
3800strings[139] = str->add(strings[139]);
3801strings[1737] = str->add(strings[1737]);
3802strings[184] = str->add(strings[184]);
3803strings[1738] = str->add(strings[1738]);
3804strings[1748] = str->add("resize_l");
3805strings[1740] = str->add(strings[1740]);
3806strings[184] = str->add(strings[184]);
3807strings[1741] = str->add(strings[1741]);
3808strings[1748] = str->add(strings[1748]);
3809strings[169] = str->add(strings[169]);
3810strings[185] = str->add(strings[185]);
3811strings[69] = str->add(strings[69]);
3812strings[170] = str->add(strings[170]);
3813strings[186] = str->add(strings[186]);
3814strings[185] = str->add(strings[185]);
3815strings[67] = str->add(strings[67]);
3816strings[187] = str->add(strings[187]);
3817strings[185] = str->add(strings[185]);
3818strings[67] = str->add(strings[67]);
3819strings[170] = str->add(strings[170]);
3820strings[99] = str->add(strings[99]);
3821strings[101] = str->add(strings[101]);
3822strings[99] = str->add(strings[99]);
3823strings[101] = str->add(strings[101]);
3824strings[99] = str->add(strings[99]);
3825strings[101] = str->add(strings[101]);
3826strings[99] = str->add(strings[99]);
3827strings[100] = str->add(strings[100]);
3828strings[99] = str->add(strings[99]);
3829strings[100] = str->add(strings[100]);
3830strings[99] = str->add(strings[99]);
3831strings[100] = str->add(strings[100]);
3832strings[99] = str->add(strings[99]);
3833strings[101] = str->add(strings[101]);
3834strings[99] = str->add(strings[99]);
3835strings[101] = str->add(strings[101]);
3836strings[99] = str->add(strings[99]);
3837strings[101] = str->add(strings[101]);
3838strings[99] = str->add(strings[99]);
3839strings[100] = str->add(strings[100]);
3840strings[99] = str->add(strings[99]);
3841strings[100] = str->add(strings[100]);
3842strings[99] = str->add(strings[99]);
3843strings[100] = str->add(strings[100]);
3844strings[1749] = str->add("Set As Background");
3845strings[1750] = str->add("enlightenment/background");
3846strings[7] = str->add(strings[7]);
3847strings[61] = str->add(strings[61]);
3848strings[1751] = str->add("resize");
3849strings[1752] = str->add("show");
3850strings[1753] = str->add("base/theme/pointer");
3851str->del(strings[1751]);
3852str->del(strings[1752]);
3853strings[64] = str->add(strings[64]);
3854strings[1754] = str->add("e/pointer/enlightenment/default/mono");
3855strings[1754] = str->add(strings[1754]);
3856strings[1755] = str->add("load");
3857strings[64] = str->add(strings[64]);
3858strings[1756] = str->add("images/41");
3859strings[1757] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/41");
3860strings[64] = str->add(strings[64]);
3861strings[1756] = str->add(strings[1756]);
3862strings[61] = str->add(strings[61]);
3863strings[361] = str->add(strings[361]);
3864strings[362] = str->add(strings[362]);
3865strings[361] = str->add(strings[361]);
3866str->del(strings[361]);
3867strings[362] = str->add(strings[362]);
3868str->del(strings[362]);
3869strings[1758] = str->add("Container 0");
3870strings[1759] = str->add("Zone 0");
3871strings[361] = str->add(strings[361]);
3872strings[362] = str->add(strings[362]);
3873strings[361] = str->add(strings[361]);
3874str->del(strings[361]);
3875strings[362] = str->add(strings[362]);
3876str->del(strings[362]);
3877strings[1760] = str->add("Desktop 0, 0");
3878strings[1761] = str->add("Desktop 0, 1");
3879strings[1762] = str->add("Desktop 1, 0");
3880strings[1763] = str->add("Desktop 1, 1");
3881strings[1764] = str->add("Desktop 2, 0");
3882strings[1765] = str->add("Desktop 2, 1");
3883strings[1766] = str->add("Desktop 3, 0");
3884strings[1767] = str->add("Desktop 3, 1");
3885strings[1768] = str->add("Desktop 4, 0");
3886strings[1769] = str->add("Desktop 4, 1");
3887strings[1770] = str->add("edje_cc");
3888strings[1771] = str->add("logo_shad.png");
3889strings[1772] = str->add("shad.png");
3890strings[1773] = str->add("tex.png");
3891strings[1774] = str->add("ref.png");
3892strings[1775] = str->add("bar_l.png");
3893strings[1776] = str->add("bar_r.png");
3894strings[1777] = str->add("bar_l_sh.png");
3895strings[1778] = str->add("bar_r_sh.png");
3896strings[1779] = str->add("sm_loop_eintro_121.png");
3897strings[1780] = str->add("sm_loop_eintro_123.png");
3898strings[1781] = str->add("sm_loop_eintro_125.png");
3899strings[1782] = str->add("sm_loop_eintro_127.png");
3900strings[1783] = str->add("sm_loop_eintro_129.png");
3901strings[1784] = str->add("sm_loop_eintro_131.png");
3902strings[1785] = str->add("sm_loop_eintro_133.png");
3903strings[1786] = str->add("sm_loop_eintro_135.png");
3904strings[1787] = str->add("sm_loop_eintro_137.png");
3905strings[1788] = str->add("sm_loop_eintro_139.png");
3906strings[1789] = str->add("sm_loop_eintro_141.png");
3907strings[1790] = str->add("sm_loop_eintro_143.png");
3908strings[1791] = str->add("sm_loop_eintro_145.png");
3909strings[1792] = str->add("sm_loop_eintro_147.png");
3910strings[1793] = str->add("sm_loop_eintro_149.png");
3911strings[1794] = str->add("sm_loop_eintro_151.png");
3912strings[1795] = str->add("sm_loop_eintro_153.png");
3913strings[1796] = str->add("sm_loop_eintro_155.png");
3914strings[1797] = str->add("sm_loop_eintro_157.png");
3915strings[1798] = str->add("sm_loop_eintro_159.png");
3916strings[1799] = str->add("sm_loop_eintro_161.png");
3917strings[1800] = str->add("sm_loop_eintro_163.png");
3918strings[1801] = str->add("sm_loop_eintro_165.png");
3919strings[1802] = str->add("sm_loop_eintro_167.png");
3920strings[1803] = str->add("sm_loop_eintro_169.png");
3921strings[1804] = str->add("sm_loop_eintro_171.png");
3922strings[1805] = str->add("sm_loop_eintro_173.png");
3923strings[1806] = str->add("sm_loop_eintro_175.png");
3924strings[1807] = str->add("sm_loop_eintro_177.png");
3925strings[1808] = str->add("sm_loop_eintro_179.png");
3926strings[1809] = str->add("sm_loop_eintro_181.png");
3927strings[1810] = str->add("sm_loop_eintro_183.png");
3928strings[1811] = str->add("sm_loop_eintro_185.png");
3929strings[1812] = str->add("sm_loop_eintro_187.png");
3930strings[1813] = str->add("sm_loop_eintro_189.png");
3931strings[1814] = str->add("sm_loop_eintro_191.png");
3932strings[1815] = str->add("sm_loop_eintro_193.png");
3933strings[1816] = str->add("sm_loop_eintro_195.png");
3934strings[1817] = str->add("sm_loop_eintro_197.png");
3935strings[1818] = str->add("sm_loop_eintro_199.png");
3936strings[1819] = str->add("sm_loop_eintro_201.png");
3937strings[1820] = str->add("sm_loop_eintro_203.png");
3938strings[1821] = str->add("sm_loop_eintro_205.png");
3939strings[1822] = str->add("sm_loop_eintro_207.png");
3940strings[1823] = str->add("sm_loop_eintro_209.png");
3941strings[1824] = str->add("sm_loop_eintro_211.png");
3942strings[1825] = str->add("sm_loop_eintro_213.png");
3943strings[1826] = str->add("sm_loop_eintro_215.png");
3944strings[1827] = str->add("sm_loop_eintro_217.png");
3945strings[1828] = str->add("sm_loop_eintro_219.png");
3946strings[1829] = str->add("sm_loop_eintro_221.png");
3947strings[1830] = str->add("sm_loop_eintro_223.png");
3948strings[1831] = str->add("sm_loop_eintro_225.png");
3949strings[1832] = str->add("sm_loop_eintro_227.png");
3950strings[1833] = str->add("sm_loop_eintro_229.png");
3951strings[1834] = str->add("sm_loop_eintro_231.png");
3952strings[1835] = str->add("sm_loop_eintro_233.png");
3953strings[1836] = str->add("sm_loop_eintro_235.png");
3954strings[1837] = str->add("sm_loop_eintro_237.png");
3955strings[1838] = str->add("sm_loop_eintro_239.png");
3956strings[1839] = str->add("e/desktop/background");
3957strings[7] = str->add(strings[7]);
3958strings[1839] = str->add(strings[1839]);
3959str->del(strings[1839]);
3960strings[7] = str->add(strings[7]);
3961strings[1839] = str->add(strings[1839]);
3962strings[1840] = str->add("ref1_1");
3963strings[1841] = str->add("show");
3964strings[1842] = str->add("");
3965strings[1843] = str->add("default2");
3966strings[1844] = str->add("ref1_2");
3967strings[61] = str->add(strings[61]);
3968strings[1845] = str->add("ref2_1");
3969strings[1841] = str->add(strings[1841]);
3970strings[1842] = str->add(strings[1842]);
3971strings[1843] = str->add(strings[1843]);
3972strings[1846] = str->add("ref2_2");
3973strings[61] = str->add(strings[61]);
3974strings[1847] = str->add("ref3_1");
3975strings[1841] = str->add(strings[1841]);
3976strings[1842] = str->add(strings[1842]);
3977strings[1843] = str->add(strings[1843]);
3978strings[1848] = str->add("ref3_2");
3979strings[61] = str->add(strings[61]);
3980strings[1849] = str->add("ref4_1");
3981strings[1841] = str->add(strings[1841]);
3982strings[1842] = str->add(strings[1842]);
3983strings[1843] = str->add(strings[1843]);
3984strings[1850] = str->add("ref4_2");
3985strings[61] = str->add(strings[61]);
3986strings[1851] = str->add("logo_animate");
3987strings[1841] = str->add(strings[1841]);
3988strings[1842] = str->add(strings[1842]);
3989strings[61] = str->add(strings[61]);
3990strings[1852] = str->add("background_image");
3991strings[61] = str->add(strings[61]);
3992strings[1853] = str->add("shad");
3993strings[61] = str->add(strings[61]);
3994strings[1854] = str->add("logo_shad");
3995strings[61] = str->add(strings[61]);
3996strings[1855] = str->add("logo");
3997strings[61] = str->add(strings[61]);
3998strings[1856] = str->add("bar_l_sh");
3999strings[61] = str->add(strings[61]);
4000strings[1857] = str->add("bar_r_sh");
4001strings[61] = str->add(strings[61]);
4002strings[1858] = str->add("bar_l1");
4003strings[61] = str->add(strings[61]);
4004strings[1843] = str->add(strings[1843]);
4005strings[1859] = str->add("bar_l2");
4006strings[61] = str->add(strings[61]);
4007strings[1843] = str->add(strings[1843]);
4008strings[1860] = str->add("bar_r1");
4009strings[61] = str->add(strings[61]);
4010strings[1843] = str->add(strings[1843]);
4011strings[1861] = str->add("bar_r2");
4012strings[61] = str->add(strings[61]);
4013strings[1843] = str->add(strings[1843]);
4014strings[1862] = str->add("bar_l");
4015strings[61] = str->add(strings[61]);
4016strings[1863] = str->add("bar_r");
4017strings[61] = str->add(strings[61]);
4018strings[1839] = str->add(strings[1839]);
4019strings[1755] = str->add(strings[1755]);
4020strings[1864] = str->add("resize");
4021strings[1841] = str->add(strings[1841]);
4022strings[7] = str->add(strings[7]);
4023strings[1865] = str->add("images/2");
4024strings[1866] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/2");
4025strings[7] = str->add(strings[7]);
4026strings[1865] = str->add(strings[1865]);
4027strings[7] = str->add(strings[7]);
4028strings[1867] = str->add("images/1");
4029strings[1868] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/1");
4030strings[7] = str->add(strings[7]);
4031strings[1867] = str->add(strings[1867]);
4032strings[7] = str->add(strings[7]);
4033strings[1869] = str->add("images/67");
4034strings[1870] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/67");
4035strings[7] = str->add(strings[7]);
4036strings[1869] = str->add(strings[1869]);
4037strings[7] = str->add(strings[7]);
4038strings[1552] = str->add(strings[1552]);
4039strings[1871] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/0");
4040strings[7] = str->add(strings[7]);
4041strings[1552] = str->add(strings[1552]);
4042strings[7] = str->add(strings[7]);
4043strings[1872] = str->add("images/4");
4044strings[1873] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/4");
4045strings[7] = str->add(strings[7]);
4046strings[1872] = str->add(strings[1872]);
4047strings[7] = str->add(strings[7]);
4048strings[1874] = str->add("images/6");
4049strings[1875] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/6");
4050strings[7] = str->add(strings[7]);
4051strings[1874] = str->add(strings[1874]);
4052strings[7] = str->add(strings[7]);
4053strings[1876] = str->add("images/5");
4054strings[1877] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/5");
4055strings[7] = str->add(strings[7]);
4056strings[1876] = str->add(strings[1876]);
4057strings[7] = str->add(strings[7]);
4058strings[1878] = str->add("images/7");
4059strings[1879] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/7");
4060strings[7] = str->add(strings[7]);
4061strings[1878] = str->add(strings[1878]);
4062strings[7] = str->add(strings[7]);
4063strings[1880] = str->add("images/3");
4064strings[1881] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/3");
4065strings[7] = str->add(strings[7]);
4066strings[1880] = str->add(strings[1880]);
4067strings[7] = str->add(strings[7]);
4068strings[1880] = str->add(strings[1880]);
4069strings[7] = str->add(strings[7]);
4070strings[1880] = str->add(strings[1880]);
4071strings[7] = str->add(strings[7]);
4072strings[1880] = str->add(strings[1880]);
4073strings[1882] = str->add("/home/cedric/.e/e/applications/startup/.order");
4074str->del(strings[1882]);
4075strings[1883] = str->add("/usr/devel/lib/enlightenment/modules/start/linux-gnu-x86_64/module.so");
4076strings[1883] = str->add(strings[1883]);
4077strings[59] = str->add(strings[59]);
4078strings[1884] = str->add("/usr/devel/lib/enlightenment/modules/start");
4079str->del(strings[1883]);
4080strings[1885] = str->add("/usr/devel/lib/enlightenment/modules/ibar/linux-gnu-x86_64/module.so");
4081strings[1885] = str->add(strings[1885]);
4082strings[58] = str->add(strings[58]);
4083strings[1886] = str->add("/usr/devel/lib/enlightenment/modules/ibar");
4084str->del(strings[1885]);
4085strings[104] = str->add(strings[104]);
4086strings[61] = str->add(strings[61]);
4087strings[339] = str->add(strings[339]);
4088strings[339] = str->add(strings[339]);
4089strings[61] = str->add(strings[61]);
4090strings[1887] = str->add("/usr/devel/lib/enlightenment/modules/ibox/linux-gnu-x86_64/module.so");
4091strings[1887] = str->add(strings[1887]);
4092strings[57] = str->add(strings[57]);
4093strings[1888] = str->add("/usr/devel/lib/enlightenment/modules/ibox");
4094str->del(strings[1887]);
4095strings[104] = str->add(strings[104]);
4096strings[338] = str->add(strings[338]);
4097strings[1889] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow/linux-gnu-x86_64/module.so");
4098strings[1889] = str->add(strings[1889]);
4099strings[56] = str->add(strings[56]);
4100strings[1890] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow");
4101str->del(strings[1889]);
4102strings[1891] = str->add("appearance");
4103strings[1892] = str->add("Appearance");
4104strings[1893] = str->add("enlightenment/appearance");
4105strings[56] = str->add(strings[56]);
4106strings[1894] = str->add("Dropshadow");
4107strings[1895] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow/e-module-dropshadow.edj");
4108strings[1896] = str->add("/usr/devel/lib/enlightenment/modules/clock/linux-gnu-x86_64/module.so");
4109strings[1896] = str->add(strings[1896]);
4110strings[55] = str->add(strings[55]);
4111strings[1897] = str->add("/usr/devel/lib/enlightenment/modules/clock");
4112str->del(strings[1896]);
4113strings[1898] = str->add("/usr/devel/lib/enlightenment/modules/battery/linux-gnu-x86_64/module.so");
4114strings[1898] = str->add(strings[1898]);
4115strings[54] = str->add(strings[54]);
4116strings[1899] = str->add("/usr/devel/lib/enlightenment/modules/battery");
4117str->del(strings[1898]);
4118strings[1900] = str->add("advanced");
4119strings[1901] = str->add("Advanced");
4120strings[1902] = str->add("enlightenment/advanced");
4121strings[54] = str->add(strings[54]);
4122strings[1903] = str->add("Battery Meter");
4123strings[1904] = str->add("/usr/devel/lib/enlightenment/modules/battery/e-module-battery.edj");
4124strings[1905] = str->add("/usr/devel/lib/enlightenment/modules/cpufreq/linux-gnu-x86_64/module.so");
4125strings[1905] = str->add(strings[1905]);
4126strings[53] = str->add(strings[53]);
4127strings[1906] = str->add("/usr/devel/lib/enlightenment/modules/cpufreq");
4128str->del(strings[1905]);
4129strings[1907] = str->add("/usr/devel/lib/enlightenment/modules/temperature/linux-gnu-x86_64/module.so");
4130strings[1907] = str->add(strings[1907]);
4131strings[52] = str->add(strings[52]);
4132strings[1908] = str->add("/usr/devel/lib/enlightenment/modules/temperature");
4133str->del(strings[1907]);
4134strings[340] = str->add(strings[340]);
4135strings[1909] = str->add("/usr/devel/lib/enlightenment/modules/pager/linux-gnu-x86_64/module.so");
4136strings[1909] = str->add(strings[1909]);
4137strings[51] = str->add(strings[51]);
4138strings[1910] = str->add("/usr/devel/lib/enlightenment/modules/pager");
4139str->del(strings[1909]);
4140strings[51] = str->add(strings[51]);
4141strings[1911] = str->add("Pager");
4142strings[1912] = str->add("enlightenment/pager");
4143strings[1911] = str->add(strings[1911]);
4144strings[1913] = str->add("Show Pager Popup");
4145strings[1914] = str->add("pager_show");
4146strings[1915] = str->add("<none>");
4147strings[1916] = str->add("Popup Desk Right");
4148strings[1917] = str->add("pager_switch");
4149strings[1613] = str->add(strings[1613]);
4150strings[1918] = str->add("Popup Desk Left");
4151strings[1917] = str->add(strings[1917]);
4152strings[1611] = str->add(strings[1611]);
4153strings[1919] = str->add("Popup Desk Up");
4154strings[1917] = str->add(strings[1917]);
4155strings[147] = str->add(strings[147]);
4156strings[1920] = str->add("Popup Desk Down");
4157strings[1917] = str->add(strings[1917]);
4158strings[1609] = str->add(strings[1609]);
4159strings[50] = str->add(strings[50]);
4160strings[49] = str->add(strings[49]);
4161strings[48] = str->add(strings[48]);
4162strings[47] = str->add(strings[47]);
4163strings[46] = str->add(strings[46]);
4164strings[45] = str->add(strings[45]);
4165strings[44] = str->add(strings[44]);
4166strings[43] = str->add(strings[43]);
4167strings[42] = str->add(strings[42]);
4168strings[41] = str->add(strings[41]);
4169strings[40] = str->add(strings[40]);
4170strings[39] = str->add(strings[39]);
4171strings[38] = str->add(strings[38]);
4172strings[37] = str->add(strings[37]);
4173strings[36] = str->add(strings[36]);
4174strings[35] = str->add(strings[35]);
4175strings[34] = str->add(strings[34]);
4176strings[33] = str->add(strings[33]);
4177strings[32] = str->add(strings[32]);
4178strings[31] = str->add(strings[31]);
4179strings[30] = str->add(strings[30]);
4180strings[29] = str->add(strings[29]);
4181strings[28] = str->add(strings[28]);
4182strings[27] = str->add(strings[27]);
4183strings[26] = str->add(strings[26]);
4184strings[25] = str->add(strings[25]);
4185strings[24] = str->add(strings[24]);
4186strings[23] = str->add(strings[23]);
4187strings[22] = str->add(strings[22]);
4188strings[21] = str->add(strings[21]);
4189strings[20] = str->add(strings[20]);
4190strings[19] = str->add(strings[19]);
4191strings[18] = str->add(strings[18]);
4192strings[17] = str->add(strings[17]);
4193strings[16] = str->add(strings[16]);
4194strings[15] = str->add(strings[15]);
4195strings[14] = str->add(strings[14]);
4196strings[13] = str->add(strings[13]);
4197strings[12] = str->add(strings[12]);
4198strings[11] = str->add(strings[11]);
4199strings[1921] = str->add("/usr/devel/lib/enlightenment/modules/note/linux-gnu-x86_64/module.so");
4200strings[1921] = str->add(strings[1921]);
4201strings[10] = str->add(strings[10]);
4202strings[1922] = str->add("/usr/devel/lib/enlightenment/modules/note");
4203str->del(strings[1921]);
4204strings[1923] = str->add("/usr/devel/lib/enlightenment/modules/gadman/linux-gnu-x86_64/module.so");
4205strings[1923] = str->add(strings[1923]);
4206strings[60] = str->add(strings[60]);
4207strings[1924] = str->add("/usr/devel/lib/enlightenment/modules/gadman");
4208str->del(strings[1923]);
4209strings[60] = str->add(strings[60]);
4210strings[1925] = str->add("Gadgets");
4211strings[1926] = str->add("/usr/devel/lib/enlightenment/modules/gadman/e-module-gadman.edj");
4212strings[60] = str->add(strings[60]);
4213strings[344] = str->add(strings[344]);
4214strings[361] = str->add(strings[361]);
4215strings[362] = str->add(strings[362]);
4216strings[361] = str->add(strings[361]);
4217str->del(strings[361]);
4218strings[362] = str->add(strings[362]);
4219str->del(strings[362]);
4220strings[1927] = str->add("base/theme/gadman");
4221strings[64] = str->add(strings[64]);
4222strings[1928] = str->add("e/gadman/full_bg");
4223str->del(strings[64]);
4224str->del(strings[1928]);
4225strings[469] = str->add(strings[469]);
4226strings[1929] = str->add("e/gadman/full_bg");
4227strings[1929] = str->add(strings[1929]);
4228strings[1755] = str->add(strings[1755]);
4229strings[1930] = str->add("mouse,down,*");
4230strings[1931] = str->add("bg");
4231strings[1932] = str->add("program,stop");
4232strings[1933] = str->add("hide");
4233strings[1864] = str->add(strings[1864]);
4234strings[1841] = str->add(strings[1841]);
4235strings[64] = str->add(strings[64]);
4236strings[1934] = str->add("e/gadman/control");
4237str->del(strings[64]);
4238str->del(strings[1934]);
4239strings[469] = str->add(strings[469]);
4240strings[1935] = str->add("e/gadman/control");
4241strings[1935] = str->add(strings[1935]);
4242strings[1755] = str->add(strings[1755]);
4243strings[167] = str->add(strings[167]);
4244strings[1936] = str->add("overlay");
4245strings[169] = str->add(strings[169]);
4246strings[1936] = str->add(strings[1936]);
4247strings[186] = str->add(strings[186]);
4248strings[1936] = str->add(strings[1936]);
4249strings[167] = str->add(strings[167]);
4250strings[1937] = str->add("h1");
4251strings[169] = str->add(strings[169]);
4252strings[1937] = str->add(strings[1937]);
4253strings[167] = str->add(strings[167]);
4254strings[1938] = str->add("v2");
4255strings[169] = str->add(strings[169]);
4256strings[1938] = str->add(strings[1938]);
4257strings[167] = str->add(strings[167]);
4258strings[1939] = str->add("h2");
4259strings[169] = str->add(strings[169]);
4260strings[1939] = str->add(strings[1939]);
4261strings[167] = str->add(strings[167]);
4262strings[1940] = str->add("v1");
4263strings[169] = str->add(strings[169]);
4264strings[1940] = str->add(strings[1940]);
4265strings[1864] = str->add(strings[1864]);
4266strings[469] = str->add(strings[469]);
4267strings[1935] = str->add(strings[1935]);
4268strings[1755] = str->add(strings[1755]);
4269strings[167] = str->add(strings[167]);
4270strings[1936] = str->add(strings[1936]);
4271strings[169] = str->add(strings[169]);
4272strings[1936] = str->add(strings[1936]);
4273strings[186] = str->add(strings[186]);
4274strings[1936] = str->add(strings[1936]);
4275strings[167] = str->add(strings[167]);
4276strings[1937] = str->add(strings[1937]);
4277strings[169] = str->add(strings[169]);
4278strings[1937] = str->add(strings[1937]);
4279strings[167] = str->add(strings[167]);
4280strings[1938] = str->add(strings[1938]);
4281strings[169] = str->add(strings[169]);
4282strings[1938] = str->add(strings[1938]);
4283strings[167] = str->add(strings[167]);
4284strings[1939] = str->add(strings[1939]);
4285strings[169] = str->add(strings[169]);
4286strings[1939] = str->add(strings[1939]);
4287strings[167] = str->add(strings[167]);
4288strings[1940] = str->add(strings[1940]);
4289strings[169] = str->add(strings[169]);
4290strings[1940] = str->add(strings[1940]);
4291strings[1864] = str->add(strings[1864]);
4292strings[1926] = str->add(strings[1926]);
4293strings[1925] = str->add(strings[1925]);
4294strings[1941] = str->add("Show/hide gadgets");
4295strings[1942] = str->add("gadman_toggle");
4296strings[1943] = str->add("g");
4297strings[1942] = str->add(strings[1942]);
4298strings[361] = str->add(strings[361]);
4299strings[362] = str->add(strings[362]);
4300strings[361] = str->add(strings[361]);
4301str->del(strings[361]);
4302strings[362] = str->add(strings[362]);
4303str->del(strings[362]);
4304strings[61] = str->add(strings[61]);
4305strings[335] = str->add(strings[335]);
4306strings[1864] = str->add(strings[1864]);
4307strings[1944] = str->add("base/theme/shelf");
4308str->del(strings[1864]);
4309strings[64] = str->add(strings[64]);
4310strings[1945] = str->add("e/shelf/default/base");
4311strings[1945] = str->add(strings[1945]);
4312strings[1755] = str->add(strings[1755]);
4313strings[1841] = str->add(strings[1841]);
4314strings[335] = str->add(strings[335]);
4315strings[1946] = str->add("e.swallow.content");
4316strings[1947] = str->add("size_request");
4317strings[1948] = str->add("min_size_request");
4318strings[64] = str->add(strings[64]);
4319strings[1949] = str->add("images/42");
4320strings[1950] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/42");
4321strings[64] = str->add(strings[64]);
4322strings[1949] = str->add(strings[1949]);
4323strings[1951] = str->add("e,state,orientation,top");
4324strings[1952] = str->add("e");
4325str->del(strings[1755]);
4326str->del(strings[1841]);
4327str->del(strings[1951]);
4328str->del(strings[1952]);
4329strings[1953] = str->add("e,state,orientation,bottom_left");
4330strings[1954] = str->add("e");
4331str->del(strings[1953]);
4332str->del(strings[1954]);
4333strings[1864] = str->add(strings[1864]);
4334strings[1955] = str->add("base/theme/modules/start");
4335strings[1956] = str->add("base/theme/modules");
4336strings[64] = str->add(strings[64]);
4337strings[1957] = str->add("e/modules/start/main");
4338strings[1957] = str->add(strings[1957]);
4339strings[1755] = str->add(strings[1755]);
4340strings[1958] = str->add("e,state,unfocused");
4341strings[1959] = str->add("e");
4342strings[59] = str->add(strings[59]);
4343strings[64] = str->add(strings[64]);
4344strings[1960] = str->add("e/shelf/default/plain");
4345strings[1960] = str->add(strings[1960]);
4346strings[1755] = str->add(strings[1755]);
4347strings[1961] = str->add("e,state,orientation,bottom_left");
4348strings[1959] = str->add(strings[1959]);
4349str->del(strings[1755]);
4350strings[336] = str->add(strings[336]);
4351strings[1841] = str->add(strings[1841]);
4352strings[1841] = str->add(strings[1841]);
4353str->del(strings[336]);
4354strings[336] = str->add(strings[336]);
4355strings[1962] = str->add("base/theme/modules/pager");
4356strings[64] = str->add(strings[64]);
4357strings[1963] = str->add("e/modules/pager/desk");
4358strings[1963] = str->add(strings[1963]);
4359strings[64] = str->add(strings[64]);
4360strings[1755] = str->add(strings[1755]);
4361strings[1760] = str->add(strings[1760]);
4362strings[1841] = str->add(strings[1841]);
4363strings[64] = str->add(strings[64]);
4364strings[1964] = str->add("images/63");
4365strings[1965] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/63");
4366strings[64] = str->add(strings[64]);
4367strings[1964] = str->add(strings[1964]);
4368strings[64] = str->add(strings[64]);
4369strings[1966] = str->add("images/62");
4370strings[1967] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/62");
4371strings[64] = str->add(strings[64]);
4372strings[1966] = str->add(strings[1966]);
4373strings[64] = str->add(strings[64]);
4374strings[1968] = str->add("images/64");
4375strings[1969] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/64");
4376strings[64] = str->add(strings[64]);
4377strings[1968] = str->add(strings[1968]);
4378strings[64] = str->add(strings[64]);
4379strings[1970] = str->add("images/66");
4380strings[1971] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/66");
4381strings[64] = str->add(strings[64]);
4382strings[1970] = str->add(strings[1970]);
4383str->del(strings[64]);
4384strings[379] = str->add(strings[379]);
4385strings[1972] = str->add("Sans:style=Bold");
4386strings[1973] = str->add("Edje-Vera-Bold");
4387strings[1974] = str->add("Bitstream");
4388strings[1975] = str->add("Bitstream Vera Sans");
4389strings[1976] = str->add("bold");
4390strings[90] = str->add(strings[90]);
4391strings[1977] = str->add("normal");
4392strings[1842] = str->add(strings[1842]);
4393strings[104] = str->add(strings[104]);
4394strings[104] = str->add(strings[104]);
4395strings[104] = str->add(strings[104]);
4396strings[104] = str->add(strings[104]);
4397strings[1978] = str->add("p");
4398strings[104] = str->add(strings[104]);
4399strings[1979] = str->add("ascii");
4400strings[104] = str->add(strings[104]);
4401strings[1980] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraBI.ttf");
4402strings[1974] = str->add(strings[1974]);
4403strings[1975] = str->add(strings[1975]);
4404strings[1976] = str->add(strings[1976]);
4405strings[90] = str->add(strings[90]);
4406strings[1977] = str->add(strings[1977]);
4407strings[1842] = str->add(strings[1842]);
4408strings[104] = str->add(strings[104]);
4409strings[104] = str->add(strings[104]);
4410strings[104] = str->add(strings[104]);
4411strings[104] = str->add(strings[104]);
4412strings[1978] = str->add(strings[1978]);
4413strings[104] = str->add(strings[104]);
4414strings[1981] = str->add("fcd8859");
4415strings[1982] = str->add("15");
4416strings[1980] = str->add(strings[1980]);
4417strings[1974] = str->add(strings[1974]);
4418strings[1975] = str->add(strings[1975]);
4419strings[1976] = str->add(strings[1976]);
4420strings[90] = str->add(strings[90]);
4421strings[1977] = str->add(strings[1977]);
4422strings[1842] = str->add(strings[1842]);
4423strings[104] = str->add(strings[104]);
4424strings[104] = str->add(strings[104]);
4425strings[104] = str->add(strings[104]);
4426strings[104] = str->add(strings[104]);
4427strings[1978] = str->add(strings[1978]);
4428strings[104] = str->add(strings[104]);
4429strings[1983] = str->add("iso8859");
4430strings[101] = str->add(strings[101]);
4431strings[1980] = str->add(strings[1980]);
4432strings[1974] = str->add(strings[1974]);
4433strings[1975] = str->add(strings[1975]);
4434strings[1976] = str->add(strings[1976]);
4435strings[90] = str->add(strings[90]);
4436strings[1977] = str->add(strings[1977]);
4437strings[1842] = str->add(strings[1842]);
4438strings[104] = str->add(strings[104]);
4439strings[104] = str->add(strings[104]);
4440strings[104] = str->add(strings[104]);
4441strings[104] = str->add(strings[104]);
4442strings[1978] = str->add(strings[1978]);
4443strings[104] = str->add(strings[104]);
4444strings[1983] = str->add(strings[1983]);
4445strings[1982] = str->add(strings[1982]);
4446strings[1980] = str->add(strings[1980]);
4447strings[1974] = str->add(strings[1974]);
4448strings[1975] = str->add(strings[1975]);
4449strings[1976] = str->add(strings[1976]);
4450strings[90] = str->add(strings[90]);
4451strings[1977] = str->add(strings[1977]);
4452strings[1842] = str->add(strings[1842]);
4453strings[104] = str->add(strings[104]);
4454strings[104] = str->add(strings[104]);
4455strings[104] = str->add(strings[104]);
4456strings[104] = str->add(strings[104]);
4457strings[1978] = str->add(strings[1978]);
4458strings[104] = str->add(strings[104]);
4459strings[1983] = str->add(strings[1983]);
4460strings[120] = str->add(strings[120]);
4461strings[1980] = str->add(strings[1980]);
4462strings[1974] = str->add(strings[1974]);
4463strings[1975] = str->add(strings[1975]);
4464strings[1984] = str->add("medium");
4465strings[97] = str->add(strings[97]);
4466strings[1977] = str->add(strings[1977]);
4467strings[1842] = str->add(strings[1842]);
4468strings[104] = str->add(strings[104]);
4469strings[104] = str->add(strings[104]);
4470strings[104] = str->add(strings[104]);
4471strings[104] = str->add(strings[104]);
4472strings[1978] = str->add(strings[1978]);
4473strings[104] = str->add(strings[104]);
4474strings[1979] = str->add(strings[1979]);
4475strings[104] = str->add(strings[104]);
4476strings[1985] = str->add("/usr/devel/share/enlightenment/data/fonts/Vera.ttf");
4477strings[1974] = str->add(strings[1974]);
4478strings[1975] = str->add(strings[1975]);
4479strings[1984] = str->add(strings[1984]);
4480strings[97] = str->add(strings[97]);
4481strings[1977] = str->add(strings[1977]);
4482strings[1842] = str->add(strings[1842]);
4483strings[104] = str->add(strings[104]);
4484strings[104] = str->add(strings[104]);
4485strings[104] = str->add(strings[104]);
4486strings[104] = str->add(strings[104]);
4487strings[1978] = str->add(strings[1978]);
4488strings[104] = str->add(strings[104]);
4489strings[1981] = str->add(strings[1981]);
4490strings[1982] = str->add(strings[1982]);
4491strings[1985] = str->add(strings[1985]);
4492strings[1974] = str->add(strings[1974]);
4493strings[1975] = str->add(strings[1975]);
4494strings[1984] = str->add(strings[1984]);
4495strings[97] = str->add(strings[97]);
4496strings[1977] = str->add(strings[1977]);
4497strings[1842] = str->add(strings[1842]);
4498strings[104] = str->add(strings[104]);
4499strings[104] = str->add(strings[104]);
4500strings[104] = str->add(strings[104]);
4501strings[104] = str->add(strings[104]);
4502strings[1978] = str->add(strings[1978]);
4503strings[104] = str->add(strings[104]);
4504strings[1983] = str->add(strings[1983]);
4505strings[101] = str->add(strings[101]);
4506strings[1985] = str->add(strings[1985]);
4507strings[1974] = str->add(strings[1974]);
4508strings[1975] = str->add(strings[1975]);
4509strings[1984] = str->add(strings[1984]);
4510strings[97] = str->add(strings[97]);
4511strings[1977] = str->add(strings[1977]);
4512strings[1842] = str->add(strings[1842]);
4513strings[104] = str->add(strings[104]);
4514strings[104] = str->add(strings[104]);
4515strings[104] = str->add(strings[104]);
4516strings[104] = str->add(strings[104]);
4517strings[1978] = str->add(strings[1978]);
4518strings[104] = str->add(strings[104]);
4519strings[1983] = str->add(strings[1983]);
4520strings[1982] = str->add(strings[1982]);
4521strings[1985] = str->add(strings[1985]);
4522strings[1974] = str->add(strings[1974]);
4523strings[1975] = str->add(strings[1975]);
4524strings[1984] = str->add(strings[1984]);
4525strings[97] = str->add(strings[97]);
4526strings[1977] = str->add(strings[1977]);
4527strings[1842] = str->add(strings[1842]);
4528strings[104] = str->add(strings[104]);
4529strings[104] = str->add(strings[104]);
4530strings[104] = str->add(strings[104]);
4531strings[104] = str->add(strings[104]);
4532strings[1978] = str->add(strings[1978]);
4533strings[104] = str->add(strings[104]);
4534strings[1983] = str->add(strings[1983]);
4535strings[120] = str->add(strings[120]);
4536strings[1985] = str->add(strings[1985]);
4537strings[1974] = str->add(strings[1974]);
4538strings[1975] = str->add(strings[1975]);
4539strings[1976] = str->add(strings[1976]);
4540strings[97] = str->add(strings[97]);
4541strings[1977] = str->add(strings[1977]);
4542strings[1842] = str->add(strings[1842]);
4543strings[104] = str->add(strings[104]);
4544strings[104] = str->add(strings[104]);
4545strings[104] = str->add(strings[104]);
4546strings[104] = str->add(strings[104]);
4547strings[1978] = str->add(strings[1978]);
4548strings[104] = str->add(strings[104]);
4549strings[1979] = str->add(strings[1979]);
4550strings[104] = str->add(strings[104]);
4551strings[1986] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraBd.ttf");
4552strings[1974] = str->add(strings[1974]);
4553strings[1975] = str->add(strings[1975]);
4554strings[1976] = str->add(strings[1976]);
4555strings[97] = str->add(strings[97]);
4556strings[1977] = str->add(strings[1977]);
4557strings[1842] = str->add(strings[1842]);
4558strings[104] = str->add(strings[104]);
4559strings[104] = str->add(strings[104]);
4560strings[104] = str->add(strings[104]);
4561strings[104] = str->add(strings[104]);
4562strings[1978] = str->add(strings[1978]);
4563strings[104] = str->add(strings[104]);
4564strings[1981] = str->add(strings[1981]);
4565strings[1982] = str->add(strings[1982]);
4566strings[1986] = str->add(strings[1986]);
4567strings[1974] = str->add(strings[1974]);
4568strings[1975] = str->add(strings[1975]);
4569strings[1976] = str->add(strings[1976]);
4570strings[97] = str->add(strings[97]);
4571strings[1977] = str->add(strings[1977]);
4572strings[1842] = str->add(strings[1842]);
4573strings[104] = str->add(strings[104]);
4574strings[104] = str->add(strings[104]);
4575strings[104] = str->add(strings[104]);
4576strings[104] = str->add(strings[104]);
4577strings[1978] = str->add(strings[1978]);
4578strings[104] = str->add(strings[104]);
4579strings[1983] = str->add(strings[1983]);
4580strings[101] = str->add(strings[101]);
4581strings[1986] = str->add(strings[1986]);
4582strings[1974] = str->add(strings[1974]);
4583strings[1975] = str->add(strings[1975]);
4584strings[1976] = str->add(strings[1976]);
4585strings[97] = str->add(strings[97]);
4586strings[1977] = str->add(strings[1977]);
4587strings[1842] = str->add(strings[1842]);
4588strings[104] = str->add(strings[104]);
4589strings[104] = str->add(strings[104]);
4590strings[104] = str->add(strings[104]);
4591strings[104] = str->add(strings[104]);
4592strings[1978] = str->add(strings[1978]);
4593strings[104] = str->add(strings[104]);
4594strings[1983] = str->add(strings[1983]);
4595strings[1982] = str->add(strings[1982]);
4596strings[1986] = str->add(strings[1986]);
4597strings[1974] = str->add(strings[1974]);
4598strings[1975] = str->add(strings[1975]);
4599strings[1976] = str->add(strings[1976]);
4600strings[97] = str->add(strings[97]);
4601strings[1977] = str->add(strings[1977]);
4602strings[1842] = str->add(strings[1842]);
4603strings[104] = str->add(strings[104]);
4604strings[104] = str->add(strings[104]);
4605strings[104] = str->add(strings[104]);
4606strings[104] = str->add(strings[104]);
4607strings[1978] = str->add(strings[1978]);
4608strings[104] = str->add(strings[104]);
4609strings[1983] = str->add(strings[1983]);
4610strings[120] = str->add(strings[120]);
4611strings[1986] = str->add(strings[1986]);
4612strings[1974] = str->add(strings[1974]);
4613strings[1975] = str->add(strings[1975]);
4614strings[1984] = str->add(strings[1984]);
4615strings[90] = str->add(strings[90]);
4616strings[1977] = str->add(strings[1977]);
4617strings[1842] = str->add(strings[1842]);
4618strings[104] = str->add(strings[104]);
4619strings[104] = str->add(strings[104]);
4620strings[104] = str->add(strings[104]);
4621strings[104] = str->add(strings[104]);
4622strings[1978] = str->add(strings[1978]);
4623strings[104] = str->add(strings[104]);
4624strings[1979] = str->add(strings[1979]);
4625strings[104] = str->add(strings[104]);
4626strings[1987] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraIt.ttf");
4627strings[1974] = str->add(strings[1974]);
4628strings[1975] = str->add(strings[1975]);
4629strings[1984] = str->add(strings[1984]);
4630strings[90] = str->add(strings[90]);
4631strings[1977] = str->add(strings[1977]);
4632strings[1842] = str->add(strings[1842]);
4633strings[104] = str->add(strings[104]);
4634strings[104] = str->add(strings[104]);
4635strings[104] = str->add(strings[104]);
4636strings[104] = str->add(strings[104]);
4637strings[1978] = str->add(strings[1978]);
4638strings[104] = str->add(strings[104]);
4639strings[1981] = str->add(strings[1981]);
4640strings[1982] = str->add(strings[1982]);
4641strings[1987] = str->add(strings[1987]);
4642strings[1974] = str->add(strings[1974]);
4643strings[1975] = str->add(strings[1975]);
4644strings[1984] = str->add(strings[1984]);
4645strings[90] = str->add(strings[90]);
4646strings[1977] = str->add(strings[1977]);
4647strings[1842] = str->add(strings[1842]);
4648strings[104] = str->add(strings[104]);
4649strings[104] = str->add(strings[104]);
4650strings[104] = str->add(strings[104]);
4651strings[104] = str->add(strings[104]);
4652strings[1978] = str->add(strings[1978]);
4653strings[104] = str->add(strings[104]);
4654strings[1983] = str->add(strings[1983]);
4655strings[101] = str->add(strings[101]);
4656strings[1987] = str->add(strings[1987]);
4657strings[1974] = str->add(strings[1974]);
4658strings[1975] = str->add(strings[1975]);
4659strings[1984] = str->add(strings[1984]);
4660strings[90] = str->add(strings[90]);
4661strings[1977] = str->add(strings[1977]);
4662strings[1842] = str->add(strings[1842]);
4663strings[104] = str->add(strings[104]);
4664strings[104] = str->add(strings[104]);
4665strings[104] = str->add(strings[104]);
4666strings[104] = str->add(strings[104]);
4667strings[1978] = str->add(strings[1978]);
4668strings[104] = str->add(strings[104]);
4669strings[1983] = str->add(strings[1983]);
4670strings[1982] = str->add(strings[1982]);
4671strings[1987] = str->add(strings[1987]);
4672strings[1974] = str->add(strings[1974]);
4673strings[1975] = str->add(strings[1975]);
4674strings[1984] = str->add(strings[1984]);
4675strings[90] = str->add(strings[90]);
4676strings[1977] = str->add(strings[1977]);
4677strings[1842] = str->add(strings[1842]);
4678strings[104] = str->add(strings[104]);
4679strings[104] = str->add(strings[104]);
4680strings[104] = str->add(strings[104]);
4681strings[104] = str->add(strings[104]);
4682strings[1978] = str->add(strings[1978]);
4683strings[104] = str->add(strings[104]);
4684strings[1983] = str->add(strings[1983]);
4685strings[120] = str->add(strings[120]);
4686strings[1987] = str->add(strings[1987]);
4687strings[1974] = str->add(strings[1974]);
4688strings[1988] = str->add("Bitstream Vera Sans Mono");
4689strings[1976] = str->add(strings[1976]);
4690strings[90] = str->add(strings[90]);
4691strings[1977] = str->add(strings[1977]);
4692strings[1842] = str->add(strings[1842]);
4693strings[104] = str->add(strings[104]);
4694strings[104] = str->add(strings[104]);
4695strings[104] = str->add(strings[104]);
4696strings[104] = str->add(strings[104]);
4697strings[125] = str->add(strings[125]);
4698strings[104] = str->add(strings[104]);
4699strings[1979] = str->add(strings[1979]);
4700strings[104] = str->add(strings[104]);
4701strings[1989] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMoBI.ttf");
4702strings[1974] = str->add(strings[1974]);
4703strings[1988] = str->add(strings[1988]);
4704strings[1976] = str->add(strings[1976]);
4705strings[90] = str->add(strings[90]);
4706strings[1977] = str->add(strings[1977]);
4707strings[1842] = str->add(strings[1842]);
4708strings[104] = str->add(strings[104]);
4709strings[104] = str->add(strings[104]);
4710strings[104] = str->add(strings[104]);
4711strings[104] = str->add(strings[104]);
4712strings[125] = str->add(strings[125]);
4713strings[104] = str->add(strings[104]);
4714strings[1981] = str->add(strings[1981]);
4715strings[1982] = str->add(strings[1982]);
4716strings[1989] = str->add(strings[1989]);
4717strings[1974] = str->add(strings[1974]);
4718strings[1988] = str->add(strings[1988]);
4719strings[1976] = str->add(strings[1976]);
4720strings[90] = str->add(strings[90]);
4721strings[1977] = str->add(strings[1977]);
4722strings[1842] = str->add(strings[1842]);
4723strings[104] = str->add(strings[104]);
4724strings[104] = str->add(strings[104]);
4725strings[104] = str->add(strings[104]);
4726strings[104] = str->add(strings[104]);
4727strings[125] = str->add(strings[125]);
4728strings[104] = str->add(strings[104]);
4729strings[1983] = str->add(strings[1983]);
4730strings[101] = str->add(strings[101]);
4731strings[1989] = str->add(strings[1989]);
4732strings[1974] = str->add(strings[1974]);
4733strings[1988] = str->add(strings[1988]);
4734strings[1976] = str->add(strings[1976]);
4735strings[90] = str->add(strings[90]);
4736strings[1977] = str->add(strings[1977]);
4737strings[1842] = str->add(strings[1842]);
4738strings[104] = str->add(strings[104]);
4739strings[104] = str->add(strings[104]);
4740strings[104] = str->add(strings[104]);
4741strings[104] = str->add(strings[104]);
4742strings[125] = str->add(strings[125]);
4743strings[104] = str->add(strings[104]);
4744strings[1983] = str->add(strings[1983]);
4745strings[1982] = str->add(strings[1982]);
4746strings[1989] = str->add(strings[1989]);
4747strings[1974] = str->add(strings[1974]);
4748strings[1988] = str->add(strings[1988]);
4749strings[1976] = str->add(strings[1976]);
4750strings[90] = str->add(strings[90]);
4751strings[1977] = str->add(strings[1977]);
4752strings[1842] = str->add(strings[1842]);
4753strings[104] = str->add(strings[104]);
4754strings[104] = str->add(strings[104]);
4755strings[104] = str->add(strings[104]);
4756strings[104] = str->add(strings[104]);
4757strings[125] = str->add(strings[125]);
4758strings[104] = str->add(strings[104]);
4759strings[1983] = str->add(strings[1983]);
4760strings[120] = str->add(strings[120]);
4761strings[1989] = str->add(strings[1989]);
4762strings[1974] = str->add(strings[1974]);
4763strings[1988] = str->add(strings[1988]);
4764strings[1976] = str->add(strings[1976]);
4765strings[97] = str->add(strings[97]);
4766strings[1977] = str->add(strings[1977]);
4767strings[1842] = str->add(strings[1842]);
4768strings[104] = str->add(strings[104]);
4769strings[104] = str->add(strings[104]);
4770strings[104] = str->add(strings[104]);
4771strings[104] = str->add(strings[104]);
4772strings[125] = str->add(strings[125]);
4773strings[104] = str->add(strings[104]);
4774strings[1979] = str->add(strings[1979]);
4775strings[104] = str->add(strings[104]);
4776strings[1990] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMoBd.ttf");
4777strings[1974] = str->add(strings[1974]);
4778strings[1988] = str->add(strings[1988]);
4779strings[1976] = str->add(strings[1976]);
4780strings[97] = str->add(strings[97]);
4781strings[1977] = str->add(strings[1977]);
4782strings[1842] = str->add(strings[1842]);
4783strings[104] = str->add(strings[104]);
4784strings[104] = str->add(strings[104]);
4785strings[104] = str->add(strings[104]);
4786strings[104] = str->add(strings[104]);
4787strings[125] = str->add(strings[125]);
4788strings[104] = str->add(strings[104]);
4789strings[1981] = str->add(strings[1981]);
4790strings[1982] = str->add(strings[1982]);
4791strings[1990] = str->add(strings[1990]);
4792strings[1974] = str->add(strings[1974]);
4793strings[1988] = str->add(strings[1988]);
4794strings[1976] = str->add(strings[1976]);
4795strings[97] = str->add(strings[97]);
4796strings[1977] = str->add(strings[1977]);
4797strings[1842] = str->add(strings[1842]);
4798strings[104] = str->add(strings[104]);
4799strings[104] = str->add(strings[104]);
4800strings[104] = str->add(strings[104]);
4801strings[104] = str->add(strings[104]);
4802strings[125] = str->add(strings[125]);
4803strings[104] = str->add(strings[104]);
4804strings[1983] = str->add(strings[1983]);
4805strings[101] = str->add(strings[101]);
4806strings[1990] = str->add(strings[1990]);
4807strings[1974] = str->add(strings[1974]);
4808strings[1988] = str->add(strings[1988]);
4809strings[1976] = str->add(strings[1976]);
4810strings[97] = str->add(strings[97]);
4811strings[1977] = str->add(strings[1977]);
4812strings[1842] = str->add(strings[1842]);
4813strings[104] = str->add(strings[104]);
4814strings[104] = str->add(strings[104]);
4815strings[104] = str->add(strings[104]);
4816strings[104] = str->add(strings[104]);
4817strings[125] = str->add(strings[125]);
4818strings[104] = str->add(strings[104]);
4819strings[1983] = str->add(strings[1983]);
4820strings[1982] = str->add(strings[1982]);
4821strings[1990] = str->add(strings[1990]);
4822strings[1974] = str->add(strings[1974]);
4823strings[1988] = str->add(strings[1988]);
4824strings[1976] = str->add(strings[1976]);
4825strings[97] = str->add(strings[97]);
4826strings[1977] = str->add(strings[1977]);
4827strings[1842] = str->add(strings[1842]);
4828strings[104] = str->add(strings[104]);
4829strings[104] = str->add(strings[104]);
4830strings[104] = str->add(strings[104]);
4831strings[104] = str->add(strings[104]);
4832strings[125] = str->add(strings[125]);
4833strings[104] = str->add(strings[104]);
4834strings[1983] = str->add(strings[1983]);
4835strings[120] = str->add(strings[120]);
4836strings[1990] = str->add(strings[1990]);
4837strings[1974] = str->add(strings[1974]);
4838strings[1988] = str->add(strings[1988]);
4839strings[1984] = str->add(strings[1984]);
4840strings[90] = str->add(strings[90]);
4841strings[1977] = str->add(strings[1977]);
4842strings[1842] = str->add(strings[1842]);
4843strings[104] = str->add(strings[104]);
4844strings[104] = str->add(strings[104]);
4845strings[104] = str->add(strings[104]);
4846strings[104] = str->add(strings[104]);
4847strings[125] = str->add(strings[125]);
4848strings[104] = str->add(strings[104]);
4849strings[1979] = str->add(strings[1979]);
4850strings[104] = str->add(strings[104]);
4851strings[1991] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMoIt.ttf");
4852strings[1974] = str->add(strings[1974]);
4853strings[1988] = str->add(strings[1988]);
4854strings[1984] = str->add(strings[1984]);
4855strings[90] = str->add(strings[90]);
4856strings[1977] = str->add(strings[1977]);
4857strings[1842] = str->add(strings[1842]);
4858strings[104] = str->add(strings[104]);
4859strings[104] = str->add(strings[104]);
4860strings[104] = str->add(strings[104]);
4861strings[104] = str->add(strings[104]);
4862strings[125] = str->add(strings[125]);
4863strings[104] = str->add(strings[104]);
4864strings[1981] = str->add(strings[1981]);
4865strings[1982] = str->add(strings[1982]);
4866strings[1991] = str->add(strings[1991]);
4867strings[1974] = str->add(strings[1974]);
4868strings[1988] = str->add(strings[1988]);
4869strings[1984] = str->add(strings[1984]);
4870strings[90] = str->add(strings[90]);
4871strings[1977] = str->add(strings[1977]);
4872strings[1842] = str->add(strings[1842]);
4873strings[104] = str->add(strings[104]);
4874strings[104] = str->add(strings[104]);
4875strings[104] = str->add(strings[104]);
4876strings[104] = str->add(strings[104]);
4877strings[125] = str->add(strings[125]);
4878strings[104] = str->add(strings[104]);
4879strings[1983] = str->add(strings[1983]);
4880strings[101] = str->add(strings[101]);
4881strings[1991] = str->add(strings[1991]);
4882strings[1974] = str->add(strings[1974]);
4883strings[1988] = str->add(strings[1988]);
4884strings[1984] = str->add(strings[1984]);
4885strings[90] = str->add(strings[90]);
4886strings[1977] = str->add(strings[1977]);
4887strings[1842] = str->add(strings[1842]);
4888strings[104] = str->add(strings[104]);
4889strings[104] = str->add(strings[104]);
4890strings[104] = str->add(strings[104]);
4891strings[104] = str->add(strings[104]);
4892strings[125] = str->add(strings[125]);
4893strings[104] = str->add(strings[104]);
4894strings[1983] = str->add(strings[1983]);
4895strings[1982] = str->add(strings[1982]);
4896strings[1991] = str->add(strings[1991]);
4897strings[1974] = str->add(strings[1974]);
4898strings[1988] = str->add(strings[1988]);
4899strings[1984] = str->add(strings[1984]);
4900strings[90] = str->add(strings[90]);
4901strings[1977] = str->add(strings[1977]);
4902strings[1842] = str->add(strings[1842]);
4903strings[104] = str->add(strings[104]);
4904strings[104] = str->add(strings[104]);
4905strings[104] = str->add(strings[104]);
4906strings[104] = str->add(strings[104]);
4907strings[125] = str->add(strings[125]);
4908strings[104] = str->add(strings[104]);
4909strings[1983] = str->add(strings[1983]);
4910strings[120] = str->add(strings[120]);
4911strings[1991] = str->add(strings[1991]);
4912strings[1974] = str->add(strings[1974]);
4913strings[1988] = str->add(strings[1988]);
4914strings[1984] = str->add(strings[1984]);
4915strings[97] = str->add(strings[97]);
4916strings[1977] = str->add(strings[1977]);
4917strings[1842] = str->add(strings[1842]);
4918strings[104] = str->add(strings[104]);
4919strings[104] = str->add(strings[104]);
4920strings[104] = str->add(strings[104]);
4921strings[104] = str->add(strings[104]);
4922strings[125] = str->add(strings[125]);
4923strings[104] = str->add(strings[104]);
4924strings[1979] = str->add(strings[1979]);
4925strings[104] = str->add(strings[104]);
4926strings[1992] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraMono.ttf");
4927strings[1974] = str->add(strings[1974]);
4928strings[1988] = str->add(strings[1988]);
4929strings[1984] = str->add(strings[1984]);
4930strings[97] = str->add(strings[97]);
4931strings[1977] = str->add(strings[1977]);
4932strings[1842] = str->add(strings[1842]);
4933strings[104] = str->add(strings[104]);
4934strings[104] = str->add(strings[104]);
4935strings[104] = str->add(strings[104]);
4936strings[104] = str->add(strings[104]);
4937strings[125] = str->add(strings[125]);
4938strings[104] = str->add(strings[104]);
4939strings[1981] = str->add(strings[1981]);
4940strings[1982] = str->add(strings[1982]);
4941strings[1992] = str->add(strings[1992]);
4942strings[1974] = str->add(strings[1974]);
4943strings[1988] = str->add(strings[1988]);
4944strings[1984] = str->add(strings[1984]);
4945strings[97] = str->add(strings[97]);
4946strings[1977] = str->add(strings[1977]);
4947strings[1842] = str->add(strings[1842]);
4948strings[104] = str->add(strings[104]);
4949strings[104] = str->add(strings[104]);
4950strings[104] = str->add(strings[104]);
4951strings[104] = str->add(strings[104]);
4952strings[125] = str->add(strings[125]);
4953strings[104] = str->add(strings[104]);
4954strings[1983] = str->add(strings[1983]);
4955strings[101] = str->add(strings[101]);
4956strings[1992] = str->add(strings[1992]);
4957strings[1974] = str->add(strings[1974]);
4958strings[1988] = str->add(strings[1988]);
4959strings[1984] = str->add(strings[1984]);
4960strings[97] = str->add(strings[97]);
4961strings[1977] = str->add(strings[1977]);
4962strings[1842] = str->add(strings[1842]);
4963strings[104] = str->add(strings[104]);
4964strings[104] = str->add(strings[104]);
4965strings[104] = str->add(strings[104]);
4966strings[104] = str->add(strings[104]);
4967strings[125] = str->add(strings[125]);
4968strings[104] = str->add(strings[104]);
4969strings[1983] = str->add(strings[1983]);
4970strings[1982] = str->add(strings[1982]);
4971strings[1992] = str->add(strings[1992]);
4972strings[1974] = str->add(strings[1974]);
4973strings[1988] = str->add(strings[1988]);
4974strings[1984] = str->add(strings[1984]);
4975strings[97] = str->add(strings[97]);
4976strings[1977] = str->add(strings[1977]);
4977strings[1842] = str->add(strings[1842]);
4978strings[104] = str->add(strings[104]);
4979strings[104] = str->add(strings[104]);
4980strings[104] = str->add(strings[104]);
4981strings[104] = str->add(strings[104]);
4982strings[125] = str->add(strings[125]);
4983strings[104] = str->add(strings[104]);
4984strings[1983] = str->add(strings[1983]);
4985strings[120] = str->add(strings[120]);
4986strings[1992] = str->add(strings[1992]);
4987strings[1974] = str->add(strings[1974]);
4988strings[1993] = str->add("Bitstream Vera Serif");
4989strings[1984] = str->add(strings[1984]);
4990strings[97] = str->add(strings[97]);
4991strings[1977] = str->add(strings[1977]);
4992strings[1842] = str->add(strings[1842]);
4993strings[104] = str->add(strings[104]);
4994strings[104] = str->add(strings[104]);
4995strings[104] = str->add(strings[104]);
4996strings[104] = str->add(strings[104]);
4997strings[1978] = str->add(strings[1978]);
4998strings[104] = str->add(strings[104]);
4999strings[1979] = str->add(strings[1979]);
5000strings[104] = str->add(strings[104]);
5001strings[1994] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraSe.ttf");
5002strings[1974] = str->add(strings[1974]);
5003strings[1993] = str->add(strings[1993]);
5004strings[1984] = str->add(strings[1984]);
5005strings[97] = str->add(strings[97]);
5006strings[1977] = str->add(strings[1977]);
5007strings[1842] = str->add(strings[1842]);
5008strings[104] = str->add(strings[104]);
5009strings[104] = str->add(strings[104]);
5010strings[104] = str->add(strings[104]);
5011strings[104] = str->add(strings[104]);
5012strings[1978] = str->add(strings[1978]);
5013strings[104] = str->add(strings[104]);
5014strings[1981] = str->add(strings[1981]);
5015strings[1982] = str->add(strings[1982]);
5016strings[1994] = str->add(strings[1994]);
5017strings[1974] = str->add(strings[1974]);
5018strings[1993] = str->add(strings[1993]);
5019strings[1984] = str->add(strings[1984]);
5020strings[97] = str->add(strings[97]);
5021strings[1977] = str->add(strings[1977]);
5022strings[1842] = str->add(strings[1842]);
5023strings[104] = str->add(strings[104]);
5024strings[104] = str->add(strings[104]);
5025strings[104] = str->add(strings[104]);
5026strings[104] = str->add(strings[104]);
5027strings[1978] = str->add(strings[1978]);
5028strings[104] = str->add(strings[104]);
5029strings[1983] = str->add(strings[1983]);
5030strings[101] = str->add(strings[101]);
5031strings[1994] = str->add(strings[1994]);
5032strings[1974] = str->add(strings[1974]);
5033strings[1993] = str->add(strings[1993]);
5034strings[1984] = str->add(strings[1984]);
5035strings[97] = str->add(strings[97]);
5036strings[1977] = str->add(strings[1977]);
5037strings[1842] = str->add(strings[1842]);
5038strings[104] = str->add(strings[104]);
5039strings[104] = str->add(strings[104]);
5040strings[104] = str->add(strings[104]);
5041strings[104] = str->add(strings[104]);
5042strings[1978] = str->add(strings[1978]);
5043strings[104] = str->add(strings[104]);
5044strings[1983] = str->add(strings[1983]);
5045strings[1982] = str->add(strings[1982]);
5046strings[1994] = str->add(strings[1994]);
5047strings[1974] = str->add(strings[1974]);
5048strings[1993] = str->add(strings[1993]);
5049strings[1984] = str->add(strings[1984]);
5050strings[97] = str->add(strings[97]);
5051strings[1977] = str->add(strings[1977]);
5052strings[1842] = str->add(strings[1842]);
5053strings[104] = str->add(strings[104]);
5054strings[104] = str->add(strings[104]);
5055strings[104] = str->add(strings[104]);
5056strings[104] = str->add(strings[104]);
5057strings[1978] = str->add(strings[1978]);
5058strings[104] = str->add(strings[104]);
5059strings[1983] = str->add(strings[1983]);
5060strings[120] = str->add(strings[120]);
5061strings[1994] = str->add(strings[1994]);
5062strings[1974] = str->add(strings[1974]);
5063strings[1993] = str->add(strings[1993]);
5064strings[1976] = str->add(strings[1976]);
5065strings[97] = str->add(strings[97]);
5066strings[1977] = str->add(strings[1977]);
5067strings[1842] = str->add(strings[1842]);
5068strings[104] = str->add(strings[104]);
5069strings[104] = str->add(strings[104]);
5070strings[104] = str->add(strings[104]);
5071strings[104] = str->add(strings[104]);
5072strings[1978] = str->add(strings[1978]);
5073strings[104] = str->add(strings[104]);
5074strings[1979] = str->add(strings[1979]);
5075strings[104] = str->add(strings[104]);
5076strings[1995] = str->add("/usr/devel/share/enlightenment/data/fonts/VeraSeBd.ttf");
5077strings[1974] = str->add(strings[1974]);
5078strings[1993] = str->add(strings[1993]);
5079strings[1976] = str->add(strings[1976]);
5080strings[97] = str->add(strings[97]);
5081strings[1977] = str->add(strings[1977]);
5082strings[1842] = str->add(strings[1842]);
5083strings[104] = str->add(strings[104]);
5084strings[104] = str->add(strings[104]);
5085strings[104] = str->add(strings[104]);
5086strings[104] = str->add(strings[104]);
5087strings[1978] = str->add(strings[1978]);
5088strings[104] = str->add(strings[104]);
5089strings[1981] = str->add(strings[1981]);
5090strings[1982] = str->add(strings[1982]);
5091strings[1995] = str->add(strings[1995]);
5092strings[1974] = str->add(strings[1974]);
5093strings[1993] = str->add(strings[1993]);
5094strings[1976] = str->add(strings[1976]);
5095strings[97] = str->add(strings[97]);
5096strings[1977] = str->add(strings[1977]);
5097strings[1842] = str->add(strings[1842]);
5098strings[104] = str->add(strings[104]);
5099strings[104] = str->add(strings[104]);
5100strings[104] = str->add(strings[104]);
5101strings[104] = str->add(strings[104]);
5102strings[1978] = str->add(strings[1978]);
5103strings[104] = str->add(strings[104]);
5104strings[1983] = str->add(strings[1983]);
5105strings[101] = str->add(strings[101]);
5106strings[1995] = str->add(strings[1995]);
5107strings[1974] = str->add(strings[1974]);
5108strings[1993] = str->add(strings[1993]);
5109strings[1976] = str->add(strings[1976]);
5110strings[97] = str->add(strings[97]);
5111strings[1977] = str->add(strings[1977]);
5112strings[1842] = str->add(strings[1842]);
5113strings[104] = str->add(strings[104]);
5114strings[104] = str->add(strings[104]);
5115strings[104] = str->add(strings[104]);
5116strings[104] = str->add(strings[104]);
5117strings[1978] = str->add(strings[1978]);
5118strings[104] = str->add(strings[104]);
5119strings[1983] = str->add(strings[1983]);
5120strings[1982] = str->add(strings[1982]);
5121strings[1995] = str->add(strings[1995]);
5122strings[1974] = str->add(strings[1974]);
5123strings[1993] = str->add(strings[1993]);
5124strings[1976] = str->add(strings[1976]);
5125strings[97] = str->add(strings[97]);
5126strings[1977] = str->add(strings[1977]);
5127strings[1842] = str->add(strings[1842]);
5128strings[104] = str->add(strings[104]);
5129strings[104] = str->add(strings[104]);
5130strings[104] = str->add(strings[104]);
5131strings[104] = str->add(strings[104]);
5132strings[1978] = str->add(strings[1978]);
5133strings[104] = str->add(strings[104]);
5134strings[1983] = str->add(strings[1983]);
5135strings[120] = str->add(strings[120]);
5136strings[1995] = str->add(strings[1995]);
5137strings[62] = str->add(strings[62]);
5138strings[1985] = str->add(strings[1985]);
5139strings[1996] = str->add("VeraBI");
5140strings[1980] = str->add(strings[1980]);
5141strings[1997] = str->add("VeraBd");
5142strings[1986] = str->add(strings[1986]);
5143strings[1998] = str->add("VeraIt");
5144strings[1987] = str->add(strings[1987]);
5145strings[1999] = str->add("VeraMoBI");
5146strings[1989] = str->add(strings[1989]);
5147strings[2000] = str->add("VeraMoBd");
5148strings[1990] = str->add(strings[1990]);
5149strings[2001] = str->add("VeraMoIt");
5150strings[1991] = str->add(strings[1991]);
5151strings[2002] = str->add("VeraMono");
5152strings[1992] = str->add(strings[1992]);
5153strings[2003] = str->add("VeraSe");
5154strings[1994] = str->add(strings[1994]);
5155strings[2004] = str->add("VeraSeBd");
5156strings[1995] = str->add(strings[1995]);
5157strings[2005] = str->add("Vera-Bold-Italic");
5158strings[2006] = str->add("Vera-Normal");
5159strings[2007] = str->add("Vera-Bold");
5160strings[2008] = str->add("Vera-Italic");
5161strings[2009] = str->add("Vera-Mono-Bold-Italic");
5162strings[2010] = str->add("Vera-Mono-Bold");
5163strings[2011] = str->add("Vera-Mono-Italic");
5164strings[2012] = str->add("Vera-Mono");
5165strings[2013] = str->add("Vera-Serif");
5166strings[2014] = str->add("Vera-Serif-Bold");
5167strings[62] = str->add(strings[62]);
5168str->del(strings[1972]);
5169str->del(strings[1973]);
5170strings[2015] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Bold.ttf");
5171strings[2016] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Bold-Oblique.ttf");
5172strings[2017] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-ExtraLight.ttf");
5173strings[2018] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans.ttf");
5174strings[2019] = str->add("/var/lib/defoma/fontconfig.d/N/NimbusSanL-Bold.pfb");
5175strings[2020] = str->add("/var/lib/defoma/fontconfig.d/K/KochiGothic-Regular.ttf");
5176strings[2021] = str->add("/var/lib/defoma/fontconfig.d/D/Dotum-Regular.ttf");
5177strings[2022] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSans-Bold.ttf");
5178strings[2023] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSans-Medium.ttf");
5179strings[2024] = str->add("/var/lib/defoma/fontconfig.d/L/Loma-Bold.ttf");
5180strings[2025] = str->add("/var/lib/defoma/fontconfig.d/O/Ouhod.ttf");
5181strings[2026] = str->add("/var/lib/defoma/fontconfig.d/N/Norasi-Bold.ttf");
5182strings[2027] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Mono-Bold.ttf");
5183strings[2028] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Serif-Bold.ttf");
5184strings[2029] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSerif-Bold.ttf");
5185strings[2030] = str->add("/var/lib/defoma/fontconfig.d/F/FreeMono-Bold.ttf");
5186strings[2031] = str->add("/usr/share/fonts/truetype/ttf-gujarati-fonts/padmaa-Bold.1.1.ttf");
5187strings[2032] = str->add("/var/lib/defoma/fontconfig.d/B/Batang-Bold.ttf");
5188strings[2033] = str->add("/var/lib/defoma/fontconfig.d/K/Kedage.ttf");
5189strings[2034] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuParanar-Bold.ttf");
5190strings[2035] = str->add("/var/lib/defoma/fontconfig.d/P/Purisa.ttf");
5191strings[2036] = str->add("/var/lib/defoma/fontconfig.d/F/FreeSerif-Medium.ttf");
5192strings[2037] = str->add("/var/lib/defoma/fontconfig.d/P/Pothana2000.ttf");
5193strings[2038] = str->add("/var/lib/defoma/fontconfig.d/F/FreeMono-Medium.ttf");
5194strings[2039] = str->add("/usr/share/fonts/truetype/ttf-devanagari-fonts/chandas1-2.ttf");
5195strings[2040] = str->add("/usr/share/fonts/truetype/openoffice/opens___.ttf");
5196strings[2041] = str->add("/var/lib/defoma/fontconfig.d/G/Gentium-Italic.ttf");
5197strings[2042] = str->add("/var/lib/defoma/fontconfig.d/L/Lohit-Kannada.ttf");
5198strings[2043] = str->add("/var/lib/defoma/fontconfig.d/L/Lohit-Oriya.ttf");
5199strings[2044] = str->add("/var/lib/defoma/fontconfig.d/T/TAMuKadambri-Regular.ttf");
5200strings[2045] = str->add("/var/lib/defoma/fontconfig.d/T/TAMuKalyani-Regular.ttf");
5201strings[2046] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuComic-Normal.ttf");
5202strings[2047] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuParanar-Regular.ttf");
5203strings[2048] = str->add("/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_gu.ttf");
5204strings[2049] = str->add("/usr/share/fonts/truetype/ttf-indic-fonts-core/lohit_ta.ttf");
5205strings[2050] = str->add("/var/lib/defoma/fontconfig.d/A/AnjaliOldLipi.ttf");
5206strings[2051] = str->add("/usr/share/fonts/truetype/arphic/ukai.ttf");
5207strings[2052] = str->add("/usr/share/fonts/truetype/arphic/uming.ttf");
5208strings[2053] = str->add("/var/lib/defoma/fontconfig.d/K/KochiMincho-Regular.ttf");
5209strings[2054] = str->add("/usr/share/fonts/truetype/ttf-malayalam-fonts/Rachana_w01.ttf");
5210strings[2055] = str->add("/usr/share/fonts/truetype/unfonts/UnBatang.ttf");
5211strings[2056] = str->add("/var/lib/defoma/fontconfig.d/S/StandardSymL.pfb");
5212strings[2057] = str->add("/var/lib/defoma/fontconfig.d/T/TSCuParanar-Italic.ttf");
5213strings[379] = str->add(strings[379]);
5214strings[1760] = str->add(strings[1760]);
5215strings[1760] = str->add(strings[1760]);
5216strings[1842] = str->add(strings[1842]);
5217str->del(strings[1760]);
5218strings[64] = str->add(strings[64]);
5219strings[2058] = str->add("images/65");
5220strings[2059] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/65");
5221strings[64] = str->add(strings[64]);
5222strings[2058] = str->add(strings[2058]);
5223strings[2060] = str->add("e,state,selected");
5224strings[1959] = str->add(strings[1959]);
5225strings[64] = str->add(strings[64]);
5226strings[1963] = str->add(strings[1963]);
5227strings[64] = str->add(strings[64]);
5228strings[1755] = str->add(strings[1755]);
5229strings[1761] = str->add(strings[1761]);
5230strings[1841] = str->add(strings[1841]);
5231strings[64] = str->add(strings[64]);
5232strings[1964] = str->add(strings[1964]);
5233strings[64] = str->add(strings[64]);
5234strings[1966] = str->add(strings[1966]);
5235strings[64] = str->add(strings[64]);
5236strings[1968] = str->add(strings[1968]);
5237strings[64] = str->add(strings[64]);
5238strings[1970] = str->add(strings[1970]);
5239str->del(strings[64]);
5240strings[379] = str->add(strings[379]);
5241strings[1761] = str->add(strings[1761]);
5242strings[1761] = str->add(strings[1761]);
5243strings[1842] = str->add(strings[1842]);
5244str->del(strings[1761]);
5245strings[64] = str->add(strings[64]);
5246strings[2058] = str->add(strings[2058]);
5247strings[64] = str->add(strings[64]);
5248strings[1963] = str->add(strings[1963]);
5249strings[64] = str->add(strings[64]);
5250strings[1755] = str->add(strings[1755]);
5251strings[1762] = str->add(strings[1762]);
5252strings[1841] = str->add(strings[1841]);
5253strings[64] = str->add(strings[64]);
5254strings[1964] = str->add(strings[1964]);
5255strings[64] = str->add(strings[64]);
5256strings[1966] = str->add(strings[1966]);
5257strings[64] = str->add(strings[64]);
5258strings[1968] = str->add(strings[1968]);
5259strings[64] = str->add(strings[64]);
5260strings[1970] = str->add(strings[1970]);
5261str->del(strings[64]);
5262strings[379] = str->add(strings[379]);
5263strings[1762] = str->add(strings[1762]);
5264strings[1762] = str->add(strings[1762]);
5265strings[1842] = str->add(strings[1842]);
5266str->del(strings[1762]);
5267strings[64] = str->add(strings[64]);
5268strings[2058] = str->add(strings[2058]);
5269strings[64] = str->add(strings[64]);
5270strings[1963] = str->add(strings[1963]);
5271strings[64] = str->add(strings[64]);
5272strings[1755] = str->add(strings[1755]);
5273strings[1763] = str->add(strings[1763]);
5274strings[1841] = str->add(strings[1841]);
5275strings[64] = str->add(strings[64]);
5276strings[1964] = str->add(strings[1964]);
5277strings[64] = str->add(strings[64]);
5278strings[1966] = str->add(strings[1966]);
5279strings[64] = str->add(strings[64]);
5280strings[1968] = str->add(strings[1968]);
5281strings[64] = str->add(strings[64]);
5282strings[1970] = str->add(strings[1970]);
5283str->del(strings[64]);
5284strings[379] = str->add(strings[379]);
5285strings[1763] = str->add(strings[1763]);
5286strings[1763] = str->add(strings[1763]);
5287strings[1842] = str->add(strings[1842]);
5288str->del(strings[1763]);
5289strings[64] = str->add(strings[64]);
5290strings[2058] = str->add(strings[2058]);
5291strings[64] = str->add(strings[64]);
5292strings[1963] = str->add(strings[1963]);
5293strings[64] = str->add(strings[64]);
5294strings[1755] = str->add(strings[1755]);
5295strings[1764] = str->add(strings[1764]);
5296strings[1841] = str->add(strings[1841]);
5297strings[64] = str->add(strings[64]);
5298strings[1964] = str->add(strings[1964]);
5299strings[64] = str->add(strings[64]);
5300strings[1966] = str->add(strings[1966]);
5301strings[64] = str->add(strings[64]);
5302strings[1968] = str->add(strings[1968]);
5303strings[64] = str->add(strings[64]);
5304strings[1970] = str->add(strings[1970]);
5305str->del(strings[64]);
5306strings[379] = str->add(strings[379]);
5307strings[1764] = str->add(strings[1764]);
5308strings[1764] = str->add(strings[1764]);
5309strings[1842] = str->add(strings[1842]);
5310str->del(strings[1764]);
5311strings[64] = str->add(strings[64]);
5312strings[2058] = str->add(strings[2058]);
5313strings[64] = str->add(strings[64]);
5314strings[1963] = str->add(strings[1963]);
5315strings[64] = str->add(strings[64]);
5316strings[1755] = str->add(strings[1755]);
5317strings[1765] = str->add(strings[1765]);
5318strings[1841] = str->add(strings[1841]);
5319strings[64] = str->add(strings[64]);
5320strings[1964] = str->add(strings[1964]);
5321strings[64] = str->add(strings[64]);
5322strings[1966] = str->add(strings[1966]);
5323strings[64] = str->add(strings[64]);
5324strings[1968] = str->add(strings[1968]);
5325strings[64] = str->add(strings[64]);
5326strings[1970] = str->add(strings[1970]);
5327str->del(strings[64]);
5328strings[379] = str->add(strings[379]);
5329strings[1765] = str->add(strings[1765]);
5330strings[1765] = str->add(strings[1765]);
5331strings[1842] = str->add(strings[1842]);
5332str->del(strings[1765]);
5333strings[64] = str->add(strings[64]);
5334strings[2058] = str->add(strings[2058]);
5335strings[64] = str->add(strings[64]);
5336strings[1963] = str->add(strings[1963]);
5337strings[64] = str->add(strings[64]);
5338strings[1755] = str->add(strings[1755]);
5339strings[1766] = str->add(strings[1766]);
5340strings[1841] = str->add(strings[1841]);
5341strings[64] = str->add(strings[64]);
5342strings[1964] = str->add(strings[1964]);
5343strings[64] = str->add(strings[64]);
5344strings[1966] = str->add(strings[1966]);
5345strings[64] = str->add(strings[64]);
5346strings[1968] = str->add(strings[1968]);
5347strings[64] = str->add(strings[64]);
5348strings[1970] = str->add(strings[1970]);
5349str->del(strings[64]);
5350strings[379] = str->add(strings[379]);
5351strings[1766] = str->add(strings[1766]);
5352strings[1766] = str->add(strings[1766]);
5353strings[1842] = str->add(strings[1842]);
5354str->del(strings[1766]);
5355strings[64] = str->add(strings[64]);
5356strings[2058] = str->add(strings[2058]);
5357strings[64] = str->add(strings[64]);
5358strings[1963] = str->add(strings[1963]);
5359strings[64] = str->add(strings[64]);
5360strings[1755] = str->add(strings[1755]);
5361strings[1767] = str->add(strings[1767]);
5362strings[1841] = str->add(strings[1841]);
5363strings[64] = str->add(strings[64]);
5364strings[1964] = str->add(strings[1964]);
5365strings[64] = str->add(strings[64]);
5366strings[1966] = str->add(strings[1966]);
5367strings[64] = str->add(strings[64]);
5368strings[1968] = str->add(strings[1968]);
5369strings[64] = str->add(strings[64]);
5370strings[1970] = str->add(strings[1970]);
5371str->del(strings[64]);
5372strings[379] = str->add(strings[379]);
5373strings[1767] = str->add(strings[1767]);
5374strings[1767] = str->add(strings[1767]);
5375strings[1842] = str->add(strings[1842]);
5376str->del(strings[1767]);
5377strings[64] = str->add(strings[64]);
5378strings[2058] = str->add(strings[2058]);
5379strings[64] = str->add(strings[64]);
5380strings[1963] = str->add(strings[1963]);
5381strings[64] = str->add(strings[64]);
5382strings[1755] = str->add(strings[1755]);
5383strings[1768] = str->add(strings[1768]);
5384strings[1841] = str->add(strings[1841]);
5385strings[64] = str->add(strings[64]);
5386strings[1964] = str->add(strings[1964]);
5387strings[64] = str->add(strings[64]);
5388strings[1966] = str->add(strings[1966]);
5389strings[64] = str->add(strings[64]);
5390strings[1968] = str->add(strings[1968]);
5391strings[64] = str->add(strings[64]);
5392strings[1970] = str->add(strings[1970]);
5393str->del(strings[64]);
5394strings[379] = str->add(strings[379]);
5395strings[1768] = str->add(strings[1768]);
5396strings[1768] = str->add(strings[1768]);
5397strings[1842] = str->add(strings[1842]);
5398str->del(strings[1768]);
5399strings[64] = str->add(strings[64]);
5400strings[2058] = str->add(strings[2058]);
5401strings[64] = str->add(strings[64]);
5402strings[1963] = str->add(strings[1963]);
5403strings[64] = str->add(strings[64]);
5404strings[1755] = str->add(strings[1755]);
5405strings[1769] = str->add(strings[1769]);
5406strings[1841] = str->add(strings[1841]);
5407strings[64] = str->add(strings[64]);
5408strings[1964] = str->add(strings[1964]);
5409strings[64] = str->add(strings[64]);
5410strings[1966] = str->add(strings[1966]);
5411strings[64] = str->add(strings[64]);
5412strings[1968] = str->add(strings[1968]);
5413strings[64] = str->add(strings[64]);
5414strings[1970] = str->add(strings[1970]);
5415str->del(strings[64]);
5416strings[379] = str->add(strings[379]);
5417strings[1769] = str->add(strings[1769]);
5418strings[1769] = str->add(strings[1769]);
5419strings[1842] = str->add(strings[1842]);
5420str->del(strings[1769]);
5421strings[64] = str->add(strings[64]);
5422strings[2058] = str->add(strings[2058]);
5423strings[51] = str->add(strings[51]);
5424strings[64] = str->add(strings[64]);
5425strings[2061] = str->add("e/shelf/default/inset");
5426strings[2061] = str->add(strings[2061]);
5427strings[1755] = str->add(strings[1755]);
5428strings[1961] = str->add(strings[1961]);
5429strings[1959] = str->add(strings[1959]);
5430str->del(strings[1755]);
5431strings[337] = str->add(strings[337]);
5432strings[64] = str->add(strings[64]);
5433strings[2062] = str->add("images/54");
5434strings[2063] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/54");
5435strings[64] = str->add(strings[64]);
5436strings[2062] = str->add(strings[2062]);
5437strings[1841] = str->add(strings[1841]);
5438str->del(strings[337]);
5439strings[337] = str->add(strings[337]);
5440strings[57] = str->add(strings[57]);
5441strings[64] = str->add(strings[64]);
5442strings[2061] = str->add(strings[2061]);
5443strings[1755] = str->add(strings[1755]);
5444strings[1961] = str->add(strings[1961]);
5445strings[1959] = str->add(strings[1959]);
5446str->del(strings[1755]);
5447strings[337] = str->add(strings[337]);
5448strings[64] = str->add(strings[64]);
5449strings[2062] = str->add(strings[2062]);
5450strings[1841] = str->add(strings[1841]);
5451str->del(strings[337]);
5452strings[337] = str->add(strings[337]);
5453strings[2064] = str->add("/home/cedric/.e/e/applications/bar/default/.order");
5454strings[2065] = str->add("base/theme/modules/ibar");
5455strings[64] = str->add(strings[64]);
5456strings[2066] = str->add("e/modules/ibar/icon");
5457str->del(strings[64]);
5458str->del(strings[2066]);
5459strings[469] = str->add(strings[469]);
5460strings[2067] = str->add("e/modules/ibar/icon");
5461strings[2067] = str->add(strings[2067]);
5462strings[1755] = str->add(strings[1755]);
5463strings[1841] = str->add(strings[1841]);
5464strings[64] = str->add(strings[64]);
5465strings[2068] = str->add("e/modules/ibar/icon_overlay");
5466str->del(strings[64]);
5467str->del(strings[2068]);
5468strings[469] = str->add(strings[469]);
5469strings[2069] = str->add("e/modules/ibar/icon_overlay");
5470strings[2069] = str->add(strings[2069]);
5471strings[469] = str->add(strings[469]);
5472strings[1755] = str->add(strings[1755]);
5473strings[1841] = str->add(strings[1841]);
5474strings[2070] = str->add("/usr/devel/share/enlightenment/data/icons/xterm.png");
5475strings[2071] = str->add("/usr/devel/share/enlightenment/data/icons/xterm.png//://(nil)//@/0/0.00000/64x64");
5476strings[2070] = str->add(strings[2070]);
5477strings[2070] = str->add(strings[2070]);
5478strings[471] = str->add(strings[471]);
5479strings[471] = str->add(strings[471]);
5480strings[2072] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj/fonts/Edje-Vera-Bold");
5481str->del(strings[471]);
5482strings[471] = str->add(strings[471]);
5483strings[469] = str->add(strings[469]);
5484strings[1842] = str->add(strings[1842]);
5485strings[1842] = str->add(strings[1842]);
5486strings[2073] = str->add("XTerm");
5487strings[469] = str->add(strings[469]);
5488strings[2067] = str->add(strings[2067]);
5489strings[1755] = str->add(strings[1755]);
5490strings[1841] = str->add(strings[1841]);
5491strings[469] = str->add(strings[469]);
5492strings[2069] = str->add(strings[2069]);
5493strings[469] = str->add(strings[469]);
5494strings[1755] = str->add(strings[1755]);
5495strings[1841] = str->add(strings[1841]);
5496strings[2074] = str->add("/usr/devel/share/enlightenment/data/icons/web_browser.png");
5497strings[2075] = str->add("/usr/devel/share/enlightenment/data/icons/web_browser.png//://(nil)//@/0/0.00000/64x64");
5498strings[2074] = str->add(strings[2074]);
5499strings[2074] = str->add(strings[2074]);
5500strings[471] = str->add(strings[471]);
5501strings[1842] = str->add(strings[1842]);
5502strings[1842] = str->add(strings[1842]);
5503strings[2076] = str->add("Firefox");
5504strings[469] = str->add(strings[469]);
5505strings[2067] = str->add(strings[2067]);
5506strings[1755] = str->add(strings[1755]);
5507strings[1841] = str->add(strings[1841]);
5508strings[469] = str->add(strings[469]);
5509strings[2069] = str->add(strings[2069]);
5510strings[469] = str->add(strings[469]);
5511strings[1755] = str->add(strings[1755]);
5512strings[1841] = str->add(strings[1841]);
5513strings[2077] = str->add("/usr/devel/share/enlightenment/data/icons/audio_player.png");
5514strings[2078] = str->add("/usr/devel/share/enlightenment/data/icons/audio_player.png//://(nil)//@/0/0.00000/64x64");
5515strings[2077] = str->add(strings[2077]);
5516strings[2077] = str->add(strings[2077]);
5517strings[471] = str->add(strings[471]);
5518strings[1842] = str->add(strings[1842]);
5519strings[1842] = str->add(strings[1842]);
5520strings[2079] = str->add("XMMS");
5521strings[58] = str->add(strings[58]);
5522strings[64] = str->add(strings[64]);
5523strings[2061] = str->add(strings[2061]);
5524strings[1755] = str->add(strings[1755]);
5525strings[1961] = str->add(strings[1961]);
5526strings[1959] = str->add(strings[1959]);
5527str->del(strings[1755]);
5528strings[337] = str->add(strings[337]);
5529strings[64] = str->add(strings[64]);
5530strings[2062] = str->add(strings[2062]);
5531strings[1841] = str->add(strings[1841]);
5532str->del(strings[337]);
5533strings[337] = str->add(strings[337]);
5534strings[2080] = str->add("base/theme/modules/temperature");
5535strings[64] = str->add(strings[64]);
5536strings[2081] = str->add("e/modules/temperature/main");
5537strings[2081] = str->add(strings[2081]);
5538strings[64] = str->add(strings[64]);
5539strings[1755] = str->add(strings[1755]);
5540strings[52] = str->add(strings[52]);
5541strings[64] = str->add(strings[64]);
5542strings[1960] = str->add(strings[1960]);
5543strings[1755] = str->add(strings[1755]);
5544strings[1961] = str->add(strings[1961]);
5545strings[1959] = str->add(strings[1959]);
5546str->del(strings[1755]);
5547strings[336] = str->add(strings[336]);
5548strings[1841] = str->add(strings[1841]);
5549strings[1841] = str->add(strings[1841]);
5550str->del(strings[336]);
5551strings[336] = str->add(strings[336]);
5552strings[2082] = str->add("base/theme/modules/cpufreq");
5553strings[64] = str->add(strings[64]);
5554strings[2083] = str->add("e/modules/cpufreq/main");
5555strings[2083] = str->add(strings[2083]);
5556strings[64] = str->add(strings[64]);
5557strings[1755] = str->add(strings[1755]);
5558strings[2084] = str->add("e,action,governor,next");
5559strings[2085] = str->add("*");
5560strings[2086] = str->add("e,action,frequency,increase");
5561strings[2085] = str->add(strings[2085]);
5562strings[2087] = str->add("e,action,frequency,decrease");
5563strings[2085] = str->add(strings[2085]);
5564strings[53] = str->add(strings[53]);
5565strings[64] = str->add(strings[64]);
5566strings[1960] = str->add(strings[1960]);
5567strings[1755] = str->add(strings[1755]);
5568strings[1961] = str->add(strings[1961]);
5569strings[1959] = str->add(strings[1959]);
5570str->del(strings[1755]);
5571strings[336] = str->add(strings[336]);
5572strings[1841] = str->add(strings[1841]);
5573strings[1841] = str->add(strings[1841]);
5574strings[2088] = str->add("e,state,enabled");
5575strings[1959] = str->add(strings[1959]);
5576str->del(strings[336]);
5577strings[336] = str->add(strings[336]);
5578strings[2089] = str->add("base/theme/modules/battery");
5579strings[64] = str->add(strings[64]);
5580strings[2090] = str->add("e/modules/battery/main");
5581strings[2090] = str->add(strings[2090]);
5582strings[64] = str->add(strings[64]);
5583strings[64] = str->add(strings[64]);
5584strings[1755] = str->add(strings[1755]);
5585strings[54] = str->add(strings[54]);
5586strings[64] = str->add(strings[64]);
5587strings[1960] = str->add(strings[1960]);
5588strings[1755] = str->add(strings[1755]);
5589strings[1961] = str->add(strings[1961]);
5590strings[1959] = str->add(strings[1959]);
5591str->del(strings[1755]);
5592strings[336] = str->add(strings[336]);
5593strings[1841] = str->add(strings[1841]);
5594strings[1841] = str->add(strings[1841]);
5595strings[64] = str->add(strings[64]);
5596strings[2091] = str->add("images/75");
5597strings[2092] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/75");
5598strings[64] = str->add(strings[64]);
5599strings[2091] = str->add(strings[2091]);
5600strings[64] = str->add(strings[64]);
5601strings[2093] = str->add("images/76");
5602strings[2094] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/76");
5603strings[64] = str->add(strings[64]);
5604strings[2093] = str->add(strings[2093]);
5605strings[64] = str->add(strings[64]);
5606strings[2095] = str->add("images/69");
5607strings[2096] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/69");
5608strings[64] = str->add(strings[64]);
5609strings[2095] = str->add(strings[2095]);
5610strings[64] = str->add(strings[64]);
5611strings[2097] = str->add("images/70");
5612strings[2098] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/70");
5613strings[64] = str->add(strings[64]);
5614strings[2097] = str->add(strings[2097]);
5615strings[64] = str->add(strings[64]);
5616strings[2099] = str->add("images/71");
5617strings[2100] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/71");
5618strings[64] = str->add(strings[64]);
5619strings[2099] = str->add(strings[2099]);
5620strings[64] = str->add(strings[64]);
5621strings[2101] = str->add("images/72");
5622strings[2102] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/72");
5623strings[64] = str->add(strings[64]);
5624strings[2101] = str->add(strings[2101]);
5625strings[64] = str->add(strings[64]);
5626strings[2103] = str->add("images/73");
5627strings[2104] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/73");
5628strings[64] = str->add(strings[64]);
5629strings[2103] = str->add(strings[2103]);
5630strings[64] = str->add(strings[64]);
5631strings[2105] = str->add("images/74");
5632strings[2106] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/74");
5633strings[64] = str->add(strings[64]);
5634strings[2105] = str->add(strings[2105]);
5635strings[64] = str->add(strings[64]);
5636strings[2107] = str->add("images/77");
5637strings[2108] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/77");
5638strings[64] = str->add(strings[64]);
5639strings[2107] = str->add(strings[2107]);
5640strings[64] = str->add(strings[64]);
5641strings[2109] = str->add("images/78");
5642strings[2110] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/78");
5643strings[64] = str->add(strings[64]);
5644strings[2109] = str->add(strings[2109]);
5645str->del(strings[64]);
5646strings[379] = str->add(strings[379]);
5647strings[1842] = str->add(strings[1842]);
5648strings[1842] = str->add(strings[1842]);
5649str->del(strings[64]);
5650strings[379] = str->add(strings[379]);
5651strings[1842] = str->add(strings[1842]);
5652strings[1842] = str->add(strings[1842]);
5653str->del(strings[336]);
5654strings[336] = str->add(strings[336]);
5655strings[2111] = str->add("base/theme/modules/clock");
5656strings[64] = str->add(strings[64]);
5657strings[2112] = str->add("e/modules/clock/main");
5658strings[2112] = str->add(strings[2112]);
5659strings[1755] = str->add(strings[1755]);
5660strings[1841] = str->add(strings[1841]);
5661strings[55] = str->add(strings[55]);
5662strings[64] = str->add(strings[64]);
5663strings[1960] = str->add(strings[1960]);
5664strings[1755] = str->add(strings[1755]);
5665strings[1961] = str->add(strings[1961]);
5666strings[1959] = str->add(strings[1959]);
5667str->del(strings[1755]);
5668strings[336] = str->add(strings[336]);
5669strings[1841] = str->add(strings[1841]);
5670str->del(strings[336]);
5671strings[336] = str->add(strings[336]);
5672strings[341] = str->add(strings[341]);
5673strings[2113] = str->add("/usr/devel/lib/enlightenment/modules/note/e-module-note.edj");
5674strings[2114] = str->add("modules/note/main");
5675strings[2113] = str->add(strings[2113]);
5676strings[379] = str->add(strings[379]);
5677strings[2115] = str->add("module_normal");
5678strings[2116] = str->add("align=left color=#000000 wrap=word");
5679strings[382] = str->add(strings[382]);
5680strings[2114] = str->add(strings[2114]);
5681strings[1755] = str->add(strings[1755]);
5682strings[10] = str->add(strings[10]);
5683strings[64] = str->add(strings[64]);
5684strings[1960] = str->add(strings[1960]);
5685strings[1755] = str->add(strings[1755]);
5686strings[1961] = str->add(strings[1961]);
5687strings[1959] = str->add(strings[1959]);
5688str->del(strings[1755]);
5689strings[336] = str->add(strings[336]);
5690strings[1841] = str->add(strings[1841]);
5691strings[1841] = str->add(strings[1841]);
5692str->del(strings[336]);
5693strings[336] = str->add(strings[336]);
5694strings[1864] = str->add(strings[1864]);
5695strings[1864] = str->add(strings[1864]);
5696strings[1864] = str->add(strings[1864]);
5697strings[1864] = str->add(strings[1864]);
5698strings[1864] = str->add(strings[1864]);
5699strings[1864] = str->add(strings[1864]);
5700strings[1864] = str->add(strings[1864]);
5701strings[1864] = str->add(strings[1864]);
5702strings[1864] = str->add(strings[1864]);
5703strings[1864] = str->add(strings[1864]);
5704strings[1864] = str->add(strings[1864]);
5705str->del(strings[1755]);
5706str->del(strings[1755]);
5707str->del(strings[1864]);
5708strings[2117] = str->add("program,start");
5709strings[1840] = str->add(strings[1840]);
5710strings[2117] = str->add(strings[2117]);
5711strings[1845] = str->add(strings[1845]);
5712strings[2117] = str->add(strings[2117]);
5713strings[1847] = str->add(strings[1847]);
5714strings[2117] = str->add(strings[2117]);
5715strings[1849] = str->add(strings[1849]);
5716strings[2117] = str->add(strings[2117]);
5717strings[1851] = str->add(strings[1851]);
5718str->del(strings[1841]);
5719str->del(strings[1755]);
5720str->del(strings[1864]);
5721str->del(strings[1841]);
5722str->del(strings[1755]);
5723str->del(strings[1864]);
5724str->del(strings[1755]);
5725str->del(strings[1864]);
5726str->del(strings[1864]);
5727str->del(strings[1755]);
5728strings[2117] = str->add(strings[2117]);
5729strings[2118] = str->add("off");
5730str->del(strings[1958]);
5731str->del(strings[1959]);
5732str->del(strings[1961]);
5733str->del(strings[1959]);
5734str->del(strings[1841]);
5735str->del(strings[1841]);
5736str->del(strings[1755]);
5737str->del(strings[1841]);
5738strings[2117] = str->add(strings[2117]);
5739strings[2119] = str->add("on");
5740str->del(strings[2060]);
5741str->del(strings[1959]);
5742str->del(strings[1755]);
5743str->del(strings[1841]);
5744str->del(strings[1755]);
5745str->del(strings[1841]);
5746str->del(strings[1755]);
5747str->del(strings[1841]);
5748str->del(strings[1755]);
5749str->del(strings[1841]);
5750str->del(strings[1755]);
5751str->del(strings[1841]);
5752str->del(strings[1755]);
5753str->del(strings[1841]);
5754str->del(strings[1755]);
5755str->del(strings[1841]);
5756str->del(strings[1755]);
5757str->del(strings[1841]);
5758str->del(strings[1755]);
5759str->del(strings[1841]);
5760str->del(strings[1961]);
5761str->del(strings[1959]);
5762str->del(strings[1841]);
5763str->del(strings[1961]);
5764str->del(strings[1959]);
5765str->del(strings[1841]);
5766str->del(strings[1755]);
5767str->del(strings[1841]);
5768str->del(strings[1755]);
5769str->del(strings[1841]);
5770str->del(strings[1755]);
5771str->del(strings[1841]);
5772str->del(strings[1755]);
5773str->del(strings[1841]);
5774str->del(strings[1755]);
5775str->del(strings[1841]);
5776str->del(strings[1755]);
5777str->del(strings[1841]);
5778str->del(strings[1961]);
5779str->del(strings[1959]);
5780str->del(strings[1841]);
5781str->del(strings[1755]);
5782str->del(strings[1961]);
5783str->del(strings[1959]);
5784str->del(strings[1841]);
5785str->del(strings[1841]);
5786str->del(strings[1755]);
5787str->del(strings[1961]);
5788str->del(strings[1959]);
5789str->del(strings[1841]);
5790str->del(strings[1841]);
5791strings[2120] = str->add("2.4");
5792strings[2117] = str->add(strings[2117]);
5793strings[2121] = str->add("enabled");
5794strings[1932] = str->add(strings[1932]);
5795strings[2121] = str->add(strings[2121]);
5796str->del(strings[2088]);
5797str->del(strings[1959]);
5798str->del(strings[1755]);
5799str->del(strings[1961]);
5800str->del(strings[1959]);
5801str->del(strings[1841]);
5802str->del(strings[1841]);
5803strings[2117] = str->add(strings[2117]);
5804strings[2122] = str->add("init");
5805strings[1932] = str->add(strings[1932]);
5806strings[2122] = str->add(strings[2122]);
5807str->del(strings[1755]);
5808str->del(strings[1841]);
5809str->del(strings[1961]);
5810str->del(strings[1959]);
5811str->del(strings[1841]);
5812str->del(strings[1755]);
5813str->del(strings[1961]);
5814str->del(strings[1959]);
5815str->del(strings[1841]);
5816str->del(strings[1841]);
5817str->del(strings[1864]);
5818str->del(strings[1864]);
5819str->del(strings[1864]);
5820str->del(strings[1864]);
5821str->del(strings[1864]);
5822str->del(strings[1864]);
5823str->del(strings[1864]);
5824str->del(strings[1864]);
5825str->del(strings[1864]);
5826str->del(strings[1864]);
5827str->del(strings[1864]);
5828str->del(strings[2117]);
5829str->del(strings[1840]);
5830str->del(strings[2117]);
5831str->del(strings[1845]);
5832str->del(strings[2117]);
5833str->del(strings[1847]);
5834str->del(strings[2117]);
5835str->del(strings[1849]);
5836str->del(strings[2117]);
5837str->del(strings[1851]);
5838str->del(strings[2117]);
5839str->del(strings[2118]);
5840str->del(strings[2117]);
5841str->del(strings[2119]);
5842str->del(strings[2117]);
5843str->del(strings[2121]);
5844str->del(strings[1932]);
5845str->del(strings[2121]);
5846str->del(strings[2117]);
5847str->del(strings[2122]);
5848str->del(strings[1932]);
5849str->del(strings[2122]);
5850strings[361] = str->add(strings[361]);
5851strings[362] = str->add(strings[362]);
5852strings[361] = str->add(strings[361]);
5853str->del(strings[361]);
5854strings[362] = str->add(strings[362]);
5855str->del(strings[362]);
5856strings[64] = str->add(strings[64]);
5857strings[1963] = str->add(strings[1963]);
5858strings[64] = str->add(strings[64]);
5859strings[2123] = str->add("load");
5860strings[1760] = str->add(strings[1760]);
5861strings[1841] = str->add(strings[1841]);
5862strings[64] = str->add(strings[64]);
5863strings[1964] = str->add(strings[1964]);
5864strings[64] = str->add(strings[64]);
5865strings[1966] = str->add(strings[1966]);
5866strings[64] = str->add(strings[64]);
5867strings[1968] = str->add(strings[1968]);
5868strings[64] = str->add(strings[64]);
5869strings[1970] = str->add(strings[1970]);
5870str->del(strings[64]);
5871strings[379] = str->add(strings[379]);
5872strings[1760] = str->add(strings[1760]);
5873strings[1760] = str->add(strings[1760]);
5874strings[1842] = str->add(strings[1842]);
5875str->del(strings[1760]);
5876strings[64] = str->add(strings[64]);
5877strings[2058] = str->add(strings[2058]);
5878strings[2124] = str->add("e,state,selected");
5879strings[2125] = str->add("e");
5880strings[64] = str->add(strings[64]);
5881strings[1963] = str->add(strings[1963]);
5882strings[64] = str->add(strings[64]);
5883strings[2123] = str->add(strings[2123]);
5884strings[1761] = str->add(strings[1761]);
5885strings[1841] = str->add(strings[1841]);
5886strings[64] = str->add(strings[64]);
5887strings[1964] = str->add(strings[1964]);
5888strings[64] = str->add(strings[64]);
5889strings[1966] = str->add(strings[1966]);
5890strings[64] = str->add(strings[64]);
5891strings[1968] = str->add(strings[1968]);
5892strings[64] = str->add(strings[64]);
5893strings[1970] = str->add(strings[1970]);
5894str->del(strings[64]);
5895strings[379] = str->add(strings[379]);
5896strings[1761] = str->add(strings[1761]);
5897strings[1761] = str->add(strings[1761]);
5898strings[1842] = str->add(strings[1842]);
5899str->del(strings[1761]);
5900strings[64] = str->add(strings[64]);
5901strings[2058] = str->add(strings[2058]);
5902strings[64] = str->add(strings[64]);
5903strings[1963] = str->add(strings[1963]);
5904strings[64] = str->add(strings[64]);
5905strings[2123] = str->add(strings[2123]);
5906strings[1762] = str->add(strings[1762]);
5907strings[1841] = str->add(strings[1841]);
5908strings[64] = str->add(strings[64]);
5909strings[1964] = str->add(strings[1964]);
5910strings[64] = str->add(strings[64]);
5911strings[1966] = str->add(strings[1966]);
5912strings[64] = str->add(strings[64]);
5913strings[1968] = str->add(strings[1968]);
5914strings[64] = str->add(strings[64]);
5915strings[1970] = str->add(strings[1970]);
5916str->del(strings[64]);
5917strings[379] = str->add(strings[379]);
5918strings[1762] = str->add(strings[1762]);
5919strings[1762] = str->add(strings[1762]);
5920strings[1842] = str->add(strings[1842]);
5921str->del(strings[1762]);
5922strings[64] = str->add(strings[64]);
5923strings[2058] = str->add(strings[2058]);
5924strings[64] = str->add(strings[64]);
5925strings[1963] = str->add(strings[1963]);
5926strings[64] = str->add(strings[64]);
5927strings[2123] = str->add(strings[2123]);
5928strings[1763] = str->add(strings[1763]);
5929strings[1841] = str->add(strings[1841]);
5930strings[64] = str->add(strings[64]);
5931strings[1964] = str->add(strings[1964]);
5932strings[64] = str->add(strings[64]);
5933strings[1966] = str->add(strings[1966]);
5934strings[64] = str->add(strings[64]);
5935strings[1968] = str->add(strings[1968]);
5936strings[64] = str->add(strings[64]);
5937strings[1970] = str->add(strings[1970]);
5938str->del(strings[64]);
5939strings[379] = str->add(strings[379]);
5940strings[1763] = str->add(strings[1763]);
5941strings[1763] = str->add(strings[1763]);
5942strings[1842] = str->add(strings[1842]);
5943str->del(strings[1763]);
5944strings[64] = str->add(strings[64]);
5945strings[2058] = str->add(strings[2058]);
5946strings[64] = str->add(strings[64]);
5947strings[1963] = str->add(strings[1963]);
5948strings[64] = str->add(strings[64]);
5949strings[2123] = str->add(strings[2123]);
5950strings[1764] = str->add(strings[1764]);
5951strings[1841] = str->add(strings[1841]);
5952strings[64] = str->add(strings[64]);
5953strings[1964] = str->add(strings[1964]);
5954strings[64] = str->add(strings[64]);
5955strings[1966] = str->add(strings[1966]);
5956strings[64] = str->add(strings[64]);
5957strings[1968] = str->add(strings[1968]);
5958strings[64] = str->add(strings[64]);
5959strings[1970] = str->add(strings[1970]);
5960str->del(strings[64]);
5961strings[379] = str->add(strings[379]);
5962strings[1764] = str->add(strings[1764]);
5963strings[1764] = str->add(strings[1764]);
5964strings[1842] = str->add(strings[1842]);
5965str->del(strings[1764]);
5966strings[64] = str->add(strings[64]);
5967strings[2058] = str->add(strings[2058]);
5968strings[64] = str->add(strings[64]);
5969strings[1963] = str->add(strings[1963]);
5970strings[64] = str->add(strings[64]);
5971strings[2123] = str->add(strings[2123]);
5972strings[1765] = str->add(strings[1765]);
5973strings[1841] = str->add(strings[1841]);
5974strings[64] = str->add(strings[64]);
5975strings[1964] = str->add(strings[1964]);
5976strings[64] = str->add(strings[64]);
5977strings[1966] = str->add(strings[1966]);
5978strings[64] = str->add(strings[64]);
5979strings[1968] = str->add(strings[1968]);
5980strings[64] = str->add(strings[64]);
5981strings[1970] = str->add(strings[1970]);
5982str->del(strings[64]);
5983strings[379] = str->add(strings[379]);
5984strings[1765] = str->add(strings[1765]);
5985strings[1765] = str->add(strings[1765]);
5986strings[1842] = str->add(strings[1842]);
5987str->del(strings[1765]);
5988strings[64] = str->add(strings[64]);
5989strings[2058] = str->add(strings[2058]);
5990strings[64] = str->add(strings[64]);
5991strings[1963] = str->add(strings[1963]);
5992strings[64] = str->add(strings[64]);
5993strings[2123] = str->add(strings[2123]);
5994strings[1766] = str->add(strings[1766]);
5995strings[1841] = str->add(strings[1841]);
5996strings[64] = str->add(strings[64]);
5997strings[1964] = str->add(strings[1964]);
5998strings[64] = str->add(strings[64]);
5999strings[1966] = str->add(strings[1966]);
6000strings[64] = str->add(strings[64]);
6001strings[1968] = str->add(strings[1968]);
6002strings[64] = str->add(strings[64]);
6003strings[1970] = str->add(strings[1970]);
6004str->del(strings[64]);
6005strings[379] = str->add(strings[379]);
6006strings[1766] = str->add(strings[1766]);
6007strings[1766] = str->add(strings[1766]);
6008strings[1842] = str->add(strings[1842]);
6009str->del(strings[1766]);
6010strings[64] = str->add(strings[64]);
6011strings[2058] = str->add(strings[2058]);
6012strings[64] = str->add(strings[64]);
6013strings[1963] = str->add(strings[1963]);
6014strings[64] = str->add(strings[64]);
6015strings[2123] = str->add(strings[2123]);
6016strings[1767] = str->add(strings[1767]);
6017strings[1841] = str->add(strings[1841]);
6018strings[64] = str->add(strings[64]);
6019strings[1964] = str->add(strings[1964]);
6020strings[64] = str->add(strings[64]);
6021strings[1966] = str->add(strings[1966]);
6022strings[64] = str->add(strings[64]);
6023strings[1968] = str->add(strings[1968]);
6024strings[64] = str->add(strings[64]);
6025strings[1970] = str->add(strings[1970]);
6026str->del(strings[64]);
6027strings[379] = str->add(strings[379]);
6028strings[1767] = str->add(strings[1767]);
6029strings[1767] = str->add(strings[1767]);
6030strings[1842] = str->add(strings[1842]);
6031str->del(strings[1767]);
6032strings[64] = str->add(strings[64]);
6033strings[2058] = str->add(strings[2058]);
6034strings[64] = str->add(strings[64]);
6035strings[1963] = str->add(strings[1963]);
6036strings[64] = str->add(strings[64]);
6037strings[2123] = str->add(strings[2123]);
6038strings[1768] = str->add(strings[1768]);
6039strings[1841] = str->add(strings[1841]);
6040strings[64] = str->add(strings[64]);
6041strings[1964] = str->add(strings[1964]);
6042strings[64] = str->add(strings[64]);
6043strings[1966] = str->add(strings[1966]);
6044strings[64] = str->add(strings[64]);
6045strings[1968] = str->add(strings[1968]);
6046strings[64] = str->add(strings[64]);
6047strings[1970] = str->add(strings[1970]);
6048str->del(strings[64]);
6049strings[379] = str->add(strings[379]);
6050strings[1768] = str->add(strings[1768]);
6051strings[1768] = str->add(strings[1768]);
6052strings[1842] = str->add(strings[1842]);
6053str->del(strings[1768]);
6054strings[64] = str->add(strings[64]);
6055strings[2058] = str->add(strings[2058]);
6056strings[64] = str->add(strings[64]);
6057strings[1963] = str->add(strings[1963]);
6058strings[64] = str->add(strings[64]);
6059strings[2123] = str->add(strings[2123]);
6060strings[1769] = str->add(strings[1769]);
6061strings[1841] = str->add(strings[1841]);
6062strings[64] = str->add(strings[64]);
6063strings[1964] = str->add(strings[1964]);
6064strings[64] = str->add(strings[64]);
6065strings[1966] = str->add(strings[1966]);
6066strings[64] = str->add(strings[64]);
6067strings[1968] = str->add(strings[1968]);
6068strings[64] = str->add(strings[64]);
6069strings[1970] = str->add(strings[1970]);
6070str->del(strings[64]);
6071strings[379] = str->add(strings[379]);
6072strings[1769] = str->add(strings[1769]);
6073strings[1769] = str->add(strings[1769]);
6074strings[1842] = str->add(strings[1842]);
6075str->del(strings[1769]);
6076strings[64] = str->add(strings[64]);
6077strings[2058] = str->add(strings[2058]);
6078strings[2126] = str->add("resize");
6079strings[2126] = str->add(strings[2126]);
6080strings[2126] = str->add(strings[2126]);
6081strings[2126] = str->add(strings[2126]);
6082strings[2126] = str->add(strings[2126]);
6083strings[2126] = str->add(strings[2126]);
6084strings[2126] = str->add(strings[2126]);
6085strings[2126] = str->add(strings[2126]);
6086strings[2126] = str->add(strings[2126]);
6087strings[2126] = str->add(strings[2126]);
6088strings[64] = str->add(strings[64]);
6089strings[2127] = str->add("e/modules/pager/popup");
6090strings[2127] = str->add(strings[2127]);
6091strings[64] = str->add(strings[64]);
6092strings[2123] = str->add(strings[2123]);
6093strings[1760] = str->add(strings[1760]);
6094strings[1841] = str->add(strings[1841]);
6095strings[64] = str->add(strings[64]);
6096strings[1949] = str->add(strings[1949]);
6097strings[64] = str->add(strings[64]);
6098strings[1880] = str->add(strings[1880]);
6099strings[2128] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/3");
6100strings[64] = str->add(strings[64]);
6101strings[1880] = str->add(strings[1880]);
6102str->del(strings[64]);
6103strings[379] = str->add(strings[379]);
6104strings[2129] = str->add("Sans:style=Bold");
6105strings[2130] = str->add("Edje-Vera-Bold");
6106str->del(strings[2129]);
6107str->del(strings[2130]);
6108strings[379] = str->add(strings[379]);
6109strings[1760] = str->add(strings[1760]);
6110strings[1760] = str->add(strings[1760]);
6111strings[1760] = str->add(strings[1760]);
6112strings[64] = str->add(strings[64]);
6113strings[1876] = str->add(strings[1876]);
6114strings[2131] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/5");
6115strings[64] = str->add(strings[64]);
6116strings[1876] = str->add(strings[1876]);
6117strings[64] = str->add(strings[64]);
6118strings[1874] = str->add(strings[1874]);
6119strings[2132] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/6");
6120strings[64] = str->add(strings[64]);
6121strings[1874] = str->add(strings[1874]);
6122strings[2126] = str->add(strings[2126]);
6123strings[1933] = str->add(strings[1933]);
6124str->del(strings[1933]);
6125str->del(strings[1760]);
6126str->del(strings[1760]);
6127str->del(strings[1842]);
6128str->del(strings[64]);
6129str->del(strings[1963]);
6130strings[1933] = str->add(strings[1933]);
6131str->del(strings[1933]);
6132str->del(strings[1761]);
6133str->del(strings[1761]);
6134str->del(strings[1842]);
6135str->del(strings[64]);
6136str->del(strings[1963]);
6137strings[1933] = str->add(strings[1933]);
6138str->del(strings[1933]);
6139str->del(strings[1762]);
6140str->del(strings[1762]);
6141str->del(strings[1842]);
6142str->del(strings[64]);
6143str->del(strings[1963]);
6144strings[1933] = str->add(strings[1933]);
6145str->del(strings[1933]);
6146str->del(strings[1763]);
6147str->del(strings[1763]);
6148str->del(strings[1842]);
6149str->del(strings[64]);
6150str->del(strings[1963]);
6151strings[1933] = str->add(strings[1933]);
6152str->del(strings[1933]);
6153str->del(strings[1764]);
6154str->del(strings[1764]);
6155str->del(strings[1842]);
6156str->del(strings[64]);
6157str->del(strings[1963]);
6158strings[1933] = str->add(strings[1933]);
6159str->del(strings[1933]);
6160str->del(strings[1765]);
6161str->del(strings[1765]);
6162str->del(strings[1842]);
6163str->del(strings[64]);
6164str->del(strings[1963]);
6165strings[1933] = str->add(strings[1933]);
6166str->del(strings[1933]);
6167str->del(strings[1766]);
6168str->del(strings[1766]);
6169str->del(strings[1842]);
6170str->del(strings[64]);
6171str->del(strings[1963]);
6172strings[1933] = str->add(strings[1933]);
6173str->del(strings[1933]);
6174str->del(strings[1767]);
6175str->del(strings[1767]);
6176str->del(strings[1842]);
6177str->del(strings[64]);
6178str->del(strings[1963]);
6179strings[1933] = str->add(strings[1933]);
6180str->del(strings[1933]);
6181str->del(strings[1768]);
6182str->del(strings[1768]);
6183str->del(strings[1842]);
6184str->del(strings[64]);
6185str->del(strings[1963]);
6186strings[1933] = str->add(strings[1933]);
6187str->del(strings[1933]);
6188str->del(strings[1769]);
6189str->del(strings[1769]);
6190str->del(strings[1842]);
6191str->del(strings[64]);
6192str->del(strings[1963]);
6193strings[64] = str->add(strings[64]);
6194strings[1963] = str->add(strings[1963]);
6195strings[64] = str->add(strings[64]);
6196strings[2123] = str->add(strings[2123]);
6197strings[1760] = str->add(strings[1760]);
6198strings[1841] = str->add(strings[1841]);
6199strings[64] = str->add(strings[64]);
6200strings[1964] = str->add(strings[1964]);
6201strings[64] = str->add(strings[64]);
6202strings[1966] = str->add(strings[1966]);
6203strings[64] = str->add(strings[64]);
6204strings[1968] = str->add(strings[1968]);
6205strings[64] = str->add(strings[64]);
6206strings[1970] = str->add(strings[1970]);
6207str->del(strings[64]);
6208strings[379] = str->add(strings[379]);
6209strings[1760] = str->add(strings[1760]);
6210strings[1760] = str->add(strings[1760]);
6211strings[1842] = str->add(strings[1842]);
6212str->del(strings[1760]);
6213strings[64] = str->add(strings[64]);
6214strings[2058] = str->add(strings[2058]);
6215strings[2124] = str->add(strings[2124]);
6216strings[2125] = str->add(strings[2125]);
6217strings[64] = str->add(strings[64]);
6218strings[1963] = str->add(strings[1963]);
6219strings[64] = str->add(strings[64]);
6220strings[2123] = str->add(strings[2123]);
6221strings[1761] = str->add(strings[1761]);
6222strings[1841] = str->add(strings[1841]);
6223strings[64] = str->add(strings[64]);
6224strings[1964] = str->add(strings[1964]);
6225strings[64] = str->add(strings[64]);
6226strings[1966] = str->add(strings[1966]);
6227strings[64] = str->add(strings[64]);
6228strings[1968] = str->add(strings[1968]);
6229strings[64] = str->add(strings[64]);
6230strings[1970] = str->add(strings[1970]);
6231str->del(strings[64]);
6232strings[379] = str->add(strings[379]);
6233strings[1761] = str->add(strings[1761]);
6234strings[1761] = str->add(strings[1761]);
6235strings[1842] = str->add(strings[1842]);
6236str->del(strings[1761]);
6237strings[64] = str->add(strings[64]);
6238strings[2058] = str->add(strings[2058]);
6239strings[64] = str->add(strings[64]);
6240strings[1963] = str->add(strings[1963]);
6241strings[64] = str->add(strings[64]);
6242strings[2123] = str->add(strings[2123]);
6243strings[1762] = str->add(strings[1762]);
6244strings[1841] = str->add(strings[1841]);
6245strings[64] = str->add(strings[64]);
6246strings[1964] = str->add(strings[1964]);
6247strings[64] = str->add(strings[64]);
6248strings[1966] = str->add(strings[1966]);
6249strings[64] = str->add(strings[64]);
6250strings[1968] = str->add(strings[1968]);
6251strings[64] = str->add(strings[64]);
6252strings[1970] = str->add(strings[1970]);
6253str->del(strings[64]);
6254strings[379] = str->add(strings[379]);
6255strings[1762] = str->add(strings[1762]);
6256strings[1762] = str->add(strings[1762]);
6257strings[1842] = str->add(strings[1842]);
6258str->del(strings[1762]);
6259strings[64] = str->add(strings[64]);
6260strings[2058] = str->add(strings[2058]);
6261strings[64] = str->add(strings[64]);
6262strings[1963] = str->add(strings[1963]);
6263strings[64] = str->add(strings[64]);
6264strings[2123] = str->add(strings[2123]);
6265strings[1763] = str->add(strings[1763]);
6266strings[1841] = str->add(strings[1841]);
6267strings[64] = str->add(strings[64]);
6268strings[1964] = str->add(strings[1964]);
6269strings[64] = str->add(strings[64]);
6270strings[1966] = str->add(strings[1966]);
6271strings[64] = str->add(strings[64]);
6272strings[1968] = str->add(strings[1968]);
6273strings[64] = str->add(strings[64]);
6274strings[1970] = str->add(strings[1970]);
6275str->del(strings[64]);
6276strings[379] = str->add(strings[379]);
6277strings[1763] = str->add(strings[1763]);
6278strings[1763] = str->add(strings[1763]);
6279strings[1842] = str->add(strings[1842]);
6280str->del(strings[1763]);
6281strings[64] = str->add(strings[64]);
6282strings[2058] = str->add(strings[2058]);
6283strings[64] = str->add(strings[64]);
6284strings[1963] = str->add(strings[1963]);
6285strings[64] = str->add(strings[64]);
6286strings[2123] = str->add(strings[2123]);
6287strings[1764] = str->add(strings[1764]);
6288strings[1841] = str->add(strings[1841]);
6289strings[64] = str->add(strings[64]);
6290strings[1964] = str->add(strings[1964]);
6291strings[64] = str->add(strings[64]);
6292strings[1966] = str->add(strings[1966]);
6293strings[64] = str->add(strings[64]);
6294strings[1968] = str->add(strings[1968]);
6295strings[64] = str->add(strings[64]);
6296strings[1970] = str->add(strings[1970]);
6297str->del(strings[64]);
6298strings[379] = str->add(strings[379]);
6299strings[1764] = str->add(strings[1764]);
6300strings[1764] = str->add(strings[1764]);
6301strings[1842] = str->add(strings[1842]);
6302str->del(strings[1764]);
6303strings[64] = str->add(strings[64]);
6304strings[2058] = str->add(strings[2058]);
6305strings[64] = str->add(strings[64]);
6306strings[1963] = str->add(strings[1963]);
6307strings[64] = str->add(strings[64]);
6308strings[2123] = str->add(strings[2123]);
6309strings[1765] = str->add(strings[1765]);
6310strings[1841] = str->add(strings[1841]);
6311strings[64] = str->add(strings[64]);
6312strings[1964] = str->add(strings[1964]);
6313strings[64] = str->add(strings[64]);
6314strings[1966] = str->add(strings[1966]);
6315strings[64] = str->add(strings[64]);
6316strings[1968] = str->add(strings[1968]);
6317strings[64] = str->add(strings[64]);
6318strings[1970] = str->add(strings[1970]);
6319str->del(strings[64]);
6320strings[379] = str->add(strings[379]);
6321strings[1765] = str->add(strings[1765]);
6322strings[1765] = str->add(strings[1765]);
6323strings[1842] = str->add(strings[1842]);
6324str->del(strings[1765]);
6325strings[64] = str->add(strings[64]);
6326strings[2058] = str->add(strings[2058]);
6327strings[64] = str->add(strings[64]);
6328strings[1963] = str->add(strings[1963]);
6329strings[64] = str->add(strings[64]);
6330strings[2123] = str->add(strings[2123]);
6331strings[1766] = str->add(strings[1766]);
6332strings[1841] = str->add(strings[1841]);
6333strings[64] = str->add(strings[64]);
6334strings[1964] = str->add(strings[1964]);
6335strings[64] = str->add(strings[64]);
6336strings[1966] = str->add(strings[1966]);
6337strings[64] = str->add(strings[64]);
6338strings[1968] = str->add(strings[1968]);
6339strings[64] = str->add(strings[64]);
6340strings[1970] = str->add(strings[1970]);
6341str->del(strings[64]);
6342strings[379] = str->add(strings[379]);
6343strings[1766] = str->add(strings[1766]);
6344strings[1766] = str->add(strings[1766]);
6345strings[1842] = str->add(strings[1842]);
6346str->del(strings[1766]);
6347strings[64] = str->add(strings[64]);
6348strings[2058] = str->add(strings[2058]);
6349strings[64] = str->add(strings[64]);
6350strings[1963] = str->add(strings[1963]);
6351strings[64] = str->add(strings[64]);
6352strings[2123] = str->add(strings[2123]);
6353strings[1767] = str->add(strings[1767]);
6354strings[1841] = str->add(strings[1841]);
6355strings[64] = str->add(strings[64]);
6356strings[1964] = str->add(strings[1964]);
6357strings[64] = str->add(strings[64]);
6358strings[1966] = str->add(strings[1966]);
6359strings[64] = str->add(strings[64]);
6360strings[1968] = str->add(strings[1968]);
6361strings[64] = str->add(strings[64]);
6362strings[1970] = str->add(strings[1970]);
6363str->del(strings[64]);
6364strings[379] = str->add(strings[379]);
6365strings[1767] = str->add(strings[1767]);
6366strings[1767] = str->add(strings[1767]);
6367strings[1842] = str->add(strings[1842]);
6368str->del(strings[1767]);
6369strings[64] = str->add(strings[64]);
6370strings[2058] = str->add(strings[2058]);
6371strings[64] = str->add(strings[64]);
6372strings[1963] = str->add(strings[1963]);
6373strings[64] = str->add(strings[64]);
6374strings[2123] = str->add(strings[2123]);
6375strings[1768] = str->add(strings[1768]);
6376strings[1841] = str->add(strings[1841]);
6377strings[64] = str->add(strings[64]);
6378strings[1964] = str->add(strings[1964]);
6379strings[64] = str->add(strings[64]);
6380strings[1966] = str->add(strings[1966]);
6381strings[64] = str->add(strings[64]);
6382strings[1968] = str->add(strings[1968]);
6383strings[64] = str->add(strings[64]);
6384strings[1970] = str->add(strings[1970]);
6385str->del(strings[64]);
6386strings[379] = str->add(strings[379]);
6387strings[1768] = str->add(strings[1768]);
6388strings[1768] = str->add(strings[1768]);
6389strings[1842] = str->add(strings[1842]);
6390str->del(strings[1768]);
6391strings[64] = str->add(strings[64]);
6392strings[2058] = str->add(strings[2058]);
6393strings[64] = str->add(strings[64]);
6394strings[1963] = str->add(strings[1963]);
6395strings[64] = str->add(strings[64]);
6396strings[2123] = str->add(strings[2123]);
6397strings[1769] = str->add(strings[1769]);
6398strings[1841] = str->add(strings[1841]);
6399strings[64] = str->add(strings[64]);
6400strings[1964] = str->add(strings[1964]);
6401strings[64] = str->add(strings[64]);
6402strings[1966] = str->add(strings[1966]);
6403strings[64] = str->add(strings[64]);
6404strings[1968] = str->add(strings[1968]);
6405strings[64] = str->add(strings[64]);
6406strings[1970] = str->add(strings[1970]);
6407str->del(strings[64]);
6408strings[379] = str->add(strings[379]);
6409strings[1769] = str->add(strings[1769]);
6410strings[1769] = str->add(strings[1769]);
6411strings[1842] = str->add(strings[1842]);
6412str->del(strings[1769]);
6413strings[64] = str->add(strings[64]);
6414strings[2058] = str->add(strings[2058]);
6415strings[2126] = str->add(strings[2126]);
6416strings[1933] = str->add(strings[1933]);
6417str->del(strings[2123]);
6418str->del(strings[1841]);
6419str->del(strings[2124]);
6420str->del(strings[2125]);
6421str->del(strings[2126]);
6422str->del(strings[1933]);
6423str->del(strings[1760]);
6424str->del(strings[1760]);
6425str->del(strings[1842]);
6426str->del(strings[64]);
6427str->del(strings[1963]);
6428strings[1933] = str->add(strings[1933]);
6429str->del(strings[2123]);
6430str->del(strings[1841]);
6431str->del(strings[2126]);
6432str->del(strings[1933]);
6433str->del(strings[1761]);
6434str->del(strings[1761]);
6435str->del(strings[1842]);
6436str->del(strings[64]);
6437str->del(strings[1963]);
6438strings[1933] = str->add(strings[1933]);
6439str->del(strings[2123]);
6440str->del(strings[1841]);
6441str->del(strings[2126]);
6442str->del(strings[1933]);
6443str->del(strings[1762]);
6444str->del(strings[1762]);
6445str->del(strings[1842]);
6446str->del(strings[64]);
6447str->del(strings[1963]);
6448strings[1933] = str->add(strings[1933]);
6449str->del(strings[2123]);
6450str->del(strings[1841]);
6451str->del(strings[2126]);
6452str->del(strings[1933]);
6453str->del(strings[1763]);
6454str->del(strings[1763]);
6455str->del(strings[1842]);
6456str->del(strings[64]);
6457str->del(strings[1963]);
6458strings[1933] = str->add(strings[1933]);
6459str->del(strings[2123]);
6460str->del(strings[1841]);
6461str->del(strings[2126]);
6462str->del(strings[1933]);
6463str->del(strings[1764]);
6464str->del(strings[1764]);
6465str->del(strings[1842]);
6466str->del(strings[64]);
6467str->del(strings[1963]);
6468strings[1933] = str->add(strings[1933]);
6469str->del(strings[2123]);
6470str->del(strings[1841]);
6471str->del(strings[2126]);
6472str->del(strings[1933]);
6473str->del(strings[1765]);
6474str->del(strings[1765]);
6475str->del(strings[1842]);
6476str->del(strings[64]);
6477str->del(strings[1963]);
6478strings[1933] = str->add(strings[1933]);
6479str->del(strings[2123]);
6480str->del(strings[1841]);
6481str->del(strings[2126]);
6482str->del(strings[1933]);
6483str->del(strings[1766]);
6484str->del(strings[1766]);
6485str->del(strings[1842]);
6486str->del(strings[64]);
6487str->del(strings[1963]);
6488strings[1933] = str->add(strings[1933]);
6489str->del(strings[2123]);
6490str->del(strings[1841]);
6491str->del(strings[2126]);
6492str->del(strings[1933]);
6493str->del(strings[1767]);
6494str->del(strings[1767]);
6495str->del(strings[1842]);
6496str->del(strings[64]);
6497str->del(strings[1963]);
6498strings[1933] = str->add(strings[1933]);
6499str->del(strings[2123]);
6500str->del(strings[1841]);
6501str->del(strings[2126]);
6502str->del(strings[1933]);
6503str->del(strings[1768]);
6504str->del(strings[1768]);
6505str->del(strings[1842]);
6506str->del(strings[64]);
6507str->del(strings[1963]);
6508strings[1933] = str->add(strings[1933]);
6509str->del(strings[2123]);
6510str->del(strings[1841]);
6511str->del(strings[2126]);
6512str->del(strings[1933]);
6513str->del(strings[1769]);
6514str->del(strings[1769]);
6515str->del(strings[1842]);
6516str->del(strings[64]);
6517str->del(strings[1963]);
6518strings[64] = str->add(strings[64]);
6519strings[1963] = str->add(strings[1963]);
6520strings[64] = str->add(strings[64]);
6521strings[2123] = str->add(strings[2123]);
6522strings[1760] = str->add(strings[1760]);
6523strings[2126] = str->add(strings[2126]);
6524strings[1841] = str->add(strings[1841]);
6525strings[64] = str->add(strings[64]);
6526strings[1964] = str->add(strings[1964]);
6527strings[64] = str->add(strings[64]);
6528strings[1966] = str->add(strings[1966]);
6529strings[64] = str->add(strings[64]);
6530strings[1968] = str->add(strings[1968]);
6531strings[64] = str->add(strings[64]);
6532strings[1970] = str->add(strings[1970]);
6533str->del(strings[64]);
6534strings[379] = str->add(strings[379]);
6535strings[1760] = str->add(strings[1760]);
6536strings[1760] = str->add(strings[1760]);
6537strings[1760] = str->add(strings[1760]);
6538strings[64] = str->add(strings[64]);
6539strings[2058] = str->add(strings[2058]);
6540strings[2124] = str->add(strings[2124]);
6541strings[2125] = str->add(strings[2125]);
6542strings[64] = str->add(strings[64]);
6543strings[1963] = str->add(strings[1963]);
6544strings[64] = str->add(strings[64]);
6545strings[2123] = str->add(strings[2123]);
6546strings[1761] = str->add(strings[1761]);
6547strings[2126] = str->add(strings[2126]);
6548strings[2126] = str->add(strings[2126]);
6549strings[1841] = str->add(strings[1841]);
6550strings[64] = str->add(strings[64]);
6551strings[1964] = str->add(strings[1964]);
6552strings[64] = str->add(strings[64]);
6553strings[1966] = str->add(strings[1966]);
6554strings[64] = str->add(strings[64]);
6555strings[1968] = str->add(strings[1968]);
6556strings[64] = str->add(strings[64]);
6557strings[1970] = str->add(strings[1970]);
6558str->del(strings[64]);
6559strings[379] = str->add(strings[379]);
6560strings[1761] = str->add(strings[1761]);
6561strings[1761] = str->add(strings[1761]);
6562strings[1761] = str->add(strings[1761]);
6563strings[64] = str->add(strings[64]);
6564strings[2058] = str->add(strings[2058]);
6565strings[64] = str->add(strings[64]);
6566strings[1963] = str->add(strings[1963]);
6567strings[64] = str->add(strings[64]);
6568strings[2123] = str->add(strings[2123]);
6569strings[1762] = str->add(strings[1762]);
6570strings[2126] = str->add(strings[2126]);
6571strings[2126] = str->add(strings[2126]);
6572strings[2126] = str->add(strings[2126]);
6573strings[1841] = str->add(strings[1841]);
6574strings[64] = str->add(strings[64]);
6575strings[1964] = str->add(strings[1964]);
6576strings[64] = str->add(strings[64]);
6577strings[1966] = str->add(strings[1966]);
6578strings[64] = str->add(strings[64]);
6579strings[1968] = str->add(strings[1968]);
6580strings[64] = str->add(strings[64]);
6581strings[1970] = str->add(strings[1970]);
6582str->del(strings[64]);
6583strings[379] = str->add(strings[379]);
6584strings[1762] = str->add(strings[1762]);
6585strings[1762] = str->add(strings[1762]);
6586strings[1762] = str->add(strings[1762]);
6587strings[64] = str->add(strings[64]);
6588strings[2058] = str->add(strings[2058]);
6589strings[64] = str->add(strings[64]);
6590strings[1963] = str->add(strings[1963]);
6591strings[64] = str->add(strings[64]);
6592strings[2123] = str->add(strings[2123]);
6593strings[1763] = str->add(strings[1763]);
6594strings[2126] = str->add(strings[2126]);
6595strings[1841] = str->add(strings[1841]);
6596strings[64] = str->add(strings[64]);
6597strings[1964] = str->add(strings[1964]);
6598strings[64] = str->add(strings[64]);
6599strings[1966] = str->add(strings[1966]);
6600strings[64] = str->add(strings[64]);
6601strings[1968] = str->add(strings[1968]);
6602strings[64] = str->add(strings[64]);
6603strings[1970] = str->add(strings[1970]);
6604str->del(strings[64]);
6605strings[379] = str->add(strings[379]);
6606strings[1763] = str->add(strings[1763]);
6607strings[1763] = str->add(strings[1763]);
6608strings[1763] = str->add(strings[1763]);
6609strings[64] = str->add(strings[64]);
6610strings[2058] = str->add(strings[2058]);
6611strings[64] = str->add(strings[64]);
6612strings[1963] = str->add(strings[1963]);
6613strings[64] = str->add(strings[64]);
6614strings[2123] = str->add(strings[2123]);
6615strings[1764] = str->add(strings[1764]);
6616strings[2126] = str->add(strings[2126]);
6617strings[2126] = str->add(strings[2126]);
6618strings[2126] = str->add(strings[2126]);
6619strings[2126] = str->add(strings[2126]);
6620strings[2126] = str->add(strings[2126]);
6621strings[1841] = str->add(strings[1841]);
6622strings[64] = str->add(strings[64]);
6623strings[1964] = str->add(strings[1964]);
6624strings[64] = str->add(strings[64]);
6625strings[1966] = str->add(strings[1966]);
6626strings[64] = str->add(strings[64]);
6627strings[1968] = str->add(strings[1968]);
6628strings[64] = str->add(strings[64]);
6629strings[1970] = str->add(strings[1970]);
6630str->del(strings[64]);
6631strings[379] = str->add(strings[379]);
6632strings[1764] = str->add(strings[1764]);
6633strings[1764] = str->add(strings[1764]);
6634strings[1764] = str->add(strings[1764]);
6635strings[64] = str->add(strings[64]);
6636strings[2058] = str->add(strings[2058]);
6637strings[64] = str->add(strings[64]);
6638strings[1963] = str->add(strings[1963]);
6639strings[64] = str->add(strings[64]);
6640strings[2123] = str->add(strings[2123]);
6641strings[1765] = str->add(strings[1765]);
6642strings[2126] = str->add(strings[2126]);
6643strings[1841] = str->add(strings[1841]);
6644strings[64] = str->add(strings[64]);
6645strings[1964] = str->add(strings[1964]);
6646strings[64] = str->add(strings[64]);
6647strings[1966] = str->add(strings[1966]);
6648strings[64] = str->add(strings[64]);
6649strings[1968] = str->add(strings[1968]);
6650strings[64] = str->add(strings[64]);
6651strings[1970] = str->add(strings[1970]);
6652str->del(strings[64]);
6653strings[379] = str->add(strings[379]);
6654strings[1765] = str->add(strings[1765]);
6655strings[1765] = str->add(strings[1765]);
6656strings[1765] = str->add(strings[1765]);
6657strings[64] = str->add(strings[64]);
6658strings[2058] = str->add(strings[2058]);
6659strings[64] = str->add(strings[64]);
6660strings[1963] = str->add(strings[1963]);
6661strings[64] = str->add(strings[64]);
6662strings[2123] = str->add(strings[2123]);
6663strings[1766] = str->add(strings[1766]);
6664strings[2126] = str->add(strings[2126]);
6665strings[2126] = str->add(strings[2126]);
6666strings[2126] = str->add(strings[2126]);
6667strings[2126] = str->add(strings[2126]);
6668strings[2126] = str->add(strings[2126]);
6669strings[2126] = str->add(strings[2126]);
6670strings[2126] = str->add(strings[2126]);
6671strings[1841] = str->add(strings[1841]);
6672strings[64] = str->add(strings[64]);
6673strings[1964] = str->add(strings[1964]);
6674strings[64] = str->add(strings[64]);
6675strings[1966] = str->add(strings[1966]);
6676strings[64] = str->add(strings[64]);
6677strings[1968] = str->add(strings[1968]);
6678strings[64] = str->add(strings[64]);
6679strings[1970] = str->add(strings[1970]);
6680str->del(strings[64]);
6681strings[379] = str->add(strings[379]);
6682strings[1766] = str->add(strings[1766]);
6683strings[1766] = str->add(strings[1766]);
6684strings[1766] = str->add(strings[1766]);
6685strings[64] = str->add(strings[64]);
6686strings[2058] = str->add(strings[2058]);
6687strings[64] = str->add(strings[64]);
6688strings[1963] = str->add(strings[1963]);
6689strings[64] = str->add(strings[64]);
6690strings[2123] = str->add(strings[2123]);
6691strings[1767] = str->add(strings[1767]);
6692strings[2126] = str->add(strings[2126]);
6693strings[1841] = str->add(strings[1841]);
6694strings[64] = str->add(strings[64]);
6695strings[1964] = str->add(strings[1964]);
6696strings[64] = str->add(strings[64]);
6697strings[1966] = str->add(strings[1966]);
6698strings[64] = str->add(strings[64]);
6699strings[1968] = str->add(strings[1968]);
6700strings[64] = str->add(strings[64]);
6701strings[1970] = str->add(strings[1970]);
6702str->del(strings[64]);
6703strings[379] = str->add(strings[379]);
6704strings[1767] = str->add(strings[1767]);
6705strings[1767] = str->add(strings[1767]);
6706strings[1767] = str->add(strings[1767]);
6707strings[64] = str->add(strings[64]);
6708strings[2058] = str->add(strings[2058]);
6709strings[64] = str->add(strings[64]);
6710strings[1963] = str->add(strings[1963]);
6711strings[64] = str->add(strings[64]);
6712strings[2123] = str->add(strings[2123]);
6713strings[1768] = str->add(strings[1768]);
6714strings[2126] = str->add(strings[2126]);
6715strings[2126] = str->add(strings[2126]);
6716strings[2126] = str->add(strings[2126]);
6717strings[2126] = str->add(strings[2126]);
6718strings[2126] = str->add(strings[2126]);
6719strings[2126] = str->add(strings[2126]);
6720strings[2126] = str->add(strings[2126]);
6721strings[2126] = str->add(strings[2126]);
6722strings[2126] = str->add(strings[2126]);
6723strings[1841] = str->add(strings[1841]);
6724strings[64] = str->add(strings[64]);
6725strings[1964] = str->add(strings[1964]);
6726strings[64] = str->add(strings[64]);
6727strings[1966] = str->add(strings[1966]);
6728strings[64] = str->add(strings[64]);
6729strings[1968] = str->add(strings[1968]);
6730strings[64] = str->add(strings[64]);
6731strings[1970] = str->add(strings[1970]);
6732str->del(strings[64]);
6733strings[379] = str->add(strings[379]);
6734strings[1768] = str->add(strings[1768]);
6735strings[1768] = str->add(strings[1768]);
6736strings[1768] = str->add(strings[1768]);
6737strings[64] = str->add(strings[64]);
6738strings[2058] = str->add(strings[2058]);
6739strings[64] = str->add(strings[64]);
6740strings[1963] = str->add(strings[1963]);
6741strings[64] = str->add(strings[64]);
6742strings[2123] = str->add(strings[2123]);
6743strings[1769] = str->add(strings[1769]);
6744strings[2126] = str->add(strings[2126]);
6745strings[1841] = str->add(strings[1841]);
6746strings[64] = str->add(strings[64]);
6747strings[1964] = str->add(strings[1964]);
6748strings[64] = str->add(strings[64]);
6749strings[1966] = str->add(strings[1966]);
6750strings[64] = str->add(strings[64]);
6751strings[1968] = str->add(strings[1968]);
6752strings[64] = str->add(strings[64]);
6753strings[1970] = str->add(strings[1970]);
6754str->del(strings[64]);
6755strings[379] = str->add(strings[379]);
6756strings[1769] = str->add(strings[1769]);
6757strings[1769] = str->add(strings[1769]);
6758strings[1769] = str->add(strings[1769]);
6759strings[64] = str->add(strings[64]);
6760strings[2058] = str->add(strings[2058]);
6761strings[2073] = str->add(strings[2073]);
6762str->del(strings[1842]);
6763strings[2073] = str->add(strings[2073]);
6764str->del(strings[1842]);
6765strings[2073] = str->add(strings[2073]);
6766strings[1933] = str->add(strings[1933]);
6767str->del(strings[1933]);
6768str->del(strings[469]);
6769str->del(strings[2067]);
6770strings[1933] = str->add(strings[1933]);
6771str->del(strings[1933]);
6772str->del(strings[2073]);
6773str->del(strings[2073]);
6774str->del(strings[2073]);
6775str->del(strings[469]);
6776str->del(strings[2069]);
6777strings[2076] = str->add(strings[2076]);
6778str->del(strings[1842]);
6779strings[2076] = str->add(strings[2076]);
6780str->del(strings[1842]);
6781strings[2076] = str->add(strings[2076]);
6782strings[1933] = str->add(strings[1933]);
6783str->del(strings[1933]);
6784str->del(strings[469]);
6785str->del(strings[2067]);
6786strings[1933] = str->add(strings[1933]);
6787str->del(strings[1933]);
6788str->del(strings[2076]);
6789str->del(strings[2076]);
6790str->del(strings[2076]);
6791str->del(strings[469]);
6792str->del(strings[2069]);
6793strings[2079] = str->add(strings[2079]);
6794str->del(strings[1842]);
6795strings[2079] = str->add(strings[2079]);
6796str->del(strings[1842]);
6797strings[2079] = str->add(strings[2079]);
6798strings[1933] = str->add(strings[1933]);
6799str->del(strings[1933]);
6800str->del(strings[469]);
6801str->del(strings[2067]);
6802strings[1933] = str->add(strings[1933]);
6803str->del(strings[1933]);
6804str->del(strings[2079]);
6805str->del(strings[2079]);
6806str->del(strings[2079]);
6807str->del(strings[469]);
6808str->del(strings[2069]);
6809strings[469] = str->add(strings[469]);
6810strings[2067] = str->add(strings[2067]);
6811strings[2123] = str->add(strings[2123]);
6812strings[1841] = str->add(strings[1841]);
6813strings[469] = str->add(strings[469]);
6814strings[2069] = str->add(strings[2069]);
6815strings[469] = str->add(strings[469]);
6816strings[2123] = str->add(strings[2123]);
6817strings[1841] = str->add(strings[1841]);
6818strings[2070] = str->add(strings[2070]);
6819strings[2070] = str->add(strings[2070]);
6820strings[471] = str->add(strings[471]);
6821strings[1842] = str->add(strings[1842]);
6822strings[1842] = str->add(strings[1842]);
6823strings[2073] = str->add(strings[2073]);
6824strings[469] = str->add(strings[469]);
6825strings[2067] = str->add(strings[2067]);
6826strings[2123] = str->add(strings[2123]);
6827strings[1841] = str->add(strings[1841]);
6828strings[469] = str->add(strings[469]);
6829strings[2069] = str->add(strings[2069]);
6830strings[469] = str->add(strings[469]);
6831strings[2123] = str->add(strings[2123]);
6832strings[1841] = str->add(strings[1841]);
6833strings[2074] = str->add(strings[2074]);
6834strings[2074] = str->add(strings[2074]);
6835strings[471] = str->add(strings[471]);
6836strings[1842] = str->add(strings[1842]);
6837strings[1842] = str->add(strings[1842]);
6838strings[2076] = str->add(strings[2076]);
6839strings[469] = str->add(strings[469]);
6840strings[2067] = str->add(strings[2067]);
6841strings[2123] = str->add(strings[2123]);
6842strings[1841] = str->add(strings[1841]);
6843strings[469] = str->add(strings[469]);
6844strings[2069] = str->add(strings[2069]);
6845strings[469] = str->add(strings[469]);
6846strings[2123] = str->add(strings[2123]);
6847strings[1841] = str->add(strings[1841]);
6848strings[2077] = str->add(strings[2077]);
6849strings[2077] = str->add(strings[2077]);
6850strings[471] = str->add(strings[471]);
6851strings[1842] = str->add(strings[1842]);
6852strings[1842] = str->add(strings[1842]);
6853strings[2079] = str->add(strings[2079]);
6854strings[2073] = str->add(strings[2073]);
6855str->del(strings[1842]);
6856strings[2073] = str->add(strings[2073]);
6857str->del(strings[1842]);
6858strings[2073] = str->add(strings[2073]);
6859strings[1933] = str->add(strings[1933]);
6860str->del(strings[2123]);
6861str->del(strings[1841]);
6862str->del(strings[1933]);
6863str->del(strings[469]);
6864str->del(strings[2067]);
6865strings[1933] = str->add(strings[1933]);
6866str->del(strings[2123]);
6867str->del(strings[1841]);
6868str->del(strings[1933]);
6869str->del(strings[2073]);
6870str->del(strings[2073]);
6871str->del(strings[2073]);
6872str->del(strings[469]);
6873str->del(strings[2069]);
6874strings[2076] = str->add(strings[2076]);
6875str->del(strings[1842]);
6876strings[2076] = str->add(strings[2076]);
6877str->del(strings[1842]);
6878strings[2076] = str->add(strings[2076]);
6879strings[1933] = str->add(strings[1933]);
6880str->del(strings[2123]);
6881str->del(strings[1841]);
6882str->del(strings[1933]);
6883str->del(strings[469]);
6884str->del(strings[2067]);
6885strings[1933] = str->add(strings[1933]);
6886str->del(strings[2123]);
6887str->del(strings[1841]);
6888str->del(strings[1933]);
6889str->del(strings[2076]);
6890str->del(strings[2076]);
6891str->del(strings[2076]);
6892str->del(strings[469]);
6893str->del(strings[2069]);
6894strings[2079] = str->add(strings[2079]);
6895str->del(strings[1842]);
6896strings[2079] = str->add(strings[2079]);
6897str->del(strings[1842]);
6898strings[2079] = str->add(strings[2079]);
6899strings[1933] = str->add(strings[1933]);
6900str->del(strings[2123]);
6901str->del(strings[1841]);
6902str->del(strings[1933]);
6903str->del(strings[469]);
6904str->del(strings[2067]);
6905strings[1933] = str->add(strings[1933]);
6906str->del(strings[2123]);
6907str->del(strings[1841]);
6908str->del(strings[1933]);
6909str->del(strings[2079]);
6910str->del(strings[2079]);
6911str->del(strings[2079]);
6912str->del(strings[469]);
6913str->del(strings[2069]);
6914strings[469] = str->add(strings[469]);
6915strings[2067] = str->add(strings[2067]);
6916strings[2123] = str->add(strings[2123]);
6917strings[1841] = str->add(strings[1841]);
6918strings[469] = str->add(strings[469]);
6919strings[2069] = str->add(strings[2069]);
6920strings[469] = str->add(strings[469]);
6921strings[2123] = str->add(strings[2123]);
6922strings[1841] = str->add(strings[1841]);
6923strings[2070] = str->add(strings[2070]);
6924strings[2070] = str->add(strings[2070]);
6925strings[471] = str->add(strings[471]);
6926strings[1842] = str->add(strings[1842]);
6927strings[1842] = str->add(strings[1842]);
6928strings[2073] = str->add(strings[2073]);
6929strings[469] = str->add(strings[469]);
6930strings[2067] = str->add(strings[2067]);
6931strings[2123] = str->add(strings[2123]);
6932strings[1841] = str->add(strings[1841]);
6933strings[469] = str->add(strings[469]);
6934strings[2069] = str->add(strings[2069]);
6935strings[469] = str->add(strings[469]);
6936strings[2123] = str->add(strings[2123]);
6937strings[1841] = str->add(strings[1841]);
6938strings[2074] = str->add(strings[2074]);
6939strings[2074] = str->add(strings[2074]);
6940strings[471] = str->add(strings[471]);
6941strings[1842] = str->add(strings[1842]);
6942strings[1842] = str->add(strings[1842]);
6943strings[2076] = str->add(strings[2076]);
6944strings[469] = str->add(strings[469]);
6945strings[2067] = str->add(strings[2067]);
6946strings[2123] = str->add(strings[2123]);
6947strings[1841] = str->add(strings[1841]);
6948strings[469] = str->add(strings[469]);
6949strings[2069] = str->add(strings[2069]);
6950strings[469] = str->add(strings[469]);
6951strings[2123] = str->add(strings[2123]);
6952strings[1841] = str->add(strings[1841]);
6953strings[2077] = str->add(strings[2077]);
6954strings[2077] = str->add(strings[2077]);
6955strings[471] = str->add(strings[471]);
6956strings[1842] = str->add(strings[1842]);
6957strings[1842] = str->add(strings[1842]);
6958strings[2079] = str->add(strings[2079]);
6959strings[2073] = str->add(strings[2073]);
6960str->del(strings[1842]);
6961strings[2073] = str->add(strings[2073]);
6962str->del(strings[1842]);
6963strings[2073] = str->add(strings[2073]);
6964strings[1933] = str->add(strings[1933]);
6965str->del(strings[2123]);
6966str->del(strings[1841]);
6967str->del(strings[1933]);
6968str->del(strings[469]);
6969str->del(strings[2067]);
6970strings[1933] = str->add(strings[1933]);
6971str->del(strings[2123]);
6972str->del(strings[1841]);
6973str->del(strings[1933]);
6974str->del(strings[2073]);
6975str->del(strings[2073]);
6976str->del(strings[2073]);
6977str->del(strings[469]);
6978str->del(strings[2069]);
6979strings[2076] = str->add(strings[2076]);
6980str->del(strings[1842]);
6981strings[2076] = str->add(strings[2076]);
6982str->del(strings[1842]);
6983strings[2076] = str->add(strings[2076]);
6984strings[1933] = str->add(strings[1933]);
6985str->del(strings[2123]);
6986str->del(strings[1841]);
6987str->del(strings[1933]);
6988str->del(strings[469]);
6989str->del(strings[2067]);
6990strings[1933] = str->add(strings[1933]);
6991str->del(strings[2123]);
6992str->del(strings[1841]);
6993str->del(strings[1933]);
6994str->del(strings[2076]);
6995str->del(strings[2076]);
6996str->del(strings[2076]);
6997str->del(strings[469]);
6998str->del(strings[2069]);
6999strings[2079] = str->add(strings[2079]);
7000str->del(strings[1842]);
7001strings[2079] = str->add(strings[2079]);
7002str->del(strings[1842]);
7003strings[2079] = str->add(strings[2079]);
7004strings[1933] = str->add(strings[1933]);
7005str->del(strings[2123]);
7006str->del(strings[1841]);
7007str->del(strings[1933]);
7008str->del(strings[469]);
7009str->del(strings[2067]);
7010strings[1933] = str->add(strings[1933]);
7011str->del(strings[2123]);
7012str->del(strings[1841]);
7013str->del(strings[1933]);
7014str->del(strings[2079]);
7015str->del(strings[2079]);
7016str->del(strings[2079]);
7017str->del(strings[469]);
7018str->del(strings[2069]);
7019strings[469] = str->add(strings[469]);
7020strings[2067] = str->add(strings[2067]);
7021strings[2123] = str->add(strings[2123]);
7022strings[1841] = str->add(strings[1841]);
7023strings[469] = str->add(strings[469]);
7024strings[2069] = str->add(strings[2069]);
7025strings[469] = str->add(strings[469]);
7026strings[2123] = str->add(strings[2123]);
7027strings[1841] = str->add(strings[1841]);
7028strings[2070] = str->add(strings[2070]);
7029strings[2070] = str->add(strings[2070]);
7030strings[471] = str->add(strings[471]);
7031strings[1842] = str->add(strings[1842]);
7032strings[1842] = str->add(strings[1842]);
7033strings[2073] = str->add(strings[2073]);
7034strings[469] = str->add(strings[469]);
7035strings[2067] = str->add(strings[2067]);
7036strings[2123] = str->add(strings[2123]);
7037strings[1841] = str->add(strings[1841]);
7038strings[469] = str->add(strings[469]);
7039strings[2069] = str->add(strings[2069]);
7040strings[469] = str->add(strings[469]);
7041strings[2123] = str->add(strings[2123]);
7042strings[1841] = str->add(strings[1841]);
7043strings[2074] = str->add(strings[2074]);
7044strings[2074] = str->add(strings[2074]);
7045strings[471] = str->add(strings[471]);
7046strings[1842] = str->add(strings[1842]);
7047strings[1842] = str->add(strings[1842]);
7048strings[2076] = str->add(strings[2076]);
7049strings[469] = str->add(strings[469]);
7050strings[2067] = str->add(strings[2067]);
7051strings[2123] = str->add(strings[2123]);
7052strings[1841] = str->add(strings[1841]);
7053strings[469] = str->add(strings[469]);
7054strings[2069] = str->add(strings[2069]);
7055strings[469] = str->add(strings[469]);
7056strings[2123] = str->add(strings[2123]);
7057strings[1841] = str->add(strings[1841]);
7058strings[2077] = str->add(strings[2077]);
7059strings[2077] = str->add(strings[2077]);
7060strings[471] = str->add(strings[471]);
7061strings[1842] = str->add(strings[1842]);
7062strings[1842] = str->add(strings[1842]);
7063strings[2079] = str->add(strings[2079]);
7064strings[2133] = str->add("e,action,mouse,move");
7065strings[2125] = str->add(strings[2125]);
7066strings[2133] = str->add(strings[2133]);
7067strings[2125] = str->add(strings[2125]);
7068strings[2133] = str->add(strings[2133]);
7069strings[2125] = str->add(strings[2125]);
7070strings[1737] = str->add(strings[1737]);
7071strings[1853] = str->add(strings[1853]);
7072strings[2133] = str->add(strings[2133]);
7073strings[2125] = str->add(strings[2125]);
7074strings[2134] = str->add("mouse,move");
7075strings[1853] = str->add(strings[1853]);
7076strings[2133] = str->add(strings[2133]);
7077strings[2125] = str->add(strings[2125]);
7078strings[2134] = str->add(strings[2134]);
7079strings[1853] = str->add(strings[1853]);
7080strings[2133] = str->add(strings[2133]);
7081strings[2125] = str->add(strings[2125]);
7082strings[2134] = str->add(strings[2134]);
7083strings[1853] = str->add(strings[1853]);
7084strings[2133] = str->add(strings[2133]);
7085strings[2125] = str->add(strings[2125]);
7086strings[2134] = str->add(strings[2134]);
7087strings[1853] = str->add(strings[1853]);
7088strings[2133] = str->add(strings[2133]);
7089strings[2125] = str->add(strings[2125]);
7090strings[2134] = str->add(strings[2134]);
7091strings[1853] = str->add(strings[1853]);
7092strings[2133] = str->add(strings[2133]);
7093strings[2125] = str->add(strings[2125]);
7094strings[2134] = str->add(strings[2134]);
7095strings[1853] = str->add(strings[1853]);
7096strings[2133] = str->add(strings[2133]);
7097strings[2125] = str->add(strings[2125]);
7098strings[2134] = str->add(strings[2134]);
7099strings[1853] = str->add(strings[1853]);
7100strings[2133] = str->add(strings[2133]);
7101strings[2125] = str->add(strings[2125]);
7102strings[2134] = str->add(strings[2134]);
7103strings[1853] = str->add(strings[1853]);
7104strings[2133] = str->add(strings[2133]);
7105strings[2125] = str->add(strings[2125]);
7106strings[2134] = str->add(strings[2134]);
7107strings[1853] = str->add(strings[1853]);
7108strings[2133] = str->add(strings[2133]);
7109strings[2125] = str->add(strings[2125]);
7110strings[2134] = str->add(strings[2134]);
7111strings[1853] = str->add(strings[1853]);
7112strings[2133] = str->add(strings[2133]);
7113strings[2125] = str->add(strings[2125]);
7114strings[2134] = str->add(strings[2134]);
7115strings[1853] = str->add(strings[1853]);
7116strings[2133] = str->add(strings[2133]);
7117strings[2125] = str->add(strings[2125]);
7118strings[2134] = str->add(strings[2134]);
7119strings[1853] = str->add(strings[1853]);
7120strings[2133] = str->add(strings[2133]);
7121strings[2125] = str->add(strings[2125]);
7122strings[2134] = str->add(strings[2134]);
7123strings[1853] = str->add(strings[1853]);
7124strings[2133] = str->add(strings[2133]);
7125strings[2125] = str->add(strings[2125]);
7126strings[2134] = str->add(strings[2134]);
7127strings[1853] = str->add(strings[1853]);
7128strings[2133] = str->add(strings[2133]);
7129strings[2125] = str->add(strings[2125]);
7130strings[2134] = str->add(strings[2134]);
7131strings[1853] = str->add(strings[1853]);
7132strings[2133] = str->add(strings[2133]);
7133strings[2125] = str->add(strings[2125]);
7134strings[2134] = str->add(strings[2134]);
7135strings[1853] = str->add(strings[1853]);
7136strings[2133] = str->add(strings[2133]);
7137strings[2125] = str->add(strings[2125]);
7138strings[2134] = str->add(strings[2134]);
7139strings[1853] = str->add(strings[1853]);
7140strings[2133] = str->add(strings[2133]);
7141strings[2125] = str->add(strings[2125]);
7142strings[2134] = str->add(strings[2134]);
7143strings[1853] = str->add(strings[1853]);
7144strings[2133] = str->add(strings[2133]);
7145strings[2125] = str->add(strings[2125]);
7146strings[2134] = str->add(strings[2134]);
7147strings[1853] = str->add(strings[1853]);
7148strings[2133] = str->add(strings[2133]);
7149strings[2125] = str->add(strings[2125]);
7150strings[2134] = str->add(strings[2134]);
7151strings[1853] = str->add(strings[1853]);
7152strings[2133] = str->add(strings[2133]);
7153strings[2125] = str->add(strings[2125]);
7154strings[2134] = str->add(strings[2134]);
7155strings[1853] = str->add(strings[1853]);
7156strings[2133] = str->add(strings[2133]);
7157strings[2125] = str->add(strings[2125]);
7158strings[2134] = str->add(strings[2134]);
7159strings[1853] = str->add(strings[1853]);
7160strings[2133] = str->add(strings[2133]);
7161strings[2125] = str->add(strings[2125]);
7162strings[2134] = str->add(strings[2134]);
7163strings[1853] = str->add(strings[1853]);
7164strings[2133] = str->add(strings[2133]);
7165strings[2125] = str->add(strings[2125]);
7166strings[2134] = str->add(strings[2134]);
7167strings[1853] = str->add(strings[1853]);
7168strings[2133] = str->add(strings[2133]);
7169strings[2125] = str->add(strings[2125]);
7170strings[2134] = str->add(strings[2134]);
7171strings[1853] = str->add(strings[1853]);
7172strings[2133] = str->add(strings[2133]);
7173strings[2125] = str->add(strings[2125]);
7174strings[2134] = str->add(strings[2134]);
7175strings[1853] = str->add(strings[1853]);
7176strings[2133] = str->add(strings[2133]);
7177strings[2125] = str->add(strings[2125]);
7178strings[2134] = str->add(strings[2134]);
7179strings[1853] = str->add(strings[1853]);
7180strings[2133] = str->add(strings[2133]);
7181strings[2125] = str->add(strings[2125]);
7182strings[2134] = str->add(strings[2134]);
7183strings[1853] = str->add(strings[1853]);
7184strings[2133] = str->add(strings[2133]);
7185strings[2125] = str->add(strings[2125]);
7186strings[2134] = str->add(strings[2134]);
7187strings[1853] = str->add(strings[1853]);
7188strings[2133] = str->add(strings[2133]);
7189strings[2125] = str->add(strings[2125]);
7190strings[2134] = str->add(strings[2134]);
7191strings[1853] = str->add(strings[1853]);
7192strings[2133] = str->add(strings[2133]);
7193strings[2125] = str->add(strings[2125]);
7194strings[2134] = str->add(strings[2134]);
7195strings[1853] = str->add(strings[1853]);
7196strings[2133] = str->add(strings[2133]);
7197strings[2125] = str->add(strings[2125]);
7198strings[2134] = str->add(strings[2134]);
7199strings[1853] = str->add(strings[1853]);
7200strings[2133] = str->add(strings[2133]);
7201strings[2125] = str->add(strings[2125]);
7202strings[2134] = str->add(strings[2134]);
7203strings[1853] = str->add(strings[1853]);
7204strings[2133] = str->add(strings[2133]);
7205strings[2125] = str->add(strings[2125]);
7206strings[2134] = str->add(strings[2134]);
7207strings[1853] = str->add(strings[1853]);
7208strings[2133] = str->add(strings[2133]);
7209strings[2125] = str->add(strings[2125]);
7210strings[2134] = str->add(strings[2134]);
7211strings[1853] = str->add(strings[1853]);
7212strings[2133] = str->add(strings[2133]);
7213strings[2125] = str->add(strings[2125]);
7214strings[2134] = str->add(strings[2134]);
7215strings[1853] = str->add(strings[1853]);
7216strings[2133] = str->add(strings[2133]);
7217strings[2125] = str->add(strings[2125]);
7218strings[2134] = str->add(strings[2134]);
7219strings[1853] = str->add(strings[1853]);
7220strings[2133] = str->add(strings[2133]);
7221strings[2125] = str->add(strings[2125]);
7222strings[2134] = str->add(strings[2134]);
7223strings[1853] = str->add(strings[1853]);
7224strings[2133] = str->add(strings[2133]);
7225strings[2125] = str->add(strings[2125]);
7226strings[2134] = str->add(strings[2134]);
7227strings[1853] = str->add(strings[1853]);
7228strings[2133] = str->add(strings[2133]);
7229strings[2125] = str->add(strings[2125]);
7230strings[2134] = str->add(strings[2134]);
7231strings[1853] = str->add(strings[1853]);
7232strings[2133] = str->add(strings[2133]);
7233strings[2125] = str->add(strings[2125]);
7234strings[2134] = str->add(strings[2134]);
7235strings[1853] = str->add(strings[1853]);
7236strings[2133] = str->add(strings[2133]);
7237strings[2125] = str->add(strings[2125]);
7238strings[2134] = str->add(strings[2134]);
7239strings[1853] = str->add(strings[1853]);
7240strings[2133] = str->add(strings[2133]);
7241strings[2125] = str->add(strings[2125]);
7242strings[2134] = str->add(strings[2134]);
7243strings[1853] = str->add(strings[1853]);
7244strings[2133] = str->add(strings[2133]);
7245strings[2125] = str->add(strings[2125]);
7246strings[2134] = str->add(strings[2134]);
7247strings[1853] = str->add(strings[1853]);
7248strings[2133] = str->add(strings[2133]);
7249strings[2125] = str->add(strings[2125]);
7250strings[2134] = str->add(strings[2134]);
7251strings[1853] = str->add(strings[1853]);
7252strings[2133] = str->add(strings[2133]);
7253strings[2125] = str->add(strings[2125]);
7254strings[2134] = str->add(strings[2134]);
7255strings[1853] = str->add(strings[1853]);
7256strings[2133] = str->add(strings[2133]);
7257strings[2125] = str->add(strings[2125]);
7258strings[2134] = str->add(strings[2134]);
7259strings[1853] = str->add(strings[1853]);
7260strings[2133] = str->add(strings[2133]);
7261strings[2125] = str->add(strings[2125]);
7262strings[2134] = str->add(strings[2134]);
7263strings[1853] = str->add(strings[1853]);
7264strings[2133] = str->add(strings[2133]);
7265strings[2125] = str->add(strings[2125]);
7266strings[2134] = str->add(strings[2134]);
7267strings[1853] = str->add(strings[1853]);
7268strings[2133] = str->add(strings[2133]);
7269strings[2125] = str->add(strings[2125]);
7270strings[2134] = str->add(strings[2134]);
7271strings[1853] = str->add(strings[1853]);
7272strings[2133] = str->add(strings[2133]);
7273strings[2125] = str->add(strings[2125]);
7274strings[2134] = str->add(strings[2134]);
7275strings[1853] = str->add(strings[1853]);
7276strings[2133] = str->add(strings[2133]);
7277strings[2125] = str->add(strings[2125]);
7278strings[2134] = str->add(strings[2134]);
7279strings[1853] = str->add(strings[1853]);
7280strings[2133] = str->add(strings[2133]);
7281strings[2125] = str->add(strings[2125]);
7282strings[2134] = str->add(strings[2134]);
7283strings[1853] = str->add(strings[1853]);
7284strings[2133] = str->add(strings[2133]);
7285strings[2125] = str->add(strings[2125]);
7286strings[2134] = str->add(strings[2134]);
7287strings[1853] = str->add(strings[1853]);
7288strings[2133] = str->add(strings[2133]);
7289strings[2125] = str->add(strings[2125]);
7290strings[2134] = str->add(strings[2134]);
7291strings[1853] = str->add(strings[1853]);
7292strings[2133] = str->add(strings[2133]);
7293strings[2125] = str->add(strings[2125]);
7294strings[2134] = str->add(strings[2134]);
7295strings[1853] = str->add(strings[1853]);
7296strings[2133] = str->add(strings[2133]);
7297strings[2125] = str->add(strings[2125]);
7298strings[2134] = str->add(strings[2134]);
7299strings[1853] = str->add(strings[1853]);
7300strings[2133] = str->add(strings[2133]);
7301strings[2125] = str->add(strings[2125]);
7302strings[2134] = str->add(strings[2134]);
7303strings[1853] = str->add(strings[1853]);
7304strings[2133] = str->add(strings[2133]);
7305strings[2125] = str->add(strings[2125]);
7306strings[2134] = str->add(strings[2134]);
7307strings[1853] = str->add(strings[1853]);
7308strings[2133] = str->add(strings[2133]);
7309strings[2125] = str->add(strings[2125]);
7310strings[2134] = str->add(strings[2134]);
7311strings[1853] = str->add(strings[1853]);
7312strings[2133] = str->add(strings[2133]);
7313strings[2125] = str->add(strings[2125]);
7314strings[2134] = str->add(strings[2134]);
7315strings[1853] = str->add(strings[1853]);
7316strings[2133] = str->add(strings[2133]);
7317strings[2125] = str->add(strings[2125]);
7318strings[2134] = str->add(strings[2134]);
7319strings[1853] = str->add(strings[1853]);
7320strings[2133] = str->add(strings[2133]);
7321strings[2125] = str->add(strings[2125]);
7322strings[2134] = str->add(strings[2134]);
7323strings[1853] = str->add(strings[1853]);
7324strings[2133] = str->add(strings[2133]);
7325strings[2125] = str->add(strings[2125]);
7326strings[2134] = str->add(strings[2134]);
7327strings[1853] = str->add(strings[1853]);
7328strings[2133] = str->add(strings[2133]);
7329strings[2125] = str->add(strings[2125]);
7330strings[2134] = str->add(strings[2134]);
7331strings[1853] = str->add(strings[1853]);
7332strings[2133] = str->add(strings[2133]);
7333strings[2125] = str->add(strings[2125]);
7334strings[2134] = str->add(strings[2134]);
7335strings[1853] = str->add(strings[1853]);
7336strings[2133] = str->add(strings[2133]);
7337strings[2125] = str->add(strings[2125]);
7338strings[2134] = str->add(strings[2134]);
7339strings[1853] = str->add(strings[1853]);
7340strings[2133] = str->add(strings[2133]);
7341strings[2125] = str->add(strings[2125]);
7342strings[2134] = str->add(strings[2134]);
7343strings[1853] = str->add(strings[1853]);
7344strings[2133] = str->add(strings[2133]);
7345strings[2125] = str->add(strings[2125]);
7346strings[2134] = str->add(strings[2134]);
7347strings[1853] = str->add(strings[1853]);
7348strings[2133] = str->add(strings[2133]);
7349strings[2125] = str->add(strings[2125]);
7350strings[2134] = str->add(strings[2134]);
7351strings[1853] = str->add(strings[1853]);
7352strings[2133] = str->add(strings[2133]);
7353strings[2125] = str->add(strings[2125]);
7354strings[2134] = str->add(strings[2134]);
7355strings[1853] = str->add(strings[1853]);
7356strings[2133] = str->add(strings[2133]);
7357strings[2125] = str->add(strings[2125]);
7358strings[2134] = str->add(strings[2134]);
7359strings[1853] = str->add(strings[1853]);
7360strings[2133] = str->add(strings[2133]);
7361strings[2125] = str->add(strings[2125]);
7362strings[2134] = str->add(strings[2134]);
7363strings[1853] = str->add(strings[1853]);
7364strings[2133] = str->add(strings[2133]);
7365strings[2125] = str->add(strings[2125]);
7366strings[2134] = str->add(strings[2134]);
7367strings[1853] = str->add(strings[1853]);
7368strings[2133] = str->add(strings[2133]);
7369strings[2125] = str->add(strings[2125]);
7370strings[2134] = str->add(strings[2134]);
7371strings[1853] = str->add(strings[1853]);
7372strings[2133] = str->add(strings[2133]);
7373strings[2125] = str->add(strings[2125]);
7374strings[2134] = str->add(strings[2134]);
7375strings[1853] = str->add(strings[1853]);
7376strings[2133] = str->add(strings[2133]);
7377strings[2125] = str->add(strings[2125]);
7378strings[2134] = str->add(strings[2134]);
7379strings[1853] = str->add(strings[1853]);
7380strings[2133] = str->add(strings[2133]);
7381strings[2125] = str->add(strings[2125]);
7382strings[2134] = str->add(strings[2134]);
7383strings[1853] = str->add(strings[1853]);
7384strings[2133] = str->add(strings[2133]);
7385strings[2125] = str->add(strings[2125]);
7386strings[2134] = str->add(strings[2134]);
7387strings[1853] = str->add(strings[1853]);
7388strings[2133] = str->add(strings[2133]);
7389strings[2125] = str->add(strings[2125]);
7390strings[2134] = str->add(strings[2134]);
7391strings[1853] = str->add(strings[1853]);
7392strings[2133] = str->add(strings[2133]);
7393strings[2125] = str->add(strings[2125]);
7394strings[2134] = str->add(strings[2134]);
7395strings[1853] = str->add(strings[1853]);
7396strings[2133] = str->add(strings[2133]);
7397strings[2125] = str->add(strings[2125]);
7398strings[2134] = str->add(strings[2134]);
7399strings[1853] = str->add(strings[1853]);
7400strings[2133] = str->add(strings[2133]);
7401strings[2125] = str->add(strings[2125]);
7402strings[2134] = str->add(strings[2134]);
7403strings[1853] = str->add(strings[1853]);
7404strings[2133] = str->add(strings[2133]);
7405strings[2125] = str->add(strings[2125]);
7406strings[2134] = str->add(strings[2134]);
7407strings[1853] = str->add(strings[1853]);
7408strings[2133] = str->add(strings[2133]);
7409strings[2125] = str->add(strings[2125]);
7410strings[2134] = str->add(strings[2134]);
7411strings[1853] = str->add(strings[1853]);
7412strings[2133] = str->add(strings[2133]);
7413strings[2125] = str->add(strings[2125]);
7414strings[2134] = str->add(strings[2134]);
7415strings[1853] = str->add(strings[1853]);
7416strings[2133] = str->add(strings[2133]);
7417strings[2125] = str->add(strings[2125]);
7418strings[2134] = str->add(strings[2134]);
7419strings[1853] = str->add(strings[1853]);
7420strings[2133] = str->add(strings[2133]);
7421strings[2125] = str->add(strings[2125]);
7422strings[2134] = str->add(strings[2134]);
7423strings[1853] = str->add(strings[1853]);
7424strings[2133] = str->add(strings[2133]);
7425strings[2125] = str->add(strings[2125]);
7426strings[2134] = str->add(strings[2134]);
7427strings[1853] = str->add(strings[1853]);
7428strings[2133] = str->add(strings[2133]);
7429strings[2125] = str->add(strings[2125]);
7430strings[2134] = str->add(strings[2134]);
7431strings[1853] = str->add(strings[1853]);
7432strings[2133] = str->add(strings[2133]);
7433strings[2125] = str->add(strings[2125]);
7434strings[2134] = str->add(strings[2134]);
7435strings[1853] = str->add(strings[1853]);
7436strings[2133] = str->add(strings[2133]);
7437strings[2125] = str->add(strings[2125]);
7438strings[2134] = str->add(strings[2134]);
7439strings[1853] = str->add(strings[1853]);
7440strings[2133] = str->add(strings[2133]);
7441strings[2125] = str->add(strings[2125]);
7442strings[2134] = str->add(strings[2134]);
7443strings[1853] = str->add(strings[1853]);
7444strings[2133] = str->add(strings[2133]);
7445strings[2125] = str->add(strings[2125]);
7446strings[2134] = str->add(strings[2134]);
7447strings[1853] = str->add(strings[1853]);
7448strings[2133] = str->add(strings[2133]);
7449strings[2125] = str->add(strings[2125]);
7450strings[2134] = str->add(strings[2134]);
7451strings[1853] = str->add(strings[1853]);
7452strings[2133] = str->add(strings[2133]);
7453strings[2125] = str->add(strings[2125]);
7454strings[2134] = str->add(strings[2134]);
7455strings[1853] = str->add(strings[1853]);
7456strings[2133] = str->add(strings[2133]);
7457strings[2125] = str->add(strings[2125]);
7458strings[2134] = str->add(strings[2134]);
7459strings[1853] = str->add(strings[1853]);
7460strings[2133] = str->add(strings[2133]);
7461strings[2125] = str->add(strings[2125]);
7462strings[2134] = str->add(strings[2134]);
7463strings[1853] = str->add(strings[1853]);
7464strings[2133] = str->add(strings[2133]);
7465strings[2125] = str->add(strings[2125]);
7466strings[2134] = str->add(strings[2134]);
7467strings[1853] = str->add(strings[1853]);
7468strings[2133] = str->add(strings[2133]);
7469strings[2125] = str->add(strings[2125]);
7470strings[2134] = str->add(strings[2134]);
7471strings[1853] = str->add(strings[1853]);
7472strings[2133] = str->add(strings[2133]);
7473strings[2125] = str->add(strings[2125]);
7474strings[2134] = str->add(strings[2134]);
7475strings[1853] = str->add(strings[1853]);
7476strings[2133] = str->add(strings[2133]);
7477strings[2125] = str->add(strings[2125]);
7478strings[2134] = str->add(strings[2134]);
7479strings[1853] = str->add(strings[1853]);
7480strings[2133] = str->add(strings[2133]);
7481strings[2125] = str->add(strings[2125]);
7482strings[2134] = str->add(strings[2134]);
7483strings[1853] = str->add(strings[1853]);
7484strings[2133] = str->add(strings[2133]);
7485strings[2125] = str->add(strings[2125]);
7486strings[2134] = str->add(strings[2134]);
7487strings[1853] = str->add(strings[1853]);
7488strings[2133] = str->add(strings[2133]);
7489strings[2125] = str->add(strings[2125]);
7490strings[2134] = str->add(strings[2134]);
7491strings[1853] = str->add(strings[1853]);
7492strings[2133] = str->add(strings[2133]);
7493strings[2125] = str->add(strings[2125]);
7494strings[2134] = str->add(strings[2134]);
7495strings[1853] = str->add(strings[1853]);
7496strings[2133] = str->add(strings[2133]);
7497strings[2125] = str->add(strings[2125]);
7498strings[2134] = str->add(strings[2134]);
7499strings[1853] = str->add(strings[1853]);
7500strings[2133] = str->add(strings[2133]);
7501strings[2125] = str->add(strings[2125]);
7502strings[2134] = str->add(strings[2134]);
7503strings[1853] = str->add(strings[1853]);
7504strings[2133] = str->add(strings[2133]);
7505strings[2125] = str->add(strings[2125]);
7506strings[2134] = str->add(strings[2134]);
7507strings[1853] = str->add(strings[1853]);
7508strings[2133] = str->add(strings[2133]);
7509strings[2125] = str->add(strings[2125]);
7510strings[2134] = str->add(strings[2134]);
7511strings[1853] = str->add(strings[1853]);
7512strings[2133] = str->add(strings[2133]);
7513strings[2125] = str->add(strings[2125]);
7514strings[2134] = str->add(strings[2134]);
7515strings[1853] = str->add(strings[1853]);
7516strings[2133] = str->add(strings[2133]);
7517strings[2125] = str->add(strings[2125]);
7518strings[2134] = str->add(strings[2134]);
7519strings[1853] = str->add(strings[1853]);
7520strings[2133] = str->add(strings[2133]);
7521strings[2125] = str->add(strings[2125]);
7522strings[2134] = str->add(strings[2134]);
7523strings[1853] = str->add(strings[1853]);
7524strings[2133] = str->add(strings[2133]);
7525strings[2125] = str->add(strings[2125]);
7526strings[2134] = str->add(strings[2134]);
7527strings[1853] = str->add(strings[1853]);
7528strings[2133] = str->add(strings[2133]);
7529strings[2125] = str->add(strings[2125]);
7530strings[2134] = str->add(strings[2134]);
7531strings[1853] = str->add(strings[1853]);
7532strings[2133] = str->add(strings[2133]);
7533strings[2125] = str->add(strings[2125]);
7534strings[2134] = str->add(strings[2134]);
7535strings[1853] = str->add(strings[1853]);
7536strings[2133] = str->add(strings[2133]);
7537strings[2125] = str->add(strings[2125]);
7538strings[2134] = str->add(strings[2134]);
7539strings[1853] = str->add(strings[1853]);
7540strings[2133] = str->add(strings[2133]);
7541strings[2125] = str->add(strings[2125]);
7542strings[2134] = str->add(strings[2134]);
7543strings[1853] = str->add(strings[1853]);
7544strings[2133] = str->add(strings[2133]);
7545strings[2125] = str->add(strings[2125]);
7546strings[2134] = str->add(strings[2134]);
7547strings[1853] = str->add(strings[1853]);
7548strings[2133] = str->add(strings[2133]);
7549strings[2125] = str->add(strings[2125]);
7550strings[2134] = str->add(strings[2134]);
7551strings[1853] = str->add(strings[1853]);
7552strings[2133] = str->add(strings[2133]);
7553strings[2125] = str->add(strings[2125]);
7554strings[2134] = str->add(strings[2134]);
7555strings[1853] = str->add(strings[1853]);
7556strings[2133] = str->add(strings[2133]);
7557strings[2125] = str->add(strings[2125]);
7558strings[2134] = str->add(strings[2134]);
7559strings[1853] = str->add(strings[1853]);
7560strings[2133] = str->add(strings[2133]);
7561strings[2125] = str->add(strings[2125]);
7562strings[2134] = str->add(strings[2134]);
7563strings[1853] = str->add(strings[1853]);
7564strings[2133] = str->add(strings[2133]);
7565strings[2125] = str->add(strings[2125]);
7566strings[2134] = str->add(strings[2134]);
7567strings[1853] = str->add(strings[1853]);
7568strings[2133] = str->add(strings[2133]);
7569strings[2125] = str->add(strings[2125]);
7570strings[2134] = str->add(strings[2134]);
7571strings[1853] = str->add(strings[1853]);
7572strings[2133] = str->add(strings[2133]);
7573strings[2125] = str->add(strings[2125]);
7574strings[2134] = str->add(strings[2134]);
7575strings[1853] = str->add(strings[1853]);
7576strings[2133] = str->add(strings[2133]);
7577strings[2125] = str->add(strings[2125]);
7578strings[2134] = str->add(strings[2134]);
7579strings[1853] = str->add(strings[1853]);
7580strings[2133] = str->add(strings[2133]);
7581strings[2125] = str->add(strings[2125]);
7582strings[2134] = str->add(strings[2134]);
7583strings[1853] = str->add(strings[1853]);
7584strings[2133] = str->add(strings[2133]);
7585strings[2125] = str->add(strings[2125]);
7586strings[2134] = str->add(strings[2134]);
7587strings[1853] = str->add(strings[1853]);
7588strings[2133] = str->add(strings[2133]);
7589strings[2125] = str->add(strings[2125]);
7590strings[2134] = str->add(strings[2134]);
7591strings[1853] = str->add(strings[1853]);
7592strings[2133] = str->add(strings[2133]);
7593strings[2125] = str->add(strings[2125]);
7594strings[2134] = str->add(strings[2134]);
7595strings[1853] = str->add(strings[1853]);
7596strings[2133] = str->add(strings[2133]);
7597strings[2125] = str->add(strings[2125]);
7598strings[2134] = str->add(strings[2134]);
7599strings[1853] = str->add(strings[1853]);
7600strings[2133] = str->add(strings[2133]);
7601strings[2125] = str->add(strings[2125]);
7602strings[2134] = str->add(strings[2134]);
7603strings[1853] = str->add(strings[1853]);
7604strings[2133] = str->add(strings[2133]);
7605strings[2125] = str->add(strings[2125]);
7606strings[2134] = str->add(strings[2134]);
7607strings[1853] = str->add(strings[1853]);
7608strings[2133] = str->add(strings[2133]);
7609strings[2125] = str->add(strings[2125]);
7610strings[2134] = str->add(strings[2134]);
7611strings[1853] = str->add(strings[1853]);
7612strings[2133] = str->add(strings[2133]);
7613strings[2125] = str->add(strings[2125]);
7614strings[2134] = str->add(strings[2134]);
7615strings[1853] = str->add(strings[1853]);
7616strings[2133] = str->add(strings[2133]);
7617strings[2125] = str->add(strings[2125]);
7618strings[2134] = str->add(strings[2134]);
7619strings[1853] = str->add(strings[1853]);
7620strings[2133] = str->add(strings[2133]);
7621strings[2125] = str->add(strings[2125]);
7622strings[2134] = str->add(strings[2134]);
7623strings[1853] = str->add(strings[1853]);
7624strings[2133] = str->add(strings[2133]);
7625strings[2125] = str->add(strings[2125]);
7626strings[2134] = str->add(strings[2134]);
7627strings[1853] = str->add(strings[1853]);
7628strings[2133] = str->add(strings[2133]);
7629strings[2125] = str->add(strings[2125]);
7630strings[2134] = str->add(strings[2134]);
7631strings[1853] = str->add(strings[1853]);
7632strings[2133] = str->add(strings[2133]);
7633strings[2125] = str->add(strings[2125]);
7634strings[2134] = str->add(strings[2134]);
7635strings[1853] = str->add(strings[1853]);
7636strings[2133] = str->add(strings[2133]);
7637strings[2125] = str->add(strings[2125]);
7638strings[2134] = str->add(strings[2134]);
7639strings[1853] = str->add(strings[1853]);
7640strings[2133] = str->add(strings[2133]);
7641strings[2125] = str->add(strings[2125]);
7642strings[2134] = str->add(strings[2134]);
7643strings[1853] = str->add(strings[1853]);
7644strings[2133] = str->add(strings[2133]);
7645strings[2125] = str->add(strings[2125]);
7646strings[2134] = str->add(strings[2134]);
7647strings[1853] = str->add(strings[1853]);
7648strings[2133] = str->add(strings[2133]);
7649strings[2125] = str->add(strings[2125]);
7650strings[2134] = str->add(strings[2134]);
7651strings[1853] = str->add(strings[1853]);
7652strings[2133] = str->add(strings[2133]);
7653strings[2125] = str->add(strings[2125]);
7654strings[2134] = str->add(strings[2134]);
7655strings[1853] = str->add(strings[1853]);
7656strings[2133] = str->add(strings[2133]);
7657strings[2125] = str->add(strings[2125]);
7658strings[2134] = str->add(strings[2134]);
7659strings[1853] = str->add(strings[1853]);
7660strings[2133] = str->add(strings[2133]);
7661strings[2125] = str->add(strings[2125]);
7662strings[2134] = str->add(strings[2134]);
7663strings[1853] = str->add(strings[1853]);
7664strings[2133] = str->add(strings[2133]);
7665strings[2125] = str->add(strings[2125]);
7666strings[2134] = str->add(strings[2134]);
7667strings[1853] = str->add(strings[1853]);
7668strings[2133] = str->add(strings[2133]);
7669strings[2125] = str->add(strings[2125]);
7670strings[2134] = str->add(strings[2134]);
7671strings[1853] = str->add(strings[1853]);
7672strings[2133] = str->add(strings[2133]);
7673strings[2125] = str->add(strings[2125]);
7674strings[2134] = str->add(strings[2134]);
7675strings[1853] = str->add(strings[1853]);
7676strings[2133] = str->add(strings[2133]);
7677strings[2125] = str->add(strings[2125]);
7678strings[2134] = str->add(strings[2134]);
7679strings[1853] = str->add(strings[1853]);
7680strings[2133] = str->add(strings[2133]);
7681strings[2125] = str->add(strings[2125]);
7682strings[2134] = str->add(strings[2134]);
7683strings[1853] = str->add(strings[1853]);
7684strings[2135] = str->add("e,state,known");
7685strings[1842] = str->add(strings[1842]);
7686strings[2136] = str->add("40°C");
7687strings[2137] = str->add("e,state,discharging");
7688strings[2125] = str->add(strings[2125]);
7689strings[2138] = str->add("0%");
7690str->del(strings[2138]);
7691strings[2139] = str->add("N/A");
7692strings[2140] = str->add("0:00");
7693str->del(strings[2123]);
7694str->del(strings[1841]);
7695str->del(strings[2126]);
7696str->del(strings[2123]);
7697str->del(strings[1841]);
7698strings[2141] = str->add("program,start");
7699strings[2142] = str->add("on");
7700str->del(strings[2124]);
7701str->del(strings[2125]);
7702str->del(strings[2123]);
7703str->del(strings[1841]);
7704str->del(strings[2123]);
7705str->del(strings[1841]);
7706str->del(strings[2123]);
7707str->del(strings[1841]);
7708str->del(strings[2123]);
7709str->del(strings[1841]);
7710str->del(strings[2123]);
7711str->del(strings[1841]);
7712str->del(strings[2123]);
7713str->del(strings[1841]);
7714str->del(strings[2123]);
7715str->del(strings[1841]);
7716str->del(strings[2123]);
7717str->del(strings[1841]);
7718str->del(strings[2123]);
7719str->del(strings[1841]);
7720str->del(strings[2126]);
7721str->del(strings[2123]);
7722str->del(strings[2126]);
7723str->del(strings[1841]);
7724strings[2141] = str->add(strings[2141]);
7725strings[2142] = str->add(strings[2142]);
7726str->del(strings[2124]);
7727str->del(strings[2125]);
7728str->del(strings[2123]);
7729str->del(strings[2126]);
7730str->del(strings[2126]);
7731str->del(strings[1841]);
7732str->del(strings[2123]);
7733str->del(strings[2126]);
7734str->del(strings[2126]);
7735str->del(strings[2126]);
7736str->del(strings[1841]);
7737str->del(strings[2123]);
7738str->del(strings[2126]);
7739str->del(strings[1841]);
7740str->del(strings[2123]);
7741str->del(strings[2126]);
7742str->del(strings[2126]);
7743str->del(strings[2126]);
7744str->del(strings[2126]);
7745str->del(strings[2126]);
7746str->del(strings[1841]);
7747str->del(strings[2123]);
7748str->del(strings[2126]);
7749str->del(strings[1841]);
7750str->del(strings[2123]);
7751str->del(strings[2126]);
7752str->del(strings[2126]);
7753str->del(strings[2126]);
7754str->del(strings[2126]);
7755str->del(strings[2126]);
7756str->del(strings[2126]);
7757str->del(strings[2126]);
7758str->del(strings[1841]);
7759str->del(strings[2123]);
7760str->del(strings[2126]);
7761str->del(strings[1841]);
7762str->del(strings[2123]);
7763str->del(strings[2126]);
7764str->del(strings[2126]);
7765str->del(strings[2126]);
7766str->del(strings[2126]);
7767str->del(strings[2126]);
7768str->del(strings[2126]);
7769str->del(strings[2126]);
7770str->del(strings[2126]);
7771str->del(strings[2126]);
7772str->del(strings[1841]);
7773str->del(strings[2123]);
7774str->del(strings[2126]);
7775str->del(strings[1841]);
7776str->del(strings[2123]);
7777str->del(strings[1841]);
7778str->del(strings[2123]);
7779str->del(strings[1841]);
7780str->del(strings[2123]);
7781str->del(strings[1841]);
7782str->del(strings[2123]);
7783str->del(strings[1841]);
7784str->del(strings[2123]);
7785str->del(strings[1841]);
7786str->del(strings[2123]);
7787str->del(strings[1841]);
7788str->del(strings[2133]);
7789str->del(strings[2125]);
7790str->del(strings[2133]);
7791str->del(strings[2125]);
7792str->del(strings[2133]);
7793str->del(strings[2125]);
7794str->del(strings[1737]);
7795str->del(strings[1853]);
7796str->del(strings[2133]);
7797str->del(strings[2125]);
7798str->del(strings[2134]);
7799str->del(strings[1853]);
7800str->del(strings[2133]);
7801str->del(strings[2125]);
7802str->del(strings[2134]);
7803str->del(strings[1853]);
7804str->del(strings[2133]);
7805str->del(strings[2125]);
7806str->del(strings[2134]);
7807str->del(strings[1853]);
7808str->del(strings[2133]);
7809str->del(strings[2125]);
7810str->del(strings[2134]);
7811str->del(strings[1853]);
7812str->del(strings[2133]);
7813str->del(strings[2125]);
7814str->del(strings[2134]);
7815str->del(strings[1853]);
7816str->del(strings[2133]);
7817str->del(strings[2125]);
7818str->del(strings[2134]);
7819str->del(strings[1853]);
7820str->del(strings[2133]);
7821str->del(strings[2125]);
7822str->del(strings[2134]);
7823str->del(strings[1853]);
7824str->del(strings[2133]);
7825str->del(strings[2125]);
7826str->del(strings[2134]);
7827str->del(strings[1853]);
7828str->del(strings[2133]);
7829str->del(strings[2125]);
7830str->del(strings[2134]);
7831str->del(strings[1853]);
7832str->del(strings[2133]);
7833str->del(strings[2125]);
7834str->del(strings[2134]);
7835str->del(strings[1853]);
7836str->del(strings[2133]);
7837str->del(strings[2125]);
7838str->del(strings[2134]);
7839str->del(strings[1853]);
7840str->del(strings[2133]);
7841str->del(strings[2125]);
7842str->del(strings[2134]);
7843str->del(strings[1853]);
7844str->del(strings[2133]);
7845str->del(strings[2125]);
7846str->del(strings[2134]);
7847str->del(strings[1853]);
7848str->del(strings[2133]);
7849str->del(strings[2125]);
7850str->del(strings[2134]);
7851str->del(strings[1853]);
7852str->del(strings[2133]);
7853str->del(strings[2125]);
7854str->del(strings[2134]);
7855str->del(strings[1853]);
7856str->del(strings[2133]);
7857str->del(strings[2125]);
7858str->del(strings[2134]);
7859str->del(strings[1853]);
7860str->del(strings[2133]);
7861str->del(strings[2125]);
7862str->del(strings[2134]);
7863str->del(strings[1853]);
7864str->del(strings[2133]);
7865str->del(strings[2125]);
7866str->del(strings[2134]);
7867str->del(strings[1853]);
7868str->del(strings[2133]);
7869str->del(strings[2125]);
7870str->del(strings[2134]);
7871str->del(strings[1853]);
7872str->del(strings[2133]);
7873str->del(strings[2125]);
7874str->del(strings[2134]);
7875str->del(strings[1853]);
7876str->del(strings[2133]);
7877str->del(strings[2125]);
7878str->del(strings[2134]);
7879str->del(strings[1853]);
7880str->del(strings[2133]);
7881str->del(strings[2125]);
7882str->del(strings[2134]);
7883str->del(strings[1853]);
7884str->del(strings[2133]);
7885str->del(strings[2125]);
7886str->del(strings[2134]);
7887str->del(strings[1853]);
7888str->del(strings[2133]);
7889str->del(strings[2125]);
7890str->del(strings[2134]);
7891str->del(strings[1853]);
7892str->del(strings[2133]);
7893str->del(strings[2125]);
7894str->del(strings[2134]);
7895str->del(strings[1853]);
7896str->del(strings[2133]);
7897str->del(strings[2125]);
7898str->del(strings[2134]);
7899str->del(strings[1853]);
7900str->del(strings[2133]);
7901str->del(strings[2125]);
7902str->del(strings[2134]);
7903str->del(strings[1853]);
7904str->del(strings[2133]);
7905str->del(strings[2125]);
7906str->del(strings[2134]);
7907str->del(strings[1853]);
7908str->del(strings[2133]);
7909str->del(strings[2125]);
7910str->del(strings[2134]);
7911str->del(strings[1853]);
7912str->del(strings[2133]);
7913str->del(strings[2125]);
7914str->del(strings[2134]);
7915str->del(strings[1853]);
7916str->del(strings[2133]);
7917str->del(strings[2125]);
7918str->del(strings[2134]);
7919str->del(strings[1853]);
7920str->del(strings[2133]);
7921str->del(strings[2125]);
7922str->del(strings[2134]);
7923str->del(strings[1853]);
7924str->del(strings[2133]);
7925str->del(strings[2125]);
7926str->del(strings[2134]);
7927str->del(strings[1853]);
7928str->del(strings[2133]);
7929str->del(strings[2125]);
7930str->del(strings[2134]);
7931str->del(strings[1853]);
7932str->del(strings[2133]);
7933str->del(strings[2125]);
7934str->del(strings[2134]);
7935str->del(strings[1853]);
7936str->del(strings[2133]);
7937str->del(strings[2125]);
7938str->del(strings[2134]);
7939str->del(strings[1853]);
7940str->del(strings[2133]);
7941str->del(strings[2125]);
7942str->del(strings[2134]);
7943str->del(strings[1853]);
7944str->del(strings[2133]);
7945str->del(strings[2125]);
7946str->del(strings[2134]);
7947str->del(strings[1853]);
7948str->del(strings[2133]);
7949str->del(strings[2125]);
7950str->del(strings[2134]);
7951str->del(strings[1853]);
7952str->del(strings[2133]);
7953str->del(strings[2125]);
7954str->del(strings[2134]);
7955str->del(strings[1853]);
7956str->del(strings[2133]);
7957str->del(strings[2125]);
7958str->del(strings[2134]);
7959str->del(strings[1853]);
7960str->del(strings[2133]);
7961str->del(strings[2125]);
7962str->del(strings[2134]);
7963str->del(strings[1853]);
7964str->del(strings[2133]);
7965str->del(strings[2125]);
7966str->del(strings[2134]);
7967str->del(strings[1853]);
7968str->del(strings[2133]);
7969str->del(strings[2125]);
7970str->del(strings[2134]);
7971str->del(strings[1853]);
7972str->del(strings[2133]);
7973str->del(strings[2125]);
7974str->del(strings[2134]);
7975str->del(strings[1853]);
7976str->del(strings[2133]);
7977str->del(strings[2125]);
7978str->del(strings[2134]);
7979str->del(strings[1853]);
7980str->del(strings[2133]);
7981str->del(strings[2125]);
7982str->del(strings[2134]);
7983str->del(strings[1853]);
7984str->del(strings[2133]);
7985str->del(strings[2125]);
7986str->del(strings[2134]);
7987str->del(strings[1853]);
7988str->del(strings[2133]);
7989str->del(strings[2125]);
7990str->del(strings[2134]);
7991str->del(strings[1853]);
7992str->del(strings[2133]);
7993str->del(strings[2125]);
7994str->del(strings[2134]);
7995str->del(strings[1853]);
7996str->del(strings[2133]);
7997str->del(strings[2125]);
7998str->del(strings[2134]);
7999str->del(strings[1853]);
8000str->del(strings[2133]);
8001str->del(strings[2125]);
8002str->del(strings[2134]);
8003str->del(strings[1853]);
8004str->del(strings[2133]);
8005str->del(strings[2125]);
8006str->del(strings[2134]);
8007str->del(strings[1853]);
8008str->del(strings[2133]);
8009str->del(strings[2125]);
8010str->del(strings[2134]);
8011str->del(strings[1853]);
8012str->del(strings[2133]);
8013str->del(strings[2125]);
8014str->del(strings[2134]);
8015str->del(strings[1853]);
8016str->del(strings[2133]);
8017str->del(strings[2125]);
8018str->del(strings[2134]);
8019str->del(strings[1853]);
8020str->del(strings[2133]);
8021str->del(strings[2125]);
8022str->del(strings[2134]);
8023str->del(strings[1853]);
8024str->del(strings[2133]);
8025str->del(strings[2125]);
8026str->del(strings[2134]);
8027str->del(strings[1853]);
8028str->del(strings[2133]);
8029str->del(strings[2125]);
8030str->del(strings[2134]);
8031str->del(strings[1853]);
8032str->del(strings[2133]);
8033str->del(strings[2125]);
8034str->del(strings[2134]);
8035str->del(strings[1853]);
8036str->del(strings[2133]);
8037str->del(strings[2125]);
8038str->del(strings[2134]);
8039str->del(strings[1853]);
8040str->del(strings[2133]);
8041str->del(strings[2125]);
8042str->del(strings[2134]);
8043str->del(strings[1853]);
8044str->del(strings[2133]);
8045str->del(strings[2125]);
8046str->del(strings[2134]);
8047str->del(strings[1853]);
8048str->del(strings[2133]);
8049str->del(strings[2125]);
8050str->del(strings[2134]);
8051str->del(strings[1853]);
8052str->del(strings[2133]);
8053str->del(strings[2125]);
8054str->del(strings[2134]);
8055str->del(strings[1853]);
8056str->del(strings[2133]);
8057str->del(strings[2125]);
8058str->del(strings[2134]);
8059str->del(strings[1853]);
8060str->del(strings[2133]);
8061str->del(strings[2125]);
8062str->del(strings[2134]);
8063str->del(strings[1853]);
8064str->del(strings[2133]);
8065str->del(strings[2125]);
8066str->del(strings[2134]);
8067str->del(strings[1853]);
8068str->del(strings[2133]);
8069str->del(strings[2125]);
8070str->del(strings[2134]);
8071str->del(strings[1853]);
8072str->del(strings[2133]);
8073str->del(strings[2125]);
8074str->del(strings[2134]);
8075str->del(strings[1853]);
8076str->del(strings[2133]);
8077str->del(strings[2125]);
8078str->del(strings[2134]);
8079str->del(strings[1853]);
8080str->del(strings[2133]);
8081str->del(strings[2125]);
8082str->del(strings[2134]);
8083str->del(strings[1853]);
8084str->del(strings[2133]);
8085str->del(strings[2125]);
8086str->del(strings[2134]);
8087str->del(strings[1853]);
8088str->del(strings[2133]);
8089str->del(strings[2125]);
8090str->del(strings[2134]);
8091str->del(strings[1853]);
8092str->del(strings[2133]);
8093str->del(strings[2125]);
8094str->del(strings[2134]);
8095str->del(strings[1853]);
8096str->del(strings[2133]);
8097str->del(strings[2125]);
8098str->del(strings[2134]);
8099str->del(strings[1853]);
8100str->del(strings[2133]);
8101str->del(strings[2125]);
8102str->del(strings[2134]);
8103str->del(strings[1853]);
8104str->del(strings[2133]);
8105str->del(strings[2125]);
8106str->del(strings[2134]);
8107str->del(strings[1853]);
8108str->del(strings[2133]);
8109str->del(strings[2125]);
8110str->del(strings[2134]);
8111str->del(strings[1853]);
8112str->del(strings[2133]);
8113str->del(strings[2125]);
8114str->del(strings[2134]);
8115str->del(strings[1853]);
8116str->del(strings[2133]);
8117str->del(strings[2125]);
8118str->del(strings[2134]);
8119str->del(strings[1853]);
8120str->del(strings[2133]);
8121str->del(strings[2125]);
8122str->del(strings[2134]);
8123str->del(strings[1853]);
8124str->del(strings[2133]);
8125str->del(strings[2125]);
8126str->del(strings[2134]);
8127str->del(strings[1853]);
8128str->del(strings[2133]);
8129str->del(strings[2125]);
8130str->del(strings[2134]);
8131str->del(strings[1853]);
8132str->del(strings[2133]);
8133str->del(strings[2125]);
8134str->del(strings[2134]);
8135str->del(strings[1853]);
8136str->del(strings[2133]);
8137str->del(strings[2125]);
8138str->del(strings[2134]);
8139str->del(strings[1853]);
8140str->del(strings[2133]);
8141str->del(strings[2125]);
8142str->del(strings[2134]);
8143str->del(strings[1853]);
8144str->del(strings[2133]);
8145str->del(strings[2125]);
8146str->del(strings[2134]);
8147str->del(strings[1853]);
8148str->del(strings[2133]);
8149str->del(strings[2125]);
8150str->del(strings[2134]);
8151str->del(strings[1853]);
8152str->del(strings[2133]);
8153str->del(strings[2125]);
8154str->del(strings[2134]);
8155str->del(strings[1853]);
8156str->del(strings[2133]);
8157str->del(strings[2125]);
8158str->del(strings[2134]);
8159str->del(strings[1853]);
8160str->del(strings[2133]);
8161str->del(strings[2125]);
8162str->del(strings[2134]);
8163str->del(strings[1853]);
8164str->del(strings[2133]);
8165str->del(strings[2125]);
8166str->del(strings[2134]);
8167str->del(strings[1853]);
8168str->del(strings[2133]);
8169str->del(strings[2125]);
8170str->del(strings[2134]);
8171str->del(strings[1853]);
8172str->del(strings[2133]);
8173str->del(strings[2125]);
8174str->del(strings[2134]);
8175str->del(strings[1853]);
8176str->del(strings[2133]);
8177str->del(strings[2125]);
8178str->del(strings[2134]);
8179str->del(strings[1853]);
8180str->del(strings[2133]);
8181str->del(strings[2125]);
8182str->del(strings[2134]);
8183str->del(strings[1853]);
8184str->del(strings[2133]);
8185str->del(strings[2125]);
8186str->del(strings[2134]);
8187str->del(strings[1853]);
8188str->del(strings[2133]);
8189str->del(strings[2125]);
8190str->del(strings[2134]);
8191str->del(strings[1853]);
8192str->del(strings[2133]);
8193str->del(strings[2125]);
8194str->del(strings[2134]);
8195str->del(strings[1853]);
8196str->del(strings[2133]);
8197str->del(strings[2125]);
8198str->del(strings[2134]);
8199str->del(strings[1853]);
8200str->del(strings[2133]);
8201str->del(strings[2125]);
8202str->del(strings[2134]);
8203str->del(strings[1853]);
8204str->del(strings[2133]);
8205str->del(strings[2125]);
8206str->del(strings[2134]);
8207str->del(strings[1853]);
8208str->del(strings[2133]);
8209str->del(strings[2125]);
8210str->del(strings[2134]);
8211str->del(strings[1853]);
8212str->del(strings[2133]);
8213str->del(strings[2125]);
8214str->del(strings[2134]);
8215str->del(strings[1853]);
8216str->del(strings[2133]);
8217str->del(strings[2125]);
8218str->del(strings[2134]);
8219str->del(strings[1853]);
8220str->del(strings[2133]);
8221str->del(strings[2125]);
8222str->del(strings[2134]);
8223str->del(strings[1853]);
8224str->del(strings[2133]);
8225str->del(strings[2125]);
8226str->del(strings[2134]);
8227str->del(strings[1853]);
8228str->del(strings[2133]);
8229str->del(strings[2125]);
8230str->del(strings[2134]);
8231str->del(strings[1853]);
8232str->del(strings[2133]);
8233str->del(strings[2125]);
8234str->del(strings[2134]);
8235str->del(strings[1853]);
8236str->del(strings[2133]);
8237str->del(strings[2125]);
8238str->del(strings[2134]);
8239str->del(strings[1853]);
8240str->del(strings[2133]);
8241str->del(strings[2125]);
8242str->del(strings[2134]);
8243str->del(strings[1853]);
8244str->del(strings[2133]);
8245str->del(strings[2125]);
8246str->del(strings[2134]);
8247str->del(strings[1853]);
8248str->del(strings[2133]);
8249str->del(strings[2125]);
8250str->del(strings[2134]);
8251str->del(strings[1853]);
8252str->del(strings[2133]);
8253str->del(strings[2125]);
8254str->del(strings[2134]);
8255str->del(strings[1853]);
8256str->del(strings[2133]);
8257str->del(strings[2125]);
8258str->del(strings[2134]);
8259str->del(strings[1853]);
8260str->del(strings[2133]);
8261str->del(strings[2125]);
8262str->del(strings[2134]);
8263str->del(strings[1853]);
8264str->del(strings[2133]);
8265str->del(strings[2125]);
8266str->del(strings[2134]);
8267str->del(strings[1853]);
8268str->del(strings[2133]);
8269str->del(strings[2125]);
8270str->del(strings[2134]);
8271str->del(strings[1853]);
8272str->del(strings[2133]);
8273str->del(strings[2125]);
8274str->del(strings[2134]);
8275str->del(strings[1853]);
8276str->del(strings[2133]);
8277str->del(strings[2125]);
8278str->del(strings[2134]);
8279str->del(strings[1853]);
8280str->del(strings[2133]);
8281str->del(strings[2125]);
8282str->del(strings[2134]);
8283str->del(strings[1853]);
8284str->del(strings[2133]);
8285str->del(strings[2125]);
8286str->del(strings[2134]);
8287str->del(strings[1853]);
8288str->del(strings[2133]);
8289str->del(strings[2125]);
8290str->del(strings[2134]);
8291str->del(strings[1853]);
8292str->del(strings[2133]);
8293str->del(strings[2125]);
8294str->del(strings[2134]);
8295str->del(strings[1853]);
8296str->del(strings[2133]);
8297str->del(strings[2125]);
8298str->del(strings[2134]);
8299str->del(strings[1853]);
8300str->del(strings[2133]);
8301str->del(strings[2125]);
8302str->del(strings[2134]);
8303str->del(strings[1853]);
8304str->del(strings[2133]);
8305str->del(strings[2125]);
8306str->del(strings[2134]);
8307str->del(strings[1853]);
8308str->del(strings[2133]);
8309str->del(strings[2125]);
8310str->del(strings[2134]);
8311str->del(strings[1853]);
8312str->del(strings[2133]);
8313str->del(strings[2125]);
8314str->del(strings[2134]);
8315str->del(strings[1853]);
8316str->del(strings[2133]);
8317str->del(strings[2125]);
8318str->del(strings[2134]);
8319str->del(strings[1853]);
8320str->del(strings[2133]);
8321str->del(strings[2125]);
8322str->del(strings[2134]);
8323str->del(strings[1853]);
8324str->del(strings[2133]);
8325str->del(strings[2125]);
8326str->del(strings[2134]);
8327str->del(strings[1853]);
8328str->del(strings[2133]);
8329str->del(strings[2125]);
8330str->del(strings[2134]);
8331str->del(strings[1853]);
8332str->del(strings[2133]);
8333str->del(strings[2125]);
8334str->del(strings[2134]);
8335str->del(strings[1853]);
8336str->del(strings[2133]);
8337str->del(strings[2125]);
8338str->del(strings[2134]);
8339str->del(strings[1853]);
8340str->del(strings[2133]);
8341str->del(strings[2125]);
8342str->del(strings[2134]);
8343str->del(strings[1853]);
8344str->del(strings[2133]);
8345str->del(strings[2125]);
8346str->del(strings[2134]);
8347str->del(strings[1853]);
8348str->del(strings[2133]);
8349str->del(strings[2125]);
8350str->del(strings[2134]);
8351str->del(strings[1853]);
8352str->del(strings[2133]);
8353str->del(strings[2125]);
8354str->del(strings[2134]);
8355str->del(strings[1853]);
8356str->del(strings[2133]);
8357str->del(strings[2125]);
8358str->del(strings[2134]);
8359str->del(strings[1853]);
8360str->del(strings[2133]);
8361str->del(strings[2125]);
8362str->del(strings[2134]);
8363str->del(strings[1853]);
8364str->del(strings[2133]);
8365str->del(strings[2125]);
8366str->del(strings[2134]);
8367str->del(strings[1853]);
8368str->del(strings[2133]);
8369str->del(strings[2125]);
8370str->del(strings[2134]);
8371str->del(strings[1853]);
8372str->del(strings[2133]);
8373str->del(strings[2125]);
8374str->del(strings[2134]);
8375str->del(strings[1853]);
8376str->del(strings[2133]);
8377str->del(strings[2125]);
8378str->del(strings[2134]);
8379str->del(strings[1853]);
8380str->del(strings[2133]);
8381str->del(strings[2125]);
8382str->del(strings[2134]);
8383str->del(strings[1853]);
8384str->del(strings[2133]);
8385str->del(strings[2125]);
8386str->del(strings[2134]);
8387str->del(strings[1853]);
8388str->del(strings[2133]);
8389str->del(strings[2125]);
8390str->del(strings[2134]);
8391str->del(strings[1853]);
8392str->del(strings[2133]);
8393str->del(strings[2125]);
8394str->del(strings[2134]);
8395str->del(strings[1853]);
8396str->del(strings[2133]);
8397str->del(strings[2125]);
8398str->del(strings[2134]);
8399str->del(strings[1853]);
8400str->del(strings[2133]);
8401str->del(strings[2125]);
8402str->del(strings[2134]);
8403str->del(strings[1853]);
8404str->del(strings[2133]);
8405str->del(strings[2125]);
8406str->del(strings[2134]);
8407str->del(strings[1853]);
8408str->del(strings[2135]);
8409str->del(strings[1842]);
8410strings[2143] = str->add("drag,set");
8411strings[2144] = str->add("temp_top");
8412strings[2141] = str->add(strings[2141]);
8413strings[2145] = str->add("discharge");
8414strings[1932] = str->add(strings[1932]);
8415strings[2145] = str->add(strings[2145]);
8416strings[2141] = str->add(strings[2141]);
8417strings[2146] = str->add("discharge2");
8418strings[1932] = str->add(strings[1932]);
8419strings[2146] = str->add(strings[2146]);
8420str->del(strings[2137]);
8421str->del(strings[2125]);
8422strings[2147] = str->add("custom");
8423strings[2147] = str->add(strings[2147]);
8424strings[2147] = str->add(strings[2147]);
8425strings[2147] = str->add(strings[2147]);
8426str->del(strings[2141]);
8427str->del(strings[2142]);
8428str->del(strings[2141]);
8429str->del(strings[2142]);
8430str->del(strings[2143]);
8431str->del(strings[2144]);
8432str->del(strings[2141]);
8433str->del(strings[2145]);
8434str->del(strings[1932]);
8435str->del(strings[2145]);
8436str->del(strings[2141]);
8437str->del(strings[2146]);
8438str->del(strings[1932]);
8439str->del(strings[2146]);
8440str->del(strings[1760]);
8441strings[1760] = str->add(strings[1760]);
8442str->del(strings[1760]);
8443strings[1760] = str->add(strings[1760]);
8444str->del(strings[1760]);
8445strings[1760] = str->add(strings[1760]);
8446str->del(strings[1760]);
8447strings[1760] = str->add(strings[1760]);
8448str->del(strings[1761]);
8449strings[1761] = str->add(strings[1761]);
8450str->del(strings[1761]);
8451strings[1761] = str->add(strings[1761]);
8452str->del(strings[1762]);
8453strings[1762] = str->add(strings[1762]);
8454str->del(strings[1762]);
8455strings[1762] = str->add(strings[1762]);
8456str->del(strings[1763]);
8457strings[1763] = str->add(strings[1763]);
8458str->del(strings[1763]);
8459strings[1763] = str->add(strings[1763]);
8460str->del(strings[1764]);
8461strings[1764] = str->add(strings[1764]);
8462str->del(strings[1764]);
8463strings[1764] = str->add(strings[1764]);
8464str->del(strings[1765]);
8465strings[1765] = str->add(strings[1765]);
8466str->del(strings[1765]);
8467strings[1765] = str->add(strings[1765]);
8468str->del(strings[1766]);
8469strings[1766] = str->add(strings[1766]);
8470str->del(strings[1766]);
8471strings[1766] = str->add(strings[1766]);
8472str->del(strings[1767]);
8473strings[1767] = str->add(strings[1767]);
8474str->del(strings[1767]);
8475strings[1767] = str->add(strings[1767]);
8476strings[64] = str->add(strings[64]);
8477strings[2148] = str->add("images/60");
8478strings[2149] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/60");
8479strings[64] = str->add(strings[64]);
8480strings[2148] = str->add(strings[2148]);
8481strings[64] = str->add(strings[64]);
8482strings[2150] = str->add("images/61");
8483strings[2151] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/61");
8484strings[64] = str->add(strings[64]);
8485strings[2150] = str->add(strings[2150]);
8486strings[2152] = str->add("resize");
8487strings[2152] = str->add(strings[2152]);
8488strings[2152] = str->add(strings[2152]);
8489strings[2152] = str->add(strings[2152]);
8490strings[2152] = str->add(strings[2152]);
8491strings[2152] = str->add(strings[2152]);
8492strings[2152] = str->add(strings[2152]);
8493strings[2152] = str->add(strings[2152]);
8494strings[2152] = str->add(strings[2152]);
8495strings[2152] = str->add(strings[2152]);
8496strings[2152] = str->add(strings[2152]);
8497strings[2152] = str->add(strings[2152]);
8498strings[2152] = str->add(strings[2152]);
8499strings[2152] = str->add(strings[2152]);
8500strings[2152] = str->add(strings[2152]);
8501strings[2152] = str->add(strings[2152]);
8502strings[2152] = str->add(strings[2152]);
8503strings[64] = str->add(strings[64]);
8504strings[2153] = str->add("images/79");
8505strings[2154] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/79");
8506strings[64] = str->add(strings[64]);
8507strings[2153] = str->add(strings[2153]);
8508strings[64] = str->add(strings[64]);
8509strings[2155] = str->add("images/80");
8510strings[2156] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/80");
8511strings[64] = str->add(strings[64]);
8512strings[2155] = str->add(strings[2155]);
8513strings[64] = str->add(strings[64]);
8514strings[2157] = str->add("images/81");
8515strings[2158] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/81");
8516strings[64] = str->add(strings[64]);
8517strings[2157] = str->add(strings[2157]);
8518str->del(strings[64]);
8519strings[379] = str->add(strings[379]);
8520strings[2136] = str->add(strings[2136]);
8521strings[2136] = str->add(strings[2136]);
8522strings[2136] = str->add(strings[2136]);
8523strings[2152] = str->add(strings[2152]);
8524strings[64] = str->add(strings[64]);
8525strings[2159] = str->add("images/204");
8526strings[2160] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/204");
8527strings[64] = str->add(strings[64]);
8528strings[2159] = str->add(strings[2159]);
8529str->del(strings[64]);
8530strings[379] = str->add(strings[379]);
8531strings[2161] = str->add("Sans:style=Bold");
8532strings[2162] = str->add("Edje-Vera-Bold");
8533str->del(strings[2161]);
8534str->del(strings[2162]);
8535strings[379] = str->add(strings[379]);
8536strings[2120] = str->add(strings[2120]);
8537strings[2120] = str->add(strings[2120]);
8538strings[2120] = str->add(strings[2120]);
8539strings[64] = str->add(strings[64]);
8540strings[2163] = str->add("images/205");
8541strings[2164] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/205");
8542strings[64] = str->add(strings[64]);
8543strings[2163] = str->add(strings[2163]);
8544strings[64] = str->add(strings[64]);
8545strings[2165] = str->add("images/83");
8546strings[2166] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/83");
8547strings[64] = str->add(strings[64]);
8548strings[2165] = str->add(strings[2165]);
8549strings[2152] = str->add(strings[2152]);
8550strings[2139] = str->add(strings[2139]);
8551str->del(strings[1842]);
8552strings[2139] = str->add(strings[2139]);
8553str->del(strings[1842]);
8554strings[2139] = str->add(strings[2139]);
8555strings[2140] = str->add(strings[2140]);
8556str->del(strings[1842]);
8557strings[2140] = str->add(strings[2140]);
8558str->del(strings[1842]);
8559strings[2140] = str->add(strings[2140]);
8560strings[2152] = str->add(strings[2152]);
8561strings[64] = str->add(strings[64]);
8562strings[2167] = str->add("images/82");
8563strings[2168] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/82");
8564strings[64] = str->add(strings[64]);
8565strings[2167] = str->add(strings[2167]);
8566strings[64] = str->add(strings[64]);
8567strings[2169] = str->add("images/115");
8568strings[2170] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/115");
8569strings[64] = str->add(strings[64]);
8570strings[2169] = str->add(strings[2169]);
8571strings[64] = str->add(strings[64]);
8572strings[2171] = str->add("images/201");
8573strings[2172] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/201");
8574strings[64] = str->add(strings[64]);
8575strings[2171] = str->add(strings[2171]);
8576strings[64] = str->add(strings[64]);
8577strings[2165] = str->add(strings[2165]);
8578strings[2152] = str->add(strings[2152]);
8579strings[2113] = str->add(strings[2113]);
8580strings[1552] = str->add(strings[1552]);
8581strings[2173] = str->add("/usr/devel/lib/enlightenment/modules/note/e-module-note.edj//://images/0");
8582strings[2113] = str->add(strings[2113]);
8583strings[1552] = str->add(strings[1552]);
8584strings[2152] = str->add(strings[2152]);
8585str->del(strings[1760]);
8586strings[1760] = str->add(strings[1760]);
8587strings[1760] = str->add(strings[1760]);
8588str->del(strings[1760]);
8589strings[2174] = str->add("D...");
8590str->del(strings[1842]);
8591strings[1842] = str->add(strings[1842]);
8592str->del(strings[2174]);
8593str->del(strings[1761]);
8594strings[1761] = str->add(strings[1761]);
8595strings[1761] = str->add(strings[1761]);
8596str->del(strings[1761]);
8597strings[2175] = str->add("D...");
8598str->del(strings[1842]);
8599strings[1842] = str->add(strings[1842]);
8600str->del(strings[2175]);
8601str->del(strings[1762]);
8602strings[1762] = str->add(strings[1762]);
8603strings[1762] = str->add(strings[1762]);
8604str->del(strings[1762]);
8605strings[2176] = str->add("D...");
8606str->del(strings[1842]);
8607strings[1842] = str->add(strings[1842]);
8608str->del(strings[2176]);
8609str->del(strings[1763]);
8610strings[1763] = str->add(strings[1763]);
8611strings[1763] = str->add(strings[1763]);
8612str->del(strings[1763]);
8613strings[2177] = str->add("D...");
8614str->del(strings[1842]);
8615strings[1842] = str->add(strings[1842]);
8616str->del(strings[2177]);
8617str->del(strings[1764]);
8618strings[1764] = str->add(strings[1764]);
8619strings[1764] = str->add(strings[1764]);
8620str->del(strings[1764]);
8621strings[2178] = str->add("D...");
8622str->del(strings[1842]);
8623strings[1842] = str->add(strings[1842]);
8624str->del(strings[2178]);
8625str->del(strings[1765]);
8626strings[1765] = str->add(strings[1765]);
8627strings[1765] = str->add(strings[1765]);
8628str->del(strings[1765]);
8629strings[2179] = str->add("D...");
8630str->del(strings[1842]);
8631strings[1842] = str->add(strings[1842]);
8632str->del(strings[2179]);
8633str->del(strings[1766]);
8634strings[1766] = str->add(strings[1766]);
8635strings[1766] = str->add(strings[1766]);
8636str->del(strings[1766]);
8637strings[2180] = str->add("D...");
8638str->del(strings[1842]);
8639strings[1842] = str->add(strings[1842]);
8640str->del(strings[2180]);
8641str->del(strings[1767]);
8642strings[1767] = str->add(strings[1767]);
8643strings[1767] = str->add(strings[1767]);
8644str->del(strings[1767]);
8645strings[2181] = str->add("D...");
8646str->del(strings[1842]);
8647strings[1842] = str->add(strings[1842]);
8648str->del(strings[2181]);
8649str->del(strings[1768]);
8650strings[1768] = str->add(strings[1768]);
8651strings[1768] = str->add(strings[1768]);
8652str->del(strings[1768]);
8653strings[2182] = str->add("D...");
8654str->del(strings[1842]);
8655strings[1842] = str->add(strings[1842]);
8656str->del(strings[2182]);
8657str->del(strings[1769]);
8658strings[1769] = str->add(strings[1769]);
8659strings[1769] = str->add(strings[1769]);
8660str->del(strings[1769]);
8661strings[2183] = str->add("D...");
8662str->del(strings[1842]);
8663strings[1842] = str->add(strings[1842]);
8664str->del(strings[2183]);
8665strings[2073] = str->add(strings[2073]);
8666str->del(strings[1842]);
8667strings[2073] = str->add(strings[2073]);
8668str->del(strings[1842]);
8669strings[2073] = str->add(strings[2073]);
8670strings[2076] = str->add(strings[2076]);
8671str->del(strings[1842]);
8672strings[2076] = str->add(strings[2076]);
8673str->del(strings[1842]);
8674strings[2076] = str->add(strings[2076]);
8675strings[2079] = str->add(strings[2079]);
8676str->del(strings[1842]);
8677strings[2079] = str->add(strings[2079]);
8678str->del(strings[1842]);
8679strings[2079] = str->add(strings[2079]);
8680strings[469] = str->add(strings[469]);
8681strings[2184] = str->add("images/249");
8682strings[2185] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/249");
8683strings[469] = str->add(strings[469]);
8684strings[2184] = str->add(strings[2184]);
8685strings[469] = str->add(strings[469]);
8686strings[2186] = str->add("images/250");
8687strings[2187] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/250");
8688strings[469] = str->add(strings[469]);
8689strings[2186] = str->add(strings[2186]);
8690strings[469] = str->add(strings[469]);
8691strings[2188] = str->add("images/243");
8692strings[2189] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/243");
8693strings[469] = str->add(strings[469]);
8694strings[2188] = str->add(strings[2188]);
8695strings[469] = str->add(strings[469]);
8696strings[2190] = str->add("images/240");
8697strings[2191] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/240");
8698strings[469] = str->add(strings[469]);
8699strings[2190] = str->add(strings[2190]);
8700strings[469] = str->add(strings[469]);
8701strings[2190] = str->add(strings[2190]);
8702strings[469] = str->add(strings[469]);
8703strings[2190] = str->add(strings[2190]);
8704strings[469] = str->add(strings[469]);
8705strings[2190] = str->add(strings[2190]);
8706strings[469] = str->add(strings[469]);
8707strings[2188] = str->add(strings[2188]);
8708strings[469] = str->add(strings[469]);
8709strings[2192] = str->add("images/241");
8710strings[2193] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/241");
8711strings[469] = str->add(strings[469]);
8712strings[2192] = str->add(strings[2192]);
8713strings[469] = str->add(strings[469]);
8714strings[2192] = str->add(strings[2192]);
8715strings[469] = str->add(strings[469]);
8716strings[2192] = str->add(strings[2192]);
8717strings[469] = str->add(strings[469]);
8718strings[2192] = str->add(strings[2192]);
8719strings[469] = str->add(strings[469]);
8720strings[2194] = str->add("images/247");
8721strings[2195] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/247");
8722strings[469] = str->add(strings[469]);
8723strings[2194] = str->add(strings[2194]);
8724strings[469] = str->add(strings[469]);
8725strings[2196] = str->add("images/242");
8726strings[2197] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/242");
8727strings[469] = str->add(strings[469]);
8728strings[2196] = str->add(strings[2196]);
8729strings[469] = str->add(strings[469]);
8730strings[2196] = str->add(strings[2196]);
8731strings[469] = str->add(strings[469]);
8732strings[2196] = str->add(strings[2196]);
8733strings[469] = str->add(strings[469]);
8734strings[2196] = str->add(strings[2196]);
8735strings[469] = str->add(strings[469]);
8736strings[2194] = str->add(strings[2194]);
8737strings[469] = str->add(strings[469]);
8738strings[2198] = str->add("images/239");
8739strings[2199] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/239");
8740strings[469] = str->add(strings[469]);
8741strings[2198] = str->add(strings[2198]);
8742strings[469] = str->add(strings[469]);
8743strings[2198] = str->add(strings[2198]);
8744strings[469] = str->add(strings[469]);
8745strings[2198] = str->add(strings[2198]);
8746strings[469] = str->add(strings[469]);
8747strings[2198] = str->add(strings[2198]);
8748strings[469] = str->add(strings[469]);
8749strings[2200] = str->add("images/245");
8750strings[2201] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/245");
8751strings[469] = str->add(strings[469]);
8752strings[2200] = str->add(strings[2200]);
8753strings[469] = str->add(strings[469]);
8754strings[2200] = str->add(strings[2200]);
8755strings[469] = str->add(strings[469]);
8756strings[2202] = str->add("images/246");
8757strings[2203] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/246");
8758strings[469] = str->add(strings[469]);
8759strings[2202] = str->add(strings[2202]);
8760strings[469] = str->add(strings[469]);
8761strings[2202] = str->add(strings[2202]);
8762strings[469] = str->add(strings[469]);
8763strings[2184] = str->add(strings[2184]);
8764strings[469] = str->add(strings[469]);
8765strings[2186] = str->add(strings[2186]);
8766strings[469] = str->add(strings[469]);
8767strings[2188] = str->add(strings[2188]);
8768strings[469] = str->add(strings[469]);
8769strings[2190] = str->add(strings[2190]);
8770strings[469] = str->add(strings[469]);
8771strings[2190] = str->add(strings[2190]);
8772strings[469] = str->add(strings[469]);
8773strings[2190] = str->add(strings[2190]);
8774strings[469] = str->add(strings[469]);
8775strings[2190] = str->add(strings[2190]);
8776strings[469] = str->add(strings[469]);
8777strings[2188] = str->add(strings[2188]);
8778strings[469] = str->add(strings[469]);
8779strings[2192] = str->add(strings[2192]);
8780strings[469] = str->add(strings[469]);
8781strings[2192] = str->add(strings[2192]);
8782strings[469] = str->add(strings[469]);
8783strings[2192] = str->add(strings[2192]);
8784strings[469] = str->add(strings[469]);
8785strings[2192] = str->add(strings[2192]);
8786strings[469] = str->add(strings[469]);
8787strings[2194] = str->add(strings[2194]);
8788strings[469] = str->add(strings[469]);
8789strings[2196] = str->add(strings[2196]);
8790strings[469] = str->add(strings[469]);
8791strings[2196] = str->add(strings[2196]);
8792strings[469] = str->add(strings[469]);
8793strings[2196] = str->add(strings[2196]);
8794strings[469] = str->add(strings[469]);
8795strings[2196] = str->add(strings[2196]);
8796strings[469] = str->add(strings[469]);
8797strings[2194] = str->add(strings[2194]);
8798strings[469] = str->add(strings[469]);
8799strings[2198] = str->add(strings[2198]);
8800strings[469] = str->add(strings[469]);
8801strings[2198] = str->add(strings[2198]);
8802strings[469] = str->add(strings[469]);
8803strings[2198] = str->add(strings[2198]);
8804strings[469] = str->add(strings[469]);
8805strings[2198] = str->add(strings[2198]);
8806strings[469] = str->add(strings[469]);
8807strings[2200] = str->add(strings[2200]);
8808strings[469] = str->add(strings[469]);
8809strings[2200] = str->add(strings[2200]);
8810strings[469] = str->add(strings[469]);
8811strings[2202] = str->add(strings[2202]);
8812strings[469] = str->add(strings[469]);
8813strings[2202] = str->add(strings[2202]);
8814str->del(strings[2152]);
8815str->del(strings[2152]);
8816str->del(strings[2152]);
8817str->del(strings[2152]);
8818str->del(strings[2152]);
8819str->del(strings[2152]);
8820str->del(strings[2152]);
8821str->del(strings[2152]);
8822str->del(strings[2152]);
8823str->del(strings[2152]);
8824str->del(strings[2152]);
8825str->del(strings[2152]);
8826str->del(strings[2152]);
8827str->del(strings[2152]);
8828str->del(strings[2152]);
8829str->del(strings[2152]);
8830str->del(strings[2152]);
8831str->del(strings[2152]);
8832str->del(strings[2152]);
8833str->del(strings[2152]);
8834str->del(strings[2152]);
8835str->del(strings[2152]);
8836str->del(strings[64]);
8837str->del(strings[1964]);
8838str->del(strings[64]);
8839str->del(strings[1966]);
8840str->del(strings[64]);
8841str->del(strings[1970]);
8842str->del(strings[379]);
8843str->del(strings[64]);
8844str->del(strings[2058]);
8845str->del(strings[64]);
8846str->del(strings[1968]);
8847str->del(strings[64]);
8848str->del(strings[1964]);
8849str->del(strings[64]);
8850str->del(strings[1966]);
8851str->del(strings[64]);
8852str->del(strings[1970]);
8853str->del(strings[379]);
8854str->del(strings[64]);
8855str->del(strings[2058]);
8856str->del(strings[64]);
8857str->del(strings[1968]);
8858str->del(strings[64]);
8859str->del(strings[1964]);
8860str->del(strings[64]);
8861str->del(strings[1966]);
8862str->del(strings[64]);
8863str->del(strings[1970]);
8864str->del(strings[379]);
8865str->del(strings[64]);
8866str->del(strings[2058]);
8867str->del(strings[64]);
8868str->del(strings[1968]);
8869str->del(strings[64]);
8870str->del(strings[1964]);
8871str->del(strings[64]);
8872str->del(strings[1966]);
8873str->del(strings[64]);
8874str->del(strings[1970]);
8875str->del(strings[379]);
8876str->del(strings[64]);
8877str->del(strings[2058]);
8878str->del(strings[64]);
8879str->del(strings[1968]);
8880str->del(strings[64]);
8881str->del(strings[1964]);
8882str->del(strings[64]);
8883str->del(strings[1966]);
8884str->del(strings[64]);
8885str->del(strings[1970]);
8886str->del(strings[379]);
8887str->del(strings[64]);
8888str->del(strings[2058]);
8889str->del(strings[64]);
8890str->del(strings[1968]);
8891str->del(strings[64]);
8892str->del(strings[1964]);
8893str->del(strings[64]);
8894str->del(strings[1966]);
8895str->del(strings[64]);
8896str->del(strings[1970]);
8897str->del(strings[379]);
8898str->del(strings[64]);
8899str->del(strings[2058]);
8900str->del(strings[64]);
8901str->del(strings[1968]);
8902str->del(strings[64]);
8903str->del(strings[1964]);
8904str->del(strings[64]);
8905str->del(strings[1966]);
8906str->del(strings[64]);
8907str->del(strings[1970]);
8908str->del(strings[379]);
8909str->del(strings[64]);
8910str->del(strings[2058]);
8911str->del(strings[64]);
8912str->del(strings[1968]);
8913str->del(strings[64]);
8914str->del(strings[1964]);
8915str->del(strings[64]);
8916str->del(strings[1966]);
8917str->del(strings[64]);
8918str->del(strings[1970]);
8919str->del(strings[379]);
8920str->del(strings[64]);
8921str->del(strings[2058]);
8922str->del(strings[64]);
8923str->del(strings[1968]);
8924str->del(strings[64]);
8925str->del(strings[1964]);
8926str->del(strings[64]);
8927str->del(strings[1966]);
8928str->del(strings[64]);
8929str->del(strings[1970]);
8930str->del(strings[379]);
8931str->del(strings[64]);
8932str->del(strings[2058]);
8933str->del(strings[64]);
8934str->del(strings[1968]);
8935str->del(strings[64]);
8936str->del(strings[1964]);
8937str->del(strings[64]);
8938str->del(strings[1966]);
8939str->del(strings[64]);
8940str->del(strings[1970]);
8941str->del(strings[379]);
8942str->del(strings[64]);
8943str->del(strings[2058]);
8944str->del(strings[64]);
8945str->del(strings[1968]);
8946str->del(strings[64]);
8947str->del(strings[2163]);
8948strings[64] = str->add(strings[64]);
8949strings[2204] = str->add("images/220");
8950strings[2205] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/220");
8951strings[64] = str->add(strings[64]);
8952strings[2204] = str->add(strings[2204]);
8953str->del(strings[64]);
8954str->del(strings[1964]);
8955str->del(strings[64]);
8956str->del(strings[1966]);
8957str->del(strings[64]);
8958str->del(strings[1970]);
8959str->del(strings[379]);
8960str->del(strings[64]);
8961str->del(strings[2058]);
8962str->del(strings[64]);
8963str->del(strings[1968]);
8964str->del(strings[64]);
8965str->del(strings[1964]);
8966str->del(strings[64]);
8967str->del(strings[1966]);
8968str->del(strings[64]);
8969str->del(strings[1970]);
8970str->del(strings[379]);
8971str->del(strings[64]);
8972str->del(strings[2058]);
8973str->del(strings[64]);
8974str->del(strings[1968]);
8975str->del(strings[64]);
8976str->del(strings[1964]);
8977str->del(strings[64]);
8978str->del(strings[1966]);
8979str->del(strings[64]);
8980str->del(strings[1970]);
8981str->del(strings[379]);
8982str->del(strings[64]);
8983str->del(strings[2058]);
8984str->del(strings[64]);
8985str->del(strings[1968]);
8986str->del(strings[64]);
8987str->del(strings[1964]);
8988str->del(strings[64]);
8989str->del(strings[1966]);
8990str->del(strings[64]);
8991str->del(strings[1970]);
8992str->del(strings[379]);
8993str->del(strings[64]);
8994str->del(strings[2058]);
8995str->del(strings[64]);
8996str->del(strings[1968]);
8997str->del(strings[64]);
8998str->del(strings[1964]);
8999str->del(strings[64]);
9000str->del(strings[1966]);
9001str->del(strings[64]);
9002str->del(strings[1970]);
9003str->del(strings[379]);
9004str->del(strings[64]);
9005str->del(strings[2058]);
9006str->del(strings[64]);
9007str->del(strings[1968]);
9008str->del(strings[64]);
9009str->del(strings[1964]);
9010str->del(strings[64]);
9011str->del(strings[1966]);
9012str->del(strings[64]);
9013str->del(strings[1970]);
9014str->del(strings[379]);
9015str->del(strings[64]);
9016str->del(strings[2058]);
9017str->del(strings[64]);
9018str->del(strings[1968]);
9019str->del(strings[64]);
9020str->del(strings[1964]);
9021str->del(strings[64]);
9022str->del(strings[1966]);
9023str->del(strings[64]);
9024str->del(strings[1970]);
9025str->del(strings[379]);
9026str->del(strings[64]);
9027str->del(strings[2058]);
9028str->del(strings[64]);
9029str->del(strings[1968]);
9030str->del(strings[64]);
9031str->del(strings[1964]);
9032str->del(strings[64]);
9033str->del(strings[1966]);
9034str->del(strings[64]);
9035str->del(strings[1970]);
9036str->del(strings[379]);
9037str->del(strings[64]);
9038str->del(strings[2058]);
9039str->del(strings[64]);
9040str->del(strings[1968]);
9041str->del(strings[64]);
9042str->del(strings[1964]);
9043str->del(strings[64]);
9044str->del(strings[1966]);
9045str->del(strings[64]);
9046str->del(strings[1970]);
9047str->del(strings[379]);
9048str->del(strings[64]);
9049str->del(strings[2058]);
9050str->del(strings[64]);
9051str->del(strings[1968]);
9052str->del(strings[64]);
9053str->del(strings[1964]);
9054str->del(strings[64]);
9055str->del(strings[1966]);
9056str->del(strings[64]);
9057str->del(strings[1970]);
9058str->del(strings[379]);
9059str->del(strings[64]);
9060str->del(strings[2058]);
9061str->del(strings[64]);
9062str->del(strings[1968]);
9063str->del(strings[2070]);
9064str->del(strings[2070]);
9065str->del(strings[2073]);
9066str->del(strings[471]);
9067str->del(strings[469]);
9068str->del(strings[2074]);
9069str->del(strings[2074]);
9070str->del(strings[2076]);
9071str->del(strings[471]);
9072str->del(strings[469]);
9073str->del(strings[2077]);
9074str->del(strings[2077]);
9075str->del(strings[2079]);
9076str->del(strings[471]);
9077str->del(strings[469]);
9078str->del(strings[2070]);
9079str->del(strings[2070]);
9080str->del(strings[2073]);
9081str->del(strings[471]);
9082str->del(strings[469]);
9083str->del(strings[2074]);
9084str->del(strings[2074]);
9085str->del(strings[2076]);
9086str->del(strings[471]);
9087str->del(strings[469]);
9088str->del(strings[2077]);
9089str->del(strings[2077]);
9090str->del(strings[2079]);
9091str->del(strings[471]);
9092str->del(strings[469]);
9093str->del(strings[2070]);
9094str->del(strings[2070]);
9095str->del(strings[2073]);
9096str->del(strings[471]);
9097str->del(strings[469]);
9098str->del(strings[2074]);
9099str->del(strings[2074]);
9100str->del(strings[2076]);
9101str->del(strings[471]);
9102str->del(strings[469]);
9103str->del(strings[2077]);
9104str->del(strings[2077]);
9105str->del(strings[2079]);
9106str->del(strings[471]);
9107str->del(strings[469]);
9108str->del(strings[7]);
9109str->del(strings[1869]);
9110strings[7] = str->add(strings[7]);
9111strings[2206] = str->add("images/10");
9112strings[2207] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/10");
9113strings[7] = str->add(strings[7]);
9114strings[2206] = str->add(strings[2206]);
9115strings[1932] = str->add(strings[1932]);
9116strings[2208] = str->add("on");
9117strings[1932] = str->add(strings[1932]);
9118strings[2208] = str->add(strings[2208]);
9119str->del(strings[1932]);
9120str->del(strings[2208]);
9121str->del(strings[1932]);
9122str->del(strings[2208]);
9123strings[2209] = str->add("/usr/devel/lib/enlightenment/modules/exebuf/linux-gnu-x86_64/module.so");
9124strings[2209] = str->add(strings[2209]);
9125strings[50] = str->add(strings[50]);
9126strings[2210] = str->add("/usr/devel/lib/enlightenment/modules/exebuf");
9127str->del(strings[2209]);
9128strings[2211] = str->add("Run Command Dialog");
9129strings[50] = str->add(strings[50]);
9130str->del(strings[50]);
9131strings[1932] = str->add(strings[1932]);
9132strings[2212] = str->add("off");
9133str->del(strings[1932]);
9134str->del(strings[2212]);
9135str->del(strings[7]);
9136str->del(strings[2206]);
9137strings[7] = str->add(strings[7]);
9138strings[2213] = str->add("images/11");
9139strings[2214] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/11");
9140strings[7] = str->add(strings[7]);
9141strings[2213] = str->add(strings[2213]);
9142strings[2215] = str->add("/usr/devel/lib/enlightenment/modules/winlist/linux-gnu-x86_64/module.so");
9143strings[2215] = str->add(strings[2215]);
9144strings[49] = str->add(strings[49]);
9145strings[2216] = str->add("/usr/devel/lib/enlightenment/modules/winlist");
9146str->del(strings[2215]);
9147strings[2217] = str->add("Window : List");
9148strings[2218] = str->add("Next Window");
9149strings[49] = str->add(strings[49]);
9150strings[132] = str->add(strings[132]);
9151strings[2219] = str->add("Previous Window");
9152strings[49] = str->add(strings[49]);
9153strings[133] = str->add(strings[133]);
9154str->del(strings[49]);
9155str->del(strings[7]);
9156str->del(strings[2213]);
9157strings[7] = str->add(strings[7]);
9158strings[2220] = str->add("images/12");
9159strings[2221] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/12");
9160strings[7] = str->add(strings[7]);
9161strings[2220] = str->add(strings[2220]);
9162strings[2222] = str->add("/usr/devel/lib/enlightenment/modules/conf/linux-gnu-x86_64/module.so");
9163strings[2222] = str->add(strings[2222]);
9164strings[48] = str->add(strings[48]);
9165strings[2223] = str->add("/usr/devel/lib/enlightenment/modules/conf");
9166str->del(strings[2222]);
9167strings[2224] = str->add("Configuration Panel");
9168strings[2225] = str->add("configuration");
9169str->del(strings[48]);
9170str->del(strings[7]);
9171str->del(strings[2220]);
9172strings[7] = str->add(strings[7]);
9173strings[2226] = str->add("images/13");
9174strings[2227] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/13");
9175strings[7] = str->add(strings[7]);
9176strings[2226] = str->add(strings[2226]);
9177strings[2228] = str->add("/usr/devel/lib/enlightenment/modules/conf_applications/linux-gnu-x86_64/module.so");
9178strings[2228] = str->add(strings[2228]);
9179strings[47] = str->add(strings[47]);
9180strings[2229] = str->add("/usr/devel/lib/enlightenment/modules/conf_applications");
9181str->del(strings[2228]);
9182strings[2230] = str->add("applications");
9183strings[2231] = str->add("Applications");
9184strings[2232] = str->add("enlightenment/applications");
9185strings[2233] = str->add("new_application");
9186strings[2234] = str->add("New Application");
9187strings[2235] = str->add("enlightenment/add_application");
9188strings[2236] = str->add("ibar_applications");
9189strings[2237] = str->add("IBar Applications");
9190strings[2238] = str->add("enlightenment/ibar_applications");
9191strings[2239] = str->add("restart_applications");
9192strings[2240] = str->add("Restart Applications");
9193strings[2241] = str->add("enlightenment/restart_applications");
9194strings[2242] = str->add("startup_applications");
9195strings[2243] = str->add("Startup Applications");
9196strings[2244] = str->add("enlightenment/startup_applications");
9197strings[2245] = str->add("internal");
9198strings[2246] = str->add("Internal");
9199strings[2247] = str->add("enlightenment/internal");
9200strings[2248] = str->add("ibar_other");
9201strings[2249] = str->add("IBar Other");
9202strings[2250] = str->add("enlightenment/windows");
9203strings[2251] = str->add("menus");
9204strings[2252] = str->add("Menus");
9205strings[2253] = str->add("enlightenment/menus");
9206strings[2254] = str->add("favorites_menu");
9207strings[2255] = str->add("Favorites Menu");
9208strings[2256] = str->add("enlightenment/favorites");
9209str->del(strings[47]);
9210str->del(strings[7]);
9211str->del(strings[2226]);
9212strings[7] = str->add(strings[7]);
9213strings[2257] = str->add("images/14");
9214strings[2258] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/14");
9215strings[7] = str->add(strings[7]);
9216strings[2257] = str->add(strings[2257]);
9217strings[2259] = str->add("/usr/devel/lib/enlightenment/modules/conf_borders/linux-gnu-x86_64/module.so");
9218strings[2259] = str->add(strings[2259]);
9219strings[46] = str->add(strings[46]);
9220strings[2260] = str->add("/usr/devel/lib/enlightenment/modules/conf_borders");
9221str->del(strings[2259]);
9222strings[2261] = str->add("borders");
9223strings[2262] = str->add("Borders");
9224strings[2250] = str->add(strings[2250]);
9225strings[2263] = str->add("borders_border");
9226strings[2264] = str->add("Border");
9227strings[2250] = str->add(strings[2250]);
9228str->del(strings[46]);
9229strings[2265] = str->add("/usr/devel/lib/enlightenment/modules/conf_clientlist/linux-gnu-x86_64/module.so");
9230strings[2265] = str->add(strings[2265]);
9231strings[45] = str->add(strings[45]);
9232strings[2266] = str->add("/usr/devel/lib/enlightenment/modules/conf_clientlist");
9233str->del(strings[2265]);
9234strings[2267] = str->add("client_list_menu");
9235strings[2268] = str->add("Client List Menu");
9236strings[2269] = str->add("enlightenment/winlist");
9237str->del(strings[45]);
9238str->del(strings[7]);
9239str->del(strings[2257]);
9240strings[7] = str->add(strings[7]);
9241strings[2270] = str->add("images/15");
9242strings[2271] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/15");
9243strings[7] = str->add(strings[7]);
9244strings[2270] = str->add(strings[2270]);
9245strings[2272] = str->add("/usr/devel/lib/enlightenment/modules/conf_colors/linux-gnu-x86_64/module.so");
9246strings[2272] = str->add(strings[2272]);
9247strings[44] = str->add(strings[44]);
9248strings[2273] = str->add("/usr/devel/lib/enlightenment/modules/conf_colors");
9249str->del(strings[2272]);
9250strings[2274] = str->add("colors");
9251strings[215] = str->add(strings[215]);
9252strings[2275] = str->add("enlightenment/colors");
9253str->del(strings[44]);
9254str->del(strings[7]);
9255str->del(strings[2270]);
9256strings[7] = str->add(strings[7]);
9257strings[2276] = str->add("images/16");
9258strings[2277] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/16");
9259strings[7] = str->add(strings[7]);
9260strings[2276] = str->add(strings[2276]);
9261strings[2278] = str->add("/usr/devel/lib/enlightenment/modules/conf_desk/linux-gnu-x86_64/module.so");
9262strings[2278] = str->add(strings[2278]);
9263strings[43] = str->add(strings[43]);
9264strings[2279] = str->add("/usr/devel/lib/enlightenment/modules/conf_desk");
9265str->del(strings[2278]);
9266strings[2280] = str->add("desk");
9267strings[2281] = str->add("Desk");
9268strings[2250] = str->add(strings[2250]);
9269str->del(strings[43]);
9270strings[2282] = str->add("/usr/devel/lib/enlightenment/modules/conf_desklock/linux-gnu-x86_64/module.so");
9271strings[2282] = str->add(strings[2282]);
9272strings[42] = str->add(strings[42]);
9273strings[2283] = str->add("/usr/devel/lib/enlightenment/modules/conf_desklock");
9274str->del(strings[2282]);
9275strings[2284] = str->add("screen");
9276strings[1670] = str->add(strings[1670]);
9277strings[2285] = str->add("enlightenment/screen_setup");
9278strings[2286] = str->add("screen_lock");
9279strings[2287] = str->add("Screen Lock");
9280strings[2288] = str->add("enlightenment/desklock");
9281str->del(strings[42]);
9282strings[2289] = str->add("e,action,mouse,move");
9283strings[2290] = str->add("e");
9284strings[2291] = str->add("mouse,move");
9285strings[1853] = str->add(strings[1853]);
9286strings[2289] = str->add(strings[2289]);
9287strings[2290] = str->add(strings[2290]);
9288strings[2291] = str->add(strings[2291]);
9289strings[1853] = str->add(strings[1853]);
9290strings[2289] = str->add(strings[2289]);
9291strings[2290] = str->add(strings[2290]);
9292strings[2291] = str->add(strings[2291]);
9293strings[1853] = str->add(strings[1853]);
9294strings[2289] = str->add(strings[2289]);
9295strings[2290] = str->add(strings[2290]);
9296strings[2291] = str->add(strings[2291]);
9297strings[1853] = str->add(strings[1853]);
9298strings[2289] = str->add(strings[2289]);
9299strings[2290] = str->add(strings[2290]);
9300strings[2291] = str->add(strings[2291]);
9301strings[1853] = str->add(strings[1853]);
9302strings[2289] = str->add(strings[2289]);
9303strings[2290] = str->add(strings[2290]);
9304strings[2291] = str->add(strings[2291]);
9305strings[1853] = str->add(strings[1853]);
9306strings[2289] = str->add(strings[2289]);
9307strings[2290] = str->add(strings[2290]);
9308strings[2291] = str->add(strings[2291]);
9309strings[1853] = str->add(strings[1853]);
9310str->del(strings[2289]);
9311str->del(strings[2290]);
9312str->del(strings[2291]);
9313str->del(strings[1853]);
9314str->del(strings[2289]);
9315str->del(strings[2290]);
9316str->del(strings[2291]);
9317str->del(strings[1853]);
9318str->del(strings[2289]);
9319str->del(strings[2290]);
9320str->del(strings[2291]);
9321str->del(strings[1853]);
9322str->del(strings[2289]);
9323str->del(strings[2290]);
9324str->del(strings[2291]);
9325str->del(strings[1853]);
9326str->del(strings[2289]);
9327str->del(strings[2290]);
9328str->del(strings[2291]);
9329str->del(strings[1853]);
9330str->del(strings[2289]);
9331str->del(strings[2290]);
9332str->del(strings[2291]);
9333str->del(strings[1853]);
9334str->del(strings[2289]);
9335str->del(strings[2290]);
9336str->del(strings[2291]);
9337str->del(strings[1853]);
9338str->del(strings[7]);
9339str->del(strings[2276]);
9340strings[7] = str->add(strings[7]);
9341strings[2292] = str->add("images/18");
9342strings[2293] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/18");
9343strings[7] = str->add(strings[7]);
9344strings[2292] = str->add(strings[2292]);
9345strings[2294] = str->add("/usr/devel/lib/enlightenment/modules/conf_desks/linux-gnu-x86_64/module.so");
9346strings[2294] = str->add(strings[2294]);
9347strings[41] = str->add(strings[41]);
9348strings[2295] = str->add("/usr/devel/lib/enlightenment/modules/conf_desks");
9349str->del(strings[2294]);
9350strings[2296] = str->add("virtual_desktops");
9351strings[2297] = str->add("Virtual Desktops");
9352strings[2298] = str->add("enlightenment/desktops");
9353str->del(strings[41]);
9354strings[2299] = str->add("e,action,mouse,move");
9355strings[2300] = str->add("e");
9356strings[2301] = str->add("mouse,move");
9357strings[1853] = str->add(strings[1853]);
9358strings[2299] = str->add(strings[2299]);
9359strings[2300] = str->add(strings[2300]);
9360strings[2301] = str->add(strings[2301]);
9361strings[1853] = str->add(strings[1853]);
9362strings[2299] = str->add(strings[2299]);
9363strings[2300] = str->add(strings[2300]);
9364strings[2301] = str->add(strings[2301]);
9365strings[1853] = str->add(strings[1853]);
9366strings[2299] = str->add(strings[2299]);
9367strings[2300] = str->add(strings[2300]);
9368strings[2301] = str->add(strings[2301]);
9369strings[1853] = str->add(strings[1853]);
9370strings[2299] = str->add(strings[2299]);
9371strings[2300] = str->add(strings[2300]);
9372strings[2301] = str->add(strings[2301]);
9373strings[1853] = str->add(strings[1853]);
9374str->del(strings[2299]);
9375str->del(strings[2300]);
9376str->del(strings[2301]);
9377str->del(strings[1853]);
9378str->del(strings[2299]);
9379str->del(strings[2300]);
9380str->del(strings[2301]);
9381str->del(strings[1853]);
9382str->del(strings[2299]);
9383str->del(strings[2300]);
9384str->del(strings[2301]);
9385str->del(strings[1853]);
9386str->del(strings[2299]);
9387str->del(strings[2300]);
9388str->del(strings[2301]);
9389str->del(strings[1853]);
9390str->del(strings[2299]);
9391str->del(strings[2300]);
9392str->del(strings[2301]);
9393str->del(strings[1853]);
9394strings[2302] = str->add("/usr/devel/lib/enlightenment/modules/conf_dialogs/linux-gnu-x86_64/module.so");
9395strings[2302] = str->add(strings[2302]);
9396strings[40] = str->add(strings[40]);
9397strings[2303] = str->add("/usr/devel/lib/enlightenment/modules/conf_dialogs");
9398str->del(strings[2302]);
9399strings[2304] = str->add("dialogs");
9400strings[2305] = str->add("Dialogs");
9401strings[2306] = str->add("enlightenment/configuration");
9402str->del(strings[40]);
9403strings[2307] = str->add("e,action,mouse,move");
9404strings[2308] = str->add("e");
9405strings[2309] = str->add("mouse,move");
9406strings[1853] = str->add(strings[1853]);
9407strings[2307] = str->add(strings[2307]);
9408strings[2308] = str->add(strings[2308]);
9409strings[2309] = str->add(strings[2309]);
9410strings[1853] = str->add(strings[1853]);
9411strings[2307] = str->add(strings[2307]);
9412strings[2308] = str->add(strings[2308]);
9413strings[2309] = str->add(strings[2309]);
9414strings[1853] = str->add(strings[1853]);
9415strings[2307] = str->add(strings[2307]);
9416strings[2308] = str->add(strings[2308]);
9417strings[2309] = str->add(strings[2309]);
9418strings[1853] = str->add(strings[1853]);
9419strings[2307] = str->add(strings[2307]);
9420strings[2308] = str->add(strings[2308]);
9421strings[2309] = str->add(strings[2309]);
9422strings[1853] = str->add(strings[1853]);
9423strings[2307] = str->add(strings[2307]);
9424strings[2308] = str->add(strings[2308]);
9425strings[2309] = str->add(strings[2309]);
9426strings[1853] = str->add(strings[1853]);
9427strings[2307] = str->add(strings[2307]);
9428strings[2308] = str->add(strings[2308]);
9429strings[2309] = str->add(strings[2309]);
9430strings[1853] = str->add(strings[1853]);
9431strings[2307] = str->add(strings[2307]);
9432strings[2308] = str->add(strings[2308]);
9433strings[2309] = str->add(strings[2309]);
9434strings[1853] = str->add(strings[1853]);
9435str->del(strings[2307]);
9436str->del(strings[2308]);
9437str->del(strings[2309]);
9438str->del(strings[1853]);
9439str->del(strings[2307]);
9440str->del(strings[2308]);
9441str->del(strings[2309]);
9442str->del(strings[1853]);
9443str->del(strings[2307]);
9444str->del(strings[2308]);
9445str->del(strings[2309]);
9446str->del(strings[1853]);
9447str->del(strings[2307]);
9448str->del(strings[2308]);
9449str->del(strings[2309]);
9450str->del(strings[1853]);
9451str->del(strings[2307]);
9452str->del(strings[2308]);
9453str->del(strings[2309]);
9454str->del(strings[1853]);
9455str->del(strings[2307]);
9456str->del(strings[2308]);
9457str->del(strings[2309]);
9458str->del(strings[1853]);
9459str->del(strings[2307]);
9460str->del(strings[2308]);
9461str->del(strings[2309]);
9462str->del(strings[1853]);
9463str->del(strings[2307]);
9464str->del(strings[2308]);
9465str->del(strings[2309]);
9466str->del(strings[1853]);
9467str->del(strings[7]);
9468str->del(strings[2292]);
9469strings[7] = str->add(strings[7]);
9470strings[2310] = str->add("images/19");
9471strings[2311] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/19");
9472strings[7] = str->add(strings[7]);
9473strings[2310] = str->add(strings[2310]);
9474strings[2312] = str->add("/usr/devel/lib/enlightenment/modules/conf_display/linux-gnu-x86_64/module.so");
9475strings[2312] = str->add(strings[2312]);
9476strings[39] = str->add(strings[39]);
9477strings[2313] = str->add("/usr/devel/lib/enlightenment/modules/conf_display");
9478str->del(strings[2312]);
9479strings[2314] = str->add("screen_resolution");
9480strings[2315] = str->add("Screen Resolution");
9481strings[2316] = str->add("enlightenment/screen_resolution");
9482str->del(strings[39]);
9483strings[2317] = str->add("e,action,mouse,move");
9484strings[2318] = str->add("e");
9485strings[2319] = str->add("mouse,move");
9486strings[1853] = str->add(strings[1853]);
9487strings[2317] = str->add(strings[2317]);
9488strings[2318] = str->add(strings[2318]);
9489strings[2319] = str->add(strings[2319]);
9490strings[1853] = str->add(strings[1853]);
9491strings[2317] = str->add(strings[2317]);
9492strings[2318] = str->add(strings[2318]);
9493strings[2319] = str->add(strings[2319]);
9494strings[1853] = str->add(strings[1853]);
9495strings[2317] = str->add(strings[2317]);
9496strings[2318] = str->add(strings[2318]);
9497strings[2319] = str->add(strings[2319]);
9498strings[1853] = str->add(strings[1853]);
9499strings[2317] = str->add(strings[2317]);
9500strings[2318] = str->add(strings[2318]);
9501strings[2319] = str->add(strings[2319]);
9502strings[1853] = str->add(strings[1853]);
9503strings[2317] = str->add(strings[2317]);
9504strings[2318] = str->add(strings[2318]);
9505strings[2319] = str->add(strings[2319]);
9506strings[1853] = str->add(strings[1853]);
9507strings[2317] = str->add(strings[2317]);
9508strings[2318] = str->add(strings[2318]);
9509strings[2319] = str->add(strings[2319]);
9510strings[1853] = str->add(strings[1853]);
9511strings[2317] = str->add(strings[2317]);
9512strings[2318] = str->add(strings[2318]);
9513strings[2319] = str->add(strings[2319]);
9514strings[1853] = str->add(strings[1853]);
9515strings[2317] = str->add(strings[2317]);
9516strings[2318] = str->add(strings[2318]);
9517strings[2319] = str->add(strings[2319]);
9518strings[1853] = str->add(strings[1853]);
9519strings[2317] = str->add(strings[2317]);
9520strings[2318] = str->add(strings[2318]);
9521strings[2319] = str->add(strings[2319]);
9522strings[1853] = str->add(strings[1853]);
9523str->del(strings[2317]);
9524str->del(strings[2318]);
9525str->del(strings[2319]);
9526str->del(strings[1853]);
9527str->del(strings[2317]);
9528str->del(strings[2318]);
9529str->del(strings[2319]);
9530str->del(strings[1853]);
9531str->del(strings[2317]);
9532str->del(strings[2318]);
9533str->del(strings[2319]);
9534str->del(strings[1853]);
9535str->del(strings[2317]);
9536str->del(strings[2318]);
9537str->del(strings[2319]);
9538str->del(strings[1853]);
9539str->del(strings[2317]);
9540str->del(strings[2318]);
9541str->del(strings[2319]);
9542str->del(strings[1853]);
9543str->del(strings[2317]);
9544str->del(strings[2318]);
9545str->del(strings[2319]);
9546str->del(strings[1853]);
9547str->del(strings[2317]);
9548str->del(strings[2318]);
9549str->del(strings[2319]);
9550str->del(strings[1853]);
9551str->del(strings[2317]);
9552str->del(strings[2318]);
9553str->del(strings[2319]);
9554str->del(strings[1853]);
9555str->del(strings[2317]);
9556str->del(strings[2318]);
9557str->del(strings[2319]);
9558str->del(strings[1853]);
9559str->del(strings[2317]);
9560str->del(strings[2318]);
9561str->del(strings[2319]);
9562str->del(strings[1853]);
9563str->del(strings[7]);
9564str->del(strings[2310]);
9565strings[7] = str->add(strings[7]);
9566strings[2320] = str->add("images/21");
9567strings[2321] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/21");
9568strings[7] = str->add(strings[7]);
9569strings[2320] = str->add(strings[2320]);
9570strings[2322] = str->add("/usr/devel/lib/enlightenment/modules/conf_dpms/linux-gnu-x86_64/module.so");
9571strings[2322] = str->add(strings[2322]);
9572strings[38] = str->add(strings[38]);
9573strings[2323] = str->add("/usr/devel/lib/enlightenment/modules/conf_dpms");
9574str->del(strings[2322]);
9575strings[2324] = str->add("power_management");
9576strings[2325] = str->add("Power Management");
9577strings[2326] = str->add("enlightenment/power_management");
9578str->del(strings[38]);
9579strings[2327] = str->add("e,action,mouse,move");
9580strings[2328] = str->add("e");
9581strings[2329] = str->add("mouse,move");
9582strings[1853] = str->add(strings[1853]);
9583strings[2327] = str->add(strings[2327]);
9584strings[2328] = str->add(strings[2328]);
9585strings[2329] = str->add(strings[2329]);
9586strings[1853] = str->add(strings[1853]);
9587strings[2327] = str->add(strings[2327]);
9588strings[2328] = str->add(strings[2328]);
9589strings[2329] = str->add(strings[2329]);
9590strings[1853] = str->add(strings[1853]);
9591strings[2327] = str->add(strings[2327]);
9592strings[2328] = str->add(strings[2328]);
9593strings[2329] = str->add(strings[2329]);
9594strings[1853] = str->add(strings[1853]);
9595strings[2327] = str->add(strings[2327]);
9596strings[2328] = str->add(strings[2328]);
9597strings[2329] = str->add(strings[2329]);
9598strings[1853] = str->add(strings[1853]);
9599strings[2327] = str->add(strings[2327]);
9600strings[2328] = str->add(strings[2328]);
9601strings[2329] = str->add(strings[2329]);
9602strings[1853] = str->add(strings[1853]);
9603strings[2327] = str->add(strings[2327]);
9604strings[2328] = str->add(strings[2328]);
9605strings[2329] = str->add(strings[2329]);
9606strings[1853] = str->add(strings[1853]);
9607strings[2327] = str->add(strings[2327]);
9608strings[2328] = str->add(strings[2328]);
9609strings[2329] = str->add(strings[2329]);
9610strings[1853] = str->add(strings[1853]);
9611strings[2327] = str->add(strings[2327]);
9612strings[2328] = str->add(strings[2328]);
9613strings[2329] = str->add(strings[2329]);
9614strings[1853] = str->add(strings[1853]);
9615strings[2327] = str->add(strings[2327]);
9616strings[2328] = str->add(strings[2328]);
9617strings[2329] = str->add(strings[2329]);
9618strings[1853] = str->add(strings[1853]);
9619strings[2327] = str->add(strings[2327]);
9620strings[2328] = str->add(strings[2328]);
9621strings[2329] = str->add(strings[2329]);
9622strings[1853] = str->add(strings[1853]);
9623strings[2327] = str->add(strings[2327]);
9624strings[2328] = str->add(strings[2328]);
9625strings[2329] = str->add(strings[2329]);
9626strings[1853] = str->add(strings[1853]);
9627strings[2327] = str->add(strings[2327]);
9628strings[2328] = str->add(strings[2328]);
9629strings[2329] = str->add(strings[2329]);
9630strings[1853] = str->add(strings[1853]);
9631str->del(strings[2327]);
9632str->del(strings[2328]);
9633str->del(strings[2329]);
9634str->del(strings[1853]);
9635str->del(strings[2327]);
9636str->del(strings[2328]);
9637str->del(strings[2329]);
9638str->del(strings[1853]);
9639str->del(strings[2327]);
9640str->del(strings[2328]);
9641str->del(strings[2329]);
9642str->del(strings[1853]);
9643str->del(strings[2327]);
9644str->del(strings[2328]);
9645str->del(strings[2329]);
9646str->del(strings[1853]);
9647str->del(strings[2327]);
9648str->del(strings[2328]);
9649str->del(strings[2329]);
9650str->del(strings[1853]);
9651str->del(strings[2327]);
9652str->del(strings[2328]);
9653str->del(strings[2329]);
9654str->del(strings[1853]);
9655str->del(strings[2327]);
9656str->del(strings[2328]);
9657str->del(strings[2329]);
9658str->del(strings[1853]);
9659str->del(strings[2327]);
9660str->del(strings[2328]);
9661str->del(strings[2329]);
9662str->del(strings[1853]);
9663str->del(strings[2327]);
9664str->del(strings[2328]);
9665str->del(strings[2329]);
9666str->del(strings[1853]);
9667str->del(strings[2327]);
9668str->del(strings[2328]);
9669str->del(strings[2329]);
9670str->del(strings[1853]);
9671str->del(strings[2327]);
9672str->del(strings[2328]);
9673str->del(strings[2329]);
9674str->del(strings[1853]);
9675str->del(strings[2327]);
9676str->del(strings[2328]);
9677str->del(strings[2329]);
9678str->del(strings[1853]);
9679str->del(strings[2327]);
9680str->del(strings[2328]);
9681str->del(strings[2329]);
9682str->del(strings[1853]);
9683strings[1933] = str->add(strings[1933]);
9684str->del(strings[1933]);
9685str->del(strings[1760]);
9686str->del(strings[1760]);
9687str->del(strings[1760]);
9688str->del(strings[64]);
9689str->del(strings[2127]);
9690strings[1933] = str->add(strings[1933]);
9691str->del(strings[1933]);
9692str->del(strings[1760]);
9693str->del(strings[1760]);
9694str->del(strings[1760]);
9695str->del(strings[64]);
9696str->del(strings[1963]);
9697strings[1933] = str->add(strings[1933]);
9698str->del(strings[1933]);
9699str->del(strings[1761]);
9700str->del(strings[1761]);
9701str->del(strings[1761]);
9702str->del(strings[64]);
9703str->del(strings[1963]);
9704strings[1933] = str->add(strings[1933]);
9705str->del(strings[1933]);
9706str->del(strings[1762]);
9707str->del(strings[1762]);
9708str->del(strings[1762]);
9709str->del(strings[64]);
9710str->del(strings[1963]);
9711strings[1933] = str->add(strings[1933]);
9712str->del(strings[1933]);
9713str->del(strings[1763]);
9714str->del(strings[1763]);
9715str->del(strings[1763]);
9716str->del(strings[64]);
9717str->del(strings[1963]);
9718strings[1933] = str->add(strings[1933]);
9719str->del(strings[1933]);
9720str->del(strings[1764]);
9721str->del(strings[1764]);
9722str->del(strings[1764]);
9723str->del(strings[64]);
9724str->del(strings[1963]);
9725strings[1933] = str->add(strings[1933]);
9726str->del(strings[1933]);
9727str->del(strings[1765]);
9728str->del(strings[1765]);
9729str->del(strings[1765]);
9730str->del(strings[64]);
9731str->del(strings[1963]);
9732strings[1933] = str->add(strings[1933]);
9733str->del(strings[1933]);
9734str->del(strings[1766]);
9735str->del(strings[1766]);
9736str->del(strings[1766]);
9737str->del(strings[64]);
9738str->del(strings[1963]);
9739strings[1933] = str->add(strings[1933]);
9740str->del(strings[1933]);
9741str->del(strings[1767]);
9742str->del(strings[1767]);
9743str->del(strings[1767]);
9744str->del(strings[64]);
9745str->del(strings[1963]);
9746strings[1933] = str->add(strings[1933]);
9747str->del(strings[1933]);
9748str->del(strings[1768]);
9749str->del(strings[1768]);
9750str->del(strings[1768]);
9751str->del(strings[64]);
9752str->del(strings[1963]);
9753strings[1933] = str->add(strings[1933]);
9754str->del(strings[1933]);
9755str->del(strings[1769]);
9756str->del(strings[1769]);
9757str->del(strings[1769]);
9758str->del(strings[64]);
9759str->del(strings[1963]);
9760str->del(strings[64]);
9761str->del(strings[1949]);
9762str->del(strings[64]);
9763str->del(strings[1880]);
9764str->del(strings[64]);
9765str->del(strings[1876]);
9766str->del(strings[1760]);
9767str->del(strings[379]);
9768str->del(strings[64]);
9769str->del(strings[1874]);
9770str->del(strings[64]);
9771str->del(strings[1964]);
9772str->del(strings[64]);
9773str->del(strings[1966]);
9774str->del(strings[64]);
9775str->del(strings[1970]);
9776str->del(strings[1760]);
9777str->del(strings[379]);
9778str->del(strings[64]);
9779str->del(strings[2058]);
9780str->del(strings[64]);
9781str->del(strings[1968]);
9782str->del(strings[64]);
9783str->del(strings[1964]);
9784str->del(strings[64]);
9785str->del(strings[1966]);
9786str->del(strings[64]);
9787str->del(strings[1970]);
9788str->del(strings[1761]);
9789str->del(strings[379]);
9790str->del(strings[64]);
9791str->del(strings[2058]);
9792str->del(strings[64]);
9793str->del(strings[1968]);
9794str->del(strings[64]);
9795str->del(strings[1964]);
9796str->del(strings[64]);
9797str->del(strings[1966]);
9798str->del(strings[64]);
9799str->del(strings[1970]);
9800str->del(strings[1762]);
9801str->del(strings[379]);
9802str->del(strings[64]);
9803str->del(strings[2058]);
9804str->del(strings[64]);
9805str->del(strings[1968]);
9806str->del(strings[64]);
9807str->del(strings[1964]);
9808str->del(strings[64]);
9809str->del(strings[1966]);
9810str->del(strings[64]);
9811str->del(strings[1970]);
9812str->del(strings[1763]);
9813str->del(strings[379]);
9814str->del(strings[64]);
9815str->del(strings[2058]);
9816str->del(strings[64]);
9817str->del(strings[1968]);
9818str->del(strings[64]);
9819str->del(strings[1964]);
9820str->del(strings[64]);
9821str->del(strings[1966]);
9822str->del(strings[64]);
9823str->del(strings[1970]);
9824str->del(strings[1764]);
9825str->del(strings[379]);
9826str->del(strings[64]);
9827str->del(strings[2058]);
9828str->del(strings[64]);
9829str->del(strings[1968]);
9830str->del(strings[64]);
9831str->del(strings[1964]);
9832str->del(strings[64]);
9833str->del(strings[1966]);
9834str->del(strings[64]);
9835str->del(strings[1970]);
9836str->del(strings[1765]);
9837str->del(strings[379]);
9838str->del(strings[64]);
9839str->del(strings[2058]);
9840str->del(strings[64]);
9841str->del(strings[1968]);
9842str->del(strings[64]);
9843str->del(strings[1964]);
9844str->del(strings[64]);
9845str->del(strings[1966]);
9846str->del(strings[64]);
9847str->del(strings[1970]);
9848str->del(strings[1766]);
9849str->del(strings[379]);
9850str->del(strings[64]);
9851str->del(strings[2058]);
9852str->del(strings[64]);
9853str->del(strings[1968]);
9854str->del(strings[64]);
9855str->del(strings[1964]);
9856str->del(strings[64]);
9857str->del(strings[1966]);
9858str->del(strings[64]);
9859str->del(strings[1970]);
9860str->del(strings[1767]);
9861str->del(strings[379]);
9862str->del(strings[64]);
9863str->del(strings[2058]);
9864str->del(strings[64]);
9865str->del(strings[1968]);
9866str->del(strings[64]);
9867str->del(strings[1964]);
9868str->del(strings[64]);
9869str->del(strings[1966]);
9870str->del(strings[64]);
9871str->del(strings[1970]);
9872str->del(strings[1768]);
9873str->del(strings[379]);
9874str->del(strings[64]);
9875str->del(strings[2058]);
9876str->del(strings[64]);
9877str->del(strings[1968]);
9878str->del(strings[64]);
9879str->del(strings[1964]);
9880str->del(strings[64]);
9881str->del(strings[1966]);
9882str->del(strings[64]);
9883str->del(strings[1970]);
9884str->del(strings[1769]);
9885str->del(strings[379]);
9886str->del(strings[64]);
9887str->del(strings[2058]);
9888str->del(strings[64]);
9889str->del(strings[1968]);
9890str->del(strings[361]);
9891str->del(strings[362]);
9892str->del(strings[7]);
9893str->del(strings[2320]);
9894strings[7] = str->add(strings[7]);
9895strings[2330] = str->add("images/22");
9896strings[2331] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/22");
9897strings[7] = str->add(strings[7]);
9898strings[2330] = str->add(strings[2330]);
9899strings[2332] = str->add("e,action,mouse,move");
9900strings[2333] = str->add("e");
9901strings[2334] = str->add("mouse,move");
9902strings[1853] = str->add(strings[1853]);
9903str->del(strings[2332]);
9904str->del(strings[2333]);
9905str->del(strings[2334]);
9906str->del(strings[1853]);
9907strings[2335] = str->add("/usr/devel/lib/enlightenment/modules/conf_exebuf/linux-gnu-x86_64/module.so");
9908strings[2335] = str->add(strings[2335]);
9909strings[37] = str->add(strings[37]);
9910strings[2336] = str->add("/usr/devel/lib/enlightenment/modules/conf_exebuf");
9911str->del(strings[2335]);
9912strings[2337] = str->add("run_command");
9913strings[2338] = str->add("Run Command");
9914strings[2339] = str->add("enlightenment/run");
9915str->del(strings[37]);
9916strings[2340] = str->add("e,action,mouse,move");
9917strings[2341] = str->add("e");
9918strings[2342] = str->add("mouse,move");
9919strings[1853] = str->add(strings[1853]);
9920strings[2340] = str->add(strings[2340]);
9921strings[2341] = str->add(strings[2341]);
9922strings[2342] = str->add(strings[2342]);
9923strings[1853] = str->add(strings[1853]);
9924strings[2340] = str->add(strings[2340]);
9925strings[2341] = str->add(strings[2341]);
9926strings[2342] = str->add(strings[2342]);
9927strings[1853] = str->add(strings[1853]);
9928strings[2340] = str->add(strings[2340]);
9929strings[2341] = str->add(strings[2341]);
9930strings[2342] = str->add(strings[2342]);
9931strings[1853] = str->add(strings[1853]);
9932strings[2340] = str->add(strings[2340]);
9933strings[2341] = str->add(strings[2341]);
9934strings[2342] = str->add(strings[2342]);
9935strings[1853] = str->add(strings[1853]);
9936strings[2340] = str->add(strings[2340]);
9937strings[2341] = str->add(strings[2341]);
9938strings[2342] = str->add(strings[2342]);
9939strings[1853] = str->add(strings[1853]);
9940strings[2340] = str->add(strings[2340]);
9941strings[2341] = str->add(strings[2341]);
9942strings[2342] = str->add(strings[2342]);
9943strings[1853] = str->add(strings[1853]);
9944strings[2340] = str->add(strings[2340]);
9945strings[2341] = str->add(strings[2341]);
9946strings[2342] = str->add(strings[2342]);
9947strings[1853] = str->add(strings[1853]);
9948str->del(strings[2340]);
9949str->del(strings[2341]);
9950str->del(strings[2342]);
9951str->del(strings[1853]);
9952str->del(strings[2340]);
9953str->del(strings[2341]);
9954str->del(strings[2342]);
9955str->del(strings[1853]);
9956str->del(strings[2340]);
9957str->del(strings[2341]);
9958str->del(strings[2342]);
9959str->del(strings[1853]);
9960str->del(strings[2340]);
9961str->del(strings[2341]);
9962str->del(strings[2342]);
9963str->del(strings[1853]);
9964str->del(strings[2340]);
9965str->del(strings[2341]);
9966str->del(strings[2342]);
9967str->del(strings[1853]);
9968str->del(strings[2340]);
9969str->del(strings[2341]);
9970str->del(strings[2342]);
9971str->del(strings[1853]);
9972str->del(strings[2340]);
9973str->del(strings[2341]);
9974str->del(strings[2342]);
9975str->del(strings[1853]);
9976str->del(strings[2340]);
9977str->del(strings[2341]);
9978str->del(strings[2342]);
9979str->del(strings[1853]);
9980str->del(strings[7]);
9981str->del(strings[2330]);
9982strings[7] = str->add(strings[7]);
9983strings[2343] = str->add("images/23");
9984strings[2344] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/23");
9985strings[7] = str->add(strings[7]);
9986strings[2343] = str->add(strings[2343]);
9987strings[2345] = str->add("/usr/devel/lib/enlightenment/modules/conf_fonts/linux-gnu-x86_64/module.so");
9988strings[2345] = str->add(strings[2345]);
9989strings[36] = str->add(strings[36]);
9990strings[2346] = str->add("/usr/devel/lib/enlightenment/modules/conf_fonts");
9991str->del(strings[2345]);
9992strings[2347] = str->add("fonts");
9993strings[2348] = str->add("Fonts");
9994strings[2349] = str->add("enlightenment/fonts");
9995str->del(strings[36]);
9996strings[2350] = str->add("e,action,mouse,move");
9997strings[2351] = str->add("e");
9998strings[2352] = str->add("mouse,move");
9999strings[1853] = str->add(strings[1853]);
10000strings[2350] = str->add(strings[2350]);
10001strings[2351] = str->add(strings[2351]);
10002strings[2352] = str->add(strings[2352]);
10003strings[1853] = str->add(strings[1853]);
10004strings[2350] = str->add(strings[2350]);
10005strings[2351] = str->add(strings[2351]);
10006strings[2352] = str->add(strings[2352]);
10007strings[1853] = str->add(strings[1853]);
10008strings[2350] = str->add(strings[2350]);
10009strings[2351] = str->add(strings[2351]);
10010strings[2352] = str->add(strings[2352]);
10011strings[1853] = str->add(strings[1853]);
10012strings[2350] = str->add(strings[2350]);
10013strings[2351] = str->add(strings[2351]);
10014strings[2352] = str->add(strings[2352]);
10015strings[1853] = str->add(strings[1853]);
10016strings[2350] = str->add(strings[2350]);
10017strings[2351] = str->add(strings[2351]);
10018strings[2352] = str->add(strings[2352]);
10019strings[1853] = str->add(strings[1853]);
10020str->del(strings[2350]);
10021str->del(strings[2351]);
10022str->del(strings[2352]);
10023str->del(strings[1853]);
10024str->del(strings[2350]);
10025str->del(strings[2351]);
10026str->del(strings[2352]);
10027str->del(strings[1853]);
10028str->del(strings[2350]);
10029str->del(strings[2351]);
10030str->del(strings[2352]);
10031str->del(strings[1853]);
10032str->del(strings[2350]);
10033str->del(strings[2351]);
10034str->del(strings[2352]);
10035str->del(strings[1853]);
10036str->del(strings[2350]);
10037str->del(strings[2351]);
10038str->del(strings[2352]);
10039str->del(strings[1853]);
10040str->del(strings[2350]);
10041str->del(strings[2351]);
10042str->del(strings[2352]);
10043str->del(strings[1853]);
10044str->del(strings[7]);
10045str->del(strings[2343]);
10046strings[7] = str->add(strings[7]);
10047strings[2353] = str->add("images/24");
10048strings[2354] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/24");
10049strings[7] = str->add(strings[7]);
10050strings[2353] = str->add(strings[2353]);
10051strings[2355] = str->add("/usr/devel/lib/enlightenment/modules/conf_icon_theme/linux-gnu-x86_64/module.so");
10052strings[2355] = str->add(strings[2355]);
10053strings[35] = str->add(strings[35]);
10054strings[2356] = str->add("/usr/devel/lib/enlightenment/modules/conf_icon_theme");
10055str->del(strings[2355]);
10056strings[2357] = str->add("icon_theme");
10057strings[2358] = str->add("Icon Theme");
10058strings[2359] = str->add("enlightenment/icon_theme");
10059str->del(strings[35]);
10060strings[2360] = str->add("e,action,mouse,move");
10061strings[2361] = str->add("e");
10062strings[2362] = str->add("mouse,move");
10063strings[1853] = str->add(strings[1853]);
10064strings[2360] = str->add(strings[2360]);
10065strings[2361] = str->add(strings[2361]);
10066strings[2362] = str->add(strings[2362]);
10067strings[1853] = str->add(strings[1853]);
10068strings[2360] = str->add(strings[2360]);
10069strings[2361] = str->add(strings[2361]);
10070strings[2362] = str->add(strings[2362]);
10071strings[1853] = str->add(strings[1853]);
10072strings[2360] = str->add(strings[2360]);
10073strings[2361] = str->add(strings[2361]);
10074strings[2362] = str->add(strings[2362]);
10075strings[1853] = str->add(strings[1853]);
10076strings[2360] = str->add(strings[2360]);
10077strings[2361] = str->add(strings[2361]);
10078strings[2362] = str->add(strings[2362]);
10079strings[1853] = str->add(strings[1853]);
10080strings[2360] = str->add(strings[2360]);
10081strings[2361] = str->add(strings[2361]);
10082strings[2362] = str->add(strings[2362]);
10083strings[1853] = str->add(strings[1853]);
10084str->del(strings[2360]);
10085str->del(strings[2361]);
10086str->del(strings[2362]);
10087str->del(strings[1853]);
10088str->del(strings[2360]);
10089str->del(strings[2361]);
10090str->del(strings[2362]);
10091str->del(strings[1853]);
10092str->del(strings[2360]);
10093str->del(strings[2361]);
10094str->del(strings[2362]);
10095str->del(strings[1853]);
10096str->del(strings[2360]);
10097str->del(strings[2361]);
10098str->del(strings[2362]);
10099str->del(strings[1853]);
10100str->del(strings[2360]);
10101str->del(strings[2361]);
10102str->del(strings[2362]);
10103str->del(strings[1853]);
10104str->del(strings[2360]);
10105str->del(strings[2361]);
10106str->del(strings[2362]);
10107str->del(strings[1853]);
10108str->del(strings[7]);
10109str->del(strings[2353]);
10110strings[7] = str->add(strings[7]);
10111strings[2363] = str->add("images/25");
10112strings[2364] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/25");
10113strings[7] = str->add(strings[7]);
10114strings[2363] = str->add(strings[2363]);
10115strings[2365] = str->add("/usr/devel/lib/enlightenment/modules/conf_imc/linux-gnu-x86_64/module.so");
10116strings[2365] = str->add(strings[2365]);
10117strings[34] = str->add(strings[34]);
10118strings[2366] = str->add("/usr/devel/lib/enlightenment/modules/conf_imc");
10119str->del(strings[2365]);
10120strings[2367] = str->add("language");
10121strings[2368] = str->add("Language");
10122strings[2369] = str->add("enlightenment/intl");
10123strings[2370] = str->add("input_method_settings");
10124strings[2371] = str->add("Input Method Settings");
10125strings[2372] = str->add("enlightenment/imc");
10126str->del(strings[34]);
10127strings[2373] = str->add("e,action,mouse,move");
10128strings[2374] = str->add("e");
10129strings[2375] = str->add("mouse,move");
10130strings[1853] = str->add(strings[1853]);
10131strings[2373] = str->add(strings[2373]);
10132strings[2374] = str->add(strings[2374]);
10133strings[2375] = str->add(strings[2375]);
10134strings[1853] = str->add(strings[1853]);
10135strings[2373] = str->add(strings[2373]);
10136strings[2374] = str->add(strings[2374]);
10137strings[2375] = str->add(strings[2375]);
10138strings[1853] = str->add(strings[1853]);
10139strings[2373] = str->add(strings[2373]);
10140strings[2374] = str->add(strings[2374]);
10141strings[2375] = str->add(strings[2375]);
10142strings[1853] = str->add(strings[1853]);
10143strings[2373] = str->add(strings[2373]);
10144strings[2374] = str->add(strings[2374]);
10145strings[2375] = str->add(strings[2375]);
10146strings[1853] = str->add(strings[1853]);
10147str->del(strings[2373]);
10148str->del(strings[2374]);
10149str->del(strings[2375]);
10150str->del(strings[1853]);
10151str->del(strings[2373]);
10152str->del(strings[2374]);
10153str->del(strings[2375]);
10154str->del(strings[1853]);
10155str->del(strings[2373]);
10156str->del(strings[2374]);
10157str->del(strings[2375]);
10158str->del(strings[1853]);
10159str->del(strings[2373]);
10160str->del(strings[2374]);
10161str->del(strings[2375]);
10162str->del(strings[1853]);
10163str->del(strings[2373]);
10164str->del(strings[2374]);
10165str->del(strings[2375]);
10166str->del(strings[1853]);
10167strings[2376] = str->add("/usr/devel/lib/enlightenment/modules/conf_intl/linux-gnu-x86_64/module.so");
10168strings[2376] = str->add(strings[2376]);
10169strings[33] = str->add(strings[33]);
10170strings[2377] = str->add("/usr/devel/lib/enlightenment/modules/conf_intl");
10171str->del(strings[2376]);
10172strings[2378] = str->add("language_settings");
10173strings[2379] = str->add("Language Settings");
10174strings[2369] = str->add(strings[2369]);
10175str->del(strings[33]);
10176strings[2380] = str->add("e,action,mouse,move");
10177strings[2381] = str->add("e");
10178strings[2382] = str->add("mouse,move");
10179strings[1853] = str->add(strings[1853]);
10180strings[2380] = str->add(strings[2380]);
10181strings[2381] = str->add(strings[2381]);
10182strings[2382] = str->add(strings[2382]);
10183strings[1853] = str->add(strings[1853]);
10184strings[2380] = str->add(strings[2380]);
10185strings[2381] = str->add(strings[2381]);
10186strings[2382] = str->add(strings[2382]);
10187strings[1853] = str->add(strings[1853]);
10188strings[2380] = str->add(strings[2380]);
10189strings[2381] = str->add(strings[2381]);
10190strings[2382] = str->add(strings[2382]);
10191strings[1853] = str->add(strings[1853]);
10192strings[2380] = str->add(strings[2380]);
10193strings[2381] = str->add(strings[2381]);
10194strings[2382] = str->add(strings[2382]);
10195strings[1853] = str->add(strings[1853]);
10196str->del(strings[2380]);
10197str->del(strings[2381]);
10198str->del(strings[2382]);
10199str->del(strings[1853]);
10200str->del(strings[2380]);
10201str->del(strings[2381]);
10202str->del(strings[2382]);
10203str->del(strings[1853]);
10204str->del(strings[2380]);
10205str->del(strings[2381]);
10206str->del(strings[2382]);
10207str->del(strings[1853]);
10208str->del(strings[2380]);
10209str->del(strings[2381]);
10210str->del(strings[2382]);
10211str->del(strings[1853]);
10212str->del(strings[2380]);
10213str->del(strings[2381]);
10214str->del(strings[2382]);
10215str->del(strings[1853]);
10216str->del(strings[7]);
10217str->del(strings[2363]);
10218strings[7] = str->add(strings[7]);
10219strings[2383] = str->add("images/26");
10220strings[2384] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/26");
10221strings[7] = str->add(strings[7]);
10222strings[2383] = str->add(strings[2383]);
10223strings[2385] = str->add("/usr/devel/lib/enlightenment/modules/conf_keybindings/linux-gnu-x86_64/module.so");
10224strings[2385] = str->add(strings[2385]);
10225strings[32] = str->add(strings[32]);
10226strings[2386] = str->add("/usr/devel/lib/enlightenment/modules/conf_keybindings");
10227str->del(strings[2385]);
10228strings[2387] = str->add("keyboard_and_mouse");
10229strings[2388] = str->add("Keyboard & Mouse");
10230strings[2389] = str->add("enlightenment/behavior");
10231strings[2390] = str->add("key_bindings");
10232strings[2391] = str->add("Key Bindings");
10233strings[2392] = str->add("enlightenment/keys");
10234str->del(strings[32]);
10235strings[2393] = str->add("e,action,mouse,move");
10236strings[2394] = str->add("e");
10237strings[2395] = str->add("mouse,move");
10238strings[1853] = str->add(strings[1853]);
10239strings[2393] = str->add(strings[2393]);
10240strings[2394] = str->add(strings[2394]);
10241strings[2395] = str->add(strings[2395]);
10242strings[1853] = str->add(strings[1853]);
10243strings[2393] = str->add(strings[2393]);
10244strings[2394] = str->add(strings[2394]);
10245strings[2395] = str->add(strings[2395]);
10246strings[1853] = str->add(strings[1853]);
10247strings[2393] = str->add(strings[2393]);
10248strings[2394] = str->add(strings[2394]);
10249strings[2395] = str->add(strings[2395]);
10250strings[1853] = str->add(strings[1853]);
10251str->del(strings[2393]);
10252str->del(strings[2394]);
10253str->del(strings[2395]);
10254str->del(strings[1853]);
10255str->del(strings[2393]);
10256str->del(strings[2394]);
10257str->del(strings[2395]);
10258str->del(strings[1853]);
10259str->del(strings[2393]);
10260str->del(strings[2394]);
10261str->del(strings[2395]);
10262str->del(strings[1853]);
10263str->del(strings[2393]);
10264str->del(strings[2394]);
10265str->del(strings[2395]);
10266str->del(strings[1853]);
10267strings[2396] = str->add("/usr/devel/lib/enlightenment/modules/conf_menus/linux-gnu-x86_64/module.so");
10268strings[2396] = str->add(strings[2396]);
10269strings[31] = str->add(strings[31]);
10270strings[2397] = str->add("/usr/devel/lib/enlightenment/modules/conf_menus");
10271str->del(strings[2396]);
10272strings[2398] = str->add("menu_settings");
10273strings[2399] = str->add("Menu Settings");
10274strings[2400] = str->add("enlightenment/menu_settings");
10275str->del(strings[31]);
10276strings[2401] = str->add("e,action,mouse,move");
10277strings[2402] = str->add("e");
10278strings[2403] = str->add("mouse,move");
10279strings[1853] = str->add(strings[1853]);
10280strings[2401] = str->add(strings[2401]);
10281strings[2402] = str->add(strings[2402]);
10282strings[2403] = str->add(strings[2403]);
10283strings[1853] = str->add(strings[1853]);
10284strings[2401] = str->add(strings[2401]);
10285strings[2402] = str->add(strings[2402]);
10286strings[2403] = str->add(strings[2403]);
10287strings[1853] = str->add(strings[1853]);
10288strings[2401] = str->add(strings[2401]);
10289strings[2402] = str->add(strings[2402]);
10290strings[2403] = str->add(strings[2403]);
10291strings[1853] = str->add(strings[1853]);
10292strings[2401] = str->add(strings[2401]);
10293strings[2402] = str->add(strings[2402]);
10294strings[2403] = str->add(strings[2403]);
10295strings[1853] = str->add(strings[1853]);
10296strings[2401] = str->add(strings[2401]);
10297strings[2402] = str->add(strings[2402]);
10298strings[2403] = str->add(strings[2403]);
10299strings[1853] = str->add(strings[1853]);
10300strings[2401] = str->add(strings[2401]);
10301strings[2402] = str->add(strings[2402]);
10302strings[2403] = str->add(strings[2403]);
10303strings[1853] = str->add(strings[1853]);
10304strings[2401] = str->add(strings[2401]);
10305strings[2402] = str->add(strings[2402]);
10306strings[2403] = str->add(strings[2403]);
10307strings[1853] = str->add(strings[1853]);
10308str->del(strings[2401]);
10309str->del(strings[2402]);
10310str->del(strings[2403]);
10311str->del(strings[1853]);
10312str->del(strings[2401]);
10313str->del(strings[2402]);
10314str->del(strings[2403]);
10315str->del(strings[1853]);
10316str->del(strings[2401]);
10317str->del(strings[2402]);
10318str->del(strings[2403]);
10319str->del(strings[1853]);
10320str->del(strings[2401]);
10321str->del(strings[2402]);
10322str->del(strings[2403]);
10323str->del(strings[1853]);
10324str->del(strings[2401]);
10325str->del(strings[2402]);
10326str->del(strings[2403]);
10327str->del(strings[1853]);
10328str->del(strings[2401]);
10329str->del(strings[2402]);
10330str->del(strings[2403]);
10331str->del(strings[1853]);
10332str->del(strings[2401]);
10333str->del(strings[2402]);
10334str->del(strings[2403]);
10335str->del(strings[1853]);
10336str->del(strings[2401]);
10337str->del(strings[2402]);
10338str->del(strings[2403]);
10339str->del(strings[1853]);
10340str->del(strings[7]);
10341str->del(strings[2383]);
10342strings[7] = str->add(strings[7]);
10343strings[2404] = str->add("images/27");
10344strings[2405] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/27");
10345strings[7] = str->add(strings[7]);
10346strings[2404] = str->add(strings[2404]);
10347strings[2406] = str->add("/usr/devel/lib/enlightenment/modules/conf_mime/linux-gnu-x86_64/module.so");
10348strings[2406] = str->add(strings[2406]);
10349strings[30] = str->add(strings[30]);
10350strings[2407] = str->add("/usr/devel/lib/enlightenment/modules/conf_mime");
10351str->del(strings[2406]);
10352strings[12] = str->add(strings[12]);
10353strings[2408] = str->add("File Manager");
10354strings[2409] = str->add("enlightenment/fileman");
10355strings[2410] = str->add("file_icons");
10356strings[2411] = str->add("File Icons");
10357strings[2412] = str->add("enlightenment/file_icons");
10358str->del(strings[30]);
10359strings[2413] = str->add("e,action,mouse,move");
10360strings[2414] = str->add("e");
10361strings[2415] = str->add("mouse,move");
10362strings[1853] = str->add(strings[1853]);
10363strings[2413] = str->add(strings[2413]);
10364strings[2414] = str->add(strings[2414]);
10365strings[2415] = str->add(strings[2415]);
10366strings[1853] = str->add(strings[1853]);
10367strings[2413] = str->add(strings[2413]);
10368strings[2414] = str->add(strings[2414]);
10369strings[2415] = str->add(strings[2415]);
10370strings[1853] = str->add(strings[1853]);
10371strings[2413] = str->add(strings[2413]);
10372strings[2414] = str->add(strings[2414]);
10373strings[2415] = str->add(strings[2415]);
10374strings[1853] = str->add(strings[1853]);
10375strings[2413] = str->add(strings[2413]);
10376strings[2414] = str->add(strings[2414]);
10377strings[2415] = str->add(strings[2415]);
10378strings[1853] = str->add(strings[1853]);
10379strings[2413] = str->add(strings[2413]);
10380strings[2414] = str->add(strings[2414]);
10381strings[2415] = str->add(strings[2415]);
10382strings[1853] = str->add(strings[1853]);
10383str->del(strings[2413]);
10384str->del(strings[2414]);
10385str->del(strings[2415]);
10386str->del(strings[1853]);
10387str->del(strings[2413]);
10388str->del(strings[2414]);
10389str->del(strings[2415]);
10390str->del(strings[1853]);
10391str->del(strings[2413]);
10392str->del(strings[2414]);
10393str->del(strings[2415]);
10394str->del(strings[1853]);
10395str->del(strings[2413]);
10396str->del(strings[2414]);
10397str->del(strings[2415]);
10398str->del(strings[1853]);
10399str->del(strings[2413]);
10400str->del(strings[2414]);
10401str->del(strings[2415]);
10402str->del(strings[1853]);
10403str->del(strings[2413]);
10404str->del(strings[2414]);
10405str->del(strings[2415]);
10406str->del(strings[1853]);
10407str->del(strings[7]);
10408str->del(strings[2404]);
10409strings[7] = str->add(strings[7]);
10410strings[2416] = str->add("images/28");
10411strings[2417] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/28");
10412strings[7] = str->add(strings[7]);
10413strings[2416] = str->add(strings[2416]);
10414strings[2418] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse/linux-gnu-x86_64/module.so");
10415strings[2418] = str->add(strings[2418]);
10416strings[29] = str->add(strings[29]);
10417strings[2419] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse");
10418str->del(strings[2418]);
10419strings[2420] = str->add("mouse_acceleration");
10420strings[2421] = str->add("Mouse Acceleration");
10421strings[2422] = str->add("enlightenment/mouse_clean");
10422str->del(strings[29]);
10423strings[2423] = str->add("e,action,mouse,move");
10424strings[2424] = str->add("e");
10425strings[2425] = str->add("mouse,move");
10426strings[1853] = str->add(strings[1853]);
10427strings[2423] = str->add(strings[2423]);
10428strings[2424] = str->add(strings[2424]);
10429strings[2425] = str->add(strings[2425]);
10430strings[1853] = str->add(strings[1853]);
10431strings[2423] = str->add(strings[2423]);
10432strings[2424] = str->add(strings[2424]);
10433strings[2425] = str->add(strings[2425]);
10434strings[1853] = str->add(strings[1853]);
10435strings[2423] = str->add(strings[2423]);
10436strings[2424] = str->add(strings[2424]);
10437strings[2425] = str->add(strings[2425]);
10438strings[1853] = str->add(strings[1853]);
10439strings[2423] = str->add(strings[2423]);
10440strings[2424] = str->add(strings[2424]);
10441strings[2425] = str->add(strings[2425]);
10442strings[1853] = str->add(strings[1853]);
10443strings[2423] = str->add(strings[2423]);
10444strings[2424] = str->add(strings[2424]);
10445strings[2425] = str->add(strings[2425]);
10446strings[1853] = str->add(strings[1853]);
10447strings[2423] = str->add(strings[2423]);
10448strings[2424] = str->add(strings[2424]);
10449strings[2425] = str->add(strings[2425]);
10450strings[1853] = str->add(strings[1853]);
10451strings[2423] = str->add(strings[2423]);
10452strings[2424] = str->add(strings[2424]);
10453strings[2425] = str->add(strings[2425]);
10454strings[1853] = str->add(strings[1853]);
10455str->del(strings[2423]);
10456str->del(strings[2424]);
10457str->del(strings[2425]);
10458str->del(strings[1853]);
10459str->del(strings[2423]);
10460str->del(strings[2424]);
10461str->del(strings[2425]);
10462str->del(strings[1853]);
10463str->del(strings[2423]);
10464str->del(strings[2424]);
10465str->del(strings[2425]);
10466str->del(strings[1853]);
10467str->del(strings[2423]);
10468str->del(strings[2424]);
10469str->del(strings[2425]);
10470str->del(strings[1853]);
10471str->del(strings[2423]);
10472str->del(strings[2424]);
10473str->del(strings[2425]);
10474str->del(strings[1853]);
10475str->del(strings[2423]);
10476str->del(strings[2424]);
10477str->del(strings[2425]);
10478str->del(strings[1853]);
10479str->del(strings[2423]);
10480str->del(strings[2424]);
10481str->del(strings[2425]);
10482str->del(strings[1853]);
10483str->del(strings[2423]);
10484str->del(strings[2424]);
10485str->del(strings[2425]);
10486str->del(strings[1853]);
10487str->del(strings[7]);
10488str->del(strings[2416]);
10489strings[7] = str->add(strings[7]);
10490strings[2426] = str->add("images/29");
10491strings[2427] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/29");
10492strings[7] = str->add(strings[7]);
10493strings[2426] = str->add(strings[2426]);
10494strings[2428] = str->add("/usr/devel/lib/enlightenment/modules/conf_mousebindings/linux-gnu-x86_64/module.so");
10495strings[2428] = str->add(strings[2428]);
10496strings[28] = str->add(strings[28]);
10497strings[2429] = str->add("/usr/devel/lib/enlightenment/modules/conf_mousebindings");
10498str->del(strings[2428]);
10499strings[2430] = str->add("mouse_bindings");
10500strings[2431] = str->add("Mouse Bindings");
10501strings[2422] = str->add(strings[2422]);
10502str->del(strings[28]);
10503strings[2432] = str->add("e,action,mouse,move");
10504strings[2433] = str->add("e");
10505strings[2434] = str->add("mouse,move");
10506strings[1853] = str->add(strings[1853]);
10507strings[2432] = str->add(strings[2432]);
10508strings[2433] = str->add(strings[2433]);
10509strings[2434] = str->add(strings[2434]);
10510strings[1853] = str->add(strings[1853]);
10511strings[2432] = str->add(strings[2432]);
10512strings[2433] = str->add(strings[2433]);
10513strings[2434] = str->add(strings[2434]);
10514strings[1853] = str->add(strings[1853]);
10515strings[2432] = str->add(strings[2432]);
10516strings[2433] = str->add(strings[2433]);
10517strings[2434] = str->add(strings[2434]);
10518strings[1853] = str->add(strings[1853]);
10519strings[2432] = str->add(strings[2432]);
10520strings[2433] = str->add(strings[2433]);
10521strings[2434] = str->add(strings[2434]);
10522strings[1853] = str->add(strings[1853]);
10523strings[2432] = str->add(strings[2432]);
10524strings[2433] = str->add(strings[2433]);
10525strings[2434] = str->add(strings[2434]);
10526strings[1853] = str->add(strings[1853]);
10527strings[2432] = str->add(strings[2432]);
10528strings[2433] = str->add(strings[2433]);
10529strings[2434] = str->add(strings[2434]);
10530strings[1853] = str->add(strings[1853]);
10531str->del(strings[2432]);
10532str->del(strings[2433]);
10533str->del(strings[2434]);
10534str->del(strings[1853]);
10535str->del(strings[2432]);
10536str->del(strings[2433]);
10537str->del(strings[2434]);
10538str->del(strings[1853]);
10539str->del(strings[2432]);
10540str->del(strings[2433]);
10541str->del(strings[2434]);
10542str->del(strings[1853]);
10543str->del(strings[2432]);
10544str->del(strings[2433]);
10545str->del(strings[2434]);
10546str->del(strings[1853]);
10547str->del(strings[2432]);
10548str->del(strings[2433]);
10549str->del(strings[2434]);
10550str->del(strings[1853]);
10551str->del(strings[2432]);
10552str->del(strings[2433]);
10553str->del(strings[2434]);
10554str->del(strings[1853]);
10555str->del(strings[2432]);
10556str->del(strings[2433]);
10557str->del(strings[2434]);
10558str->del(strings[1853]);
10559str->del(strings[7]);
10560str->del(strings[2426]);
10561strings[7] = str->add(strings[7]);
10562strings[2435] = str->add("images/30");
10563strings[2436] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/30");
10564strings[7] = str->add(strings[7]);
10565strings[2435] = str->add(strings[2435]);
10566strings[2437] = str->add("e,action,mouse,move");
10567strings[2438] = str->add("e");
10568strings[2439] = str->add("mouse,move");
10569strings[1853] = str->add(strings[1853]);
10570str->del(strings[2437]);
10571str->del(strings[2438]);
10572str->del(strings[2439]);
10573str->del(strings[1853]);
10574strings[2440] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse_cursor/linux-gnu-x86_64/module.so");
10575strings[2440] = str->add(strings[2440]);
10576strings[27] = str->add(strings[27]);
10577strings[2441] = str->add("/usr/devel/lib/enlightenment/modules/conf_mouse_cursor");
10578str->del(strings[2440]);
10579strings[2442] = str->add("mouse_cursor");
10580strings[2443] = str->add("Mouse Cursor");
10581strings[2444] = str->add("enlightenment/mouse");
10582str->del(strings[27]);
10583strings[2445] = str->add("e,action,mouse,move");
10584strings[2446] = str->add("e");
10585strings[2447] = str->add("mouse,move");
10586strings[1853] = str->add(strings[1853]);
10587strings[2445] = str->add(strings[2445]);
10588strings[2446] = str->add(strings[2446]);
10589strings[2447] = str->add(strings[2447]);
10590strings[1853] = str->add(strings[1853]);
10591strings[2445] = str->add(strings[2445]);
10592strings[2446] = str->add(strings[2446]);
10593strings[2447] = str->add(strings[2447]);
10594strings[1853] = str->add(strings[1853]);
10595strings[2445] = str->add(strings[2445]);
10596strings[2446] = str->add(strings[2446]);
10597strings[2447] = str->add(strings[2447]);
10598strings[1853] = str->add(strings[1853]);
10599str->del(strings[2445]);
10600str->del(strings[2446]);
10601str->del(strings[2447]);
10602str->del(strings[1853]);
10603str->del(strings[2445]);
10604str->del(strings[2446]);
10605str->del(strings[2447]);
10606str->del(strings[1853]);
10607str->del(strings[2445]);
10608str->del(strings[2446]);
10609str->del(strings[2447]);
10610str->del(strings[1853]);
10611str->del(strings[2445]);
10612str->del(strings[2446]);
10613str->del(strings[2447]);
10614str->del(strings[1853]);
10615str->del(strings[7]);
10616str->del(strings[2435]);
10617strings[7] = str->add(strings[7]);
10618strings[2448] = str->add("images/31");
10619strings[2449] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/31");
10620strings[7] = str->add(strings[7]);
10621strings[2448] = str->add(strings[2448]);
10622strings[2450] = str->add("/usr/devel/lib/enlightenment/modules/conf_paths/linux-gnu-x86_64/module.so");
10623strings[2450] = str->add(strings[2450]);
10624strings[26] = str->add(strings[26]);
10625strings[2451] = str->add("/usr/devel/lib/enlightenment/modules/conf_paths");
10626str->del(strings[2450]);
10627strings[2452] = str->add("search_directories");
10628strings[2453] = str->add("Search Directories");
10629strings[2454] = str->add("enlightenment/directories");
10630str->del(strings[26]);
10631strings[2455] = str->add("e,action,mouse,move");
10632strings[2456] = str->add("e");
10633strings[2457] = str->add("mouse,move");
10634strings[1853] = str->add(strings[1853]);
10635strings[2455] = str->add(strings[2455]);
10636strings[2456] = str->add(strings[2456]);
10637strings[2457] = str->add(strings[2457]);
10638strings[1853] = str->add(strings[1853]);
10639strings[2455] = str->add(strings[2455]);
10640strings[2456] = str->add(strings[2456]);
10641strings[2457] = str->add(strings[2457]);
10642strings[1853] = str->add(strings[1853]);
10643strings[2455] = str->add(strings[2455]);
10644strings[2456] = str->add(strings[2456]);
10645strings[2457] = str->add(strings[2457]);
10646strings[1853] = str->add(strings[1853]);
10647strings[2455] = str->add(strings[2455]);
10648strings[2456] = str->add(strings[2456]);
10649strings[2457] = str->add(strings[2457]);
10650strings[1853] = str->add(strings[1853]);
10651strings[2455] = str->add(strings[2455]);
10652strings[2456] = str->add(strings[2456]);
10653strings[2457] = str->add(strings[2457]);
10654strings[1853] = str->add(strings[1853]);
10655strings[2455] = str->add(strings[2455]);
10656strings[2456] = str->add(strings[2456]);
10657strings[2457] = str->add(strings[2457]);
10658strings[1853] = str->add(strings[1853]);
10659str->del(strings[2455]);
10660str->del(strings[2456]);
10661str->del(strings[2457]);
10662str->del(strings[1853]);
10663str->del(strings[2455]);
10664str->del(strings[2456]);
10665str->del(strings[2457]);
10666str->del(strings[1853]);
10667str->del(strings[2455]);
10668str->del(strings[2456]);
10669str->del(strings[2457]);
10670str->del(strings[1853]);
10671str->del(strings[2455]);
10672str->del(strings[2456]);
10673str->del(strings[2457]);
10674str->del(strings[1853]);
10675str->del(strings[2455]);
10676str->del(strings[2456]);
10677str->del(strings[2457]);
10678str->del(strings[1853]);
10679str->del(strings[2455]);
10680str->del(strings[2456]);
10681str->del(strings[2457]);
10682str->del(strings[1853]);
10683str->del(strings[2455]);
10684str->del(strings[2456]);
10685str->del(strings[2457]);
10686str->del(strings[1853]);
10687strings[2458] = str->add("/usr/devel/lib/enlightenment/modules/conf_performance/linux-gnu-x86_64/module.so");
10688strings[2458] = str->add(strings[2458]);
10689strings[25] = str->add(strings[25]);
10690strings[2459] = str->add("/usr/devel/lib/enlightenment/modules/conf_performance");
10691str->del(strings[2458]);
10692strings[2460] = str->add("performance");
10693strings[2461] = str->add("Performance");
10694strings[2462] = str->add("enlightenment/performance");
10695str->del(strings[25]);
10696strings[2463] = str->add("e,action,mouse,move");
10697strings[2464] = str->add("e");
10698strings[2465] = str->add("mouse,move");
10699strings[1853] = str->add(strings[1853]);
10700strings[2463] = str->add(strings[2463]);
10701strings[2464] = str->add(strings[2464]);
10702strings[2465] = str->add(strings[2465]);
10703strings[1853] = str->add(strings[1853]);
10704strings[2463] = str->add(strings[2463]);
10705strings[2464] = str->add(strings[2464]);
10706strings[2465] = str->add(strings[2465]);
10707strings[1853] = str->add(strings[1853]);
10708strings[2463] = str->add(strings[2463]);
10709strings[2464] = str->add(strings[2464]);
10710strings[2465] = str->add(strings[2465]);
10711strings[1853] = str->add(strings[1853]);
10712strings[2463] = str->add(strings[2463]);
10713strings[2464] = str->add(strings[2464]);
10714strings[2465] = str->add(strings[2465]);
10715strings[1853] = str->add(strings[1853]);
10716str->del(strings[2463]);
10717str->del(strings[2464]);
10718str->del(strings[2465]);
10719str->del(strings[1853]);
10720str->del(strings[2463]);
10721str->del(strings[2464]);
10722str->del(strings[2465]);
10723str->del(strings[1853]);
10724str->del(strings[2463]);
10725str->del(strings[2464]);
10726str->del(strings[2465]);
10727str->del(strings[1853]);
10728str->del(strings[2463]);
10729str->del(strings[2464]);
10730str->del(strings[2465]);
10731str->del(strings[1853]);
10732str->del(strings[2463]);
10733str->del(strings[2464]);
10734str->del(strings[2465]);
10735str->del(strings[1853]);
10736str->del(strings[7]);
10737str->del(strings[2448]);
10738strings[7] = str->add(strings[7]);
10739strings[2466] = str->add("images/32");
10740strings[2467] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/32");
10741strings[7] = str->add(strings[7]);
10742strings[2466] = str->add(strings[2466]);
10743strings[2468] = str->add("e,action,mouse,move");
10744strings[2469] = str->add("e");
10745strings[2470] = str->add("mouse,move");
10746strings[1853] = str->add(strings[1853]);
10747str->del(strings[2468]);
10748str->del(strings[2469]);
10749str->del(strings[2470]);
10750str->del(strings[1853]);
10751strings[2471] = str->add("/usr/devel/lib/enlightenment/modules/conf_profiles/linux-gnu-x86_64/module.so");
10752strings[2471] = str->add(strings[2471]);
10753strings[24] = str->add(strings[24]);
10754strings[2472] = str->add("/usr/devel/lib/enlightenment/modules/conf_profiles");
10755str->del(strings[2471]);
10756strings[2473] = str->add("profiles");
10757strings[2474] = str->add("Profiles");
10758strings[2475] = str->add("enlightenment/profiles");
10759str->del(strings[24]);
10760strings[2476] = str->add("e,action,mouse,move");
10761strings[2477] = str->add("e");
10762strings[2478] = str->add("mouse,move");
10763strings[1853] = str->add(strings[1853]);
10764strings[2476] = str->add(strings[2476]);
10765strings[2477] = str->add(strings[2477]);
10766strings[2478] = str->add(strings[2478]);
10767strings[1853] = str->add(strings[1853]);
10768strings[2476] = str->add(strings[2476]);
10769strings[2477] = str->add(strings[2477]);
10770strings[1740] = str->add(strings[1740]);
10771strings[1853] = str->add(strings[1853]);
10772strings[1737] = str->add(strings[1737]);
10773strings[1856] = str->add(strings[1856]);
10774strings[2476] = str->add(strings[2476]);
10775strings[2477] = str->add(strings[2477]);
10776strings[1740] = str->add(strings[1740]);
10777strings[1856] = str->add(strings[1856]);
10778strings[1737] = str->add(strings[1737]);
10779strings[1862] = str->add(strings[1862]);
10780strings[2476] = str->add(strings[2476]);
10781strings[2477] = str->add(strings[2477]);
10782strings[2478] = str->add(strings[2478]);
10783strings[1862] = str->add(strings[1862]);
10784strings[2476] = str->add(strings[2476]);
10785strings[2477] = str->add(strings[2477]);
10786strings[2478] = str->add(strings[2478]);
10787strings[1862] = str->add(strings[1862]);
10788str->del(strings[2476]);
10789str->del(strings[2477]);
10790str->del(strings[2478]);
10791str->del(strings[1853]);
10792str->del(strings[2476]);
10793str->del(strings[2477]);
10794str->del(strings[2478]);
10795str->del(strings[1853]);
10796str->del(strings[2476]);
10797str->del(strings[2477]);
10798str->del(strings[1740]);
10799str->del(strings[1853]);
10800str->del(strings[1737]);
10801str->del(strings[1856]);
10802str->del(strings[2476]);
10803str->del(strings[2477]);
10804str->del(strings[1740]);
10805str->del(strings[1856]);
10806str->del(strings[1737]);
10807str->del(strings[1862]);
10808str->del(strings[2476]);
10809str->del(strings[2477]);
10810str->del(strings[2478]);
10811str->del(strings[1862]);
10812str->del(strings[2476]);
10813str->del(strings[2477]);
10814str->del(strings[2478]);
10815str->del(strings[1862]);
10816str->del(strings[7]);
10817str->del(strings[2466]);
10818strings[7] = str->add(strings[7]);
10819strings[2479] = str->add("images/33");
10820strings[2480] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/33");
10821strings[7] = str->add(strings[7]);
10822strings[2479] = str->add(strings[2479]);
10823strings[2481] = str->add("/usr/devel/lib/enlightenment/modules/conf_screensaver/linux-gnu-x86_64/module.so");
10824strings[2481] = str->add(strings[2481]);
10825strings[23] = str->add(strings[23]);
10826strings[2482] = str->add("/usr/devel/lib/enlightenment/modules/conf_screensaver");
10827str->del(strings[2481]);
10828strings[2483] = str->add("screen_saver");
10829strings[2484] = str->add("Screen Saver");
10830strings[2485] = str->add("enlightenment/screensaver");
10831str->del(strings[23]);
10832strings[2486] = str->add("e,action,mouse,move");
10833strings[2487] = str->add("e");
10834strings[2488] = str->add("mouse,move");
10835strings[1862] = str->add(strings[1862]);
10836strings[2486] = str->add(strings[2486]);
10837strings[2487] = str->add(strings[2487]);
10838strings[2488] = str->add(strings[2488]);
10839strings[1862] = str->add(strings[1862]);
10840strings[2486] = str->add(strings[2486]);
10841strings[2487] = str->add(strings[2487]);
10842strings[2488] = str->add(strings[2488]);
10843strings[1862] = str->add(strings[1862]);
10844strings[2486] = str->add(strings[2486]);
10845strings[2487] = str->add(strings[2487]);
10846strings[2488] = str->add(strings[2488]);
10847strings[1862] = str->add(strings[1862]);
10848strings[2486] = str->add(strings[2486]);
10849strings[2487] = str->add(strings[2487]);
10850strings[2488] = str->add(strings[2488]);
10851strings[1862] = str->add(strings[1862]);
10852strings[2486] = str->add(strings[2486]);
10853strings[2487] = str->add(strings[2487]);
10854strings[2488] = str->add(strings[2488]);
10855strings[1862] = str->add(strings[1862]);
10856strings[2486] = str->add(strings[2486]);
10857strings[2487] = str->add(strings[2487]);
10858strings[2488] = str->add(strings[2488]);
10859strings[1862] = str->add(strings[1862]);
10860str->del(strings[2486]);
10861str->del(strings[2487]);
10862str->del(strings[2488]);
10863str->del(strings[1862]);
10864str->del(strings[2486]);
10865str->del(strings[2487]);
10866str->del(strings[2488]);
10867str->del(strings[1862]);
10868str->del(strings[2486]);
10869str->del(strings[2487]);
10870str->del(strings[2488]);
10871str->del(strings[1862]);
10872str->del(strings[2486]);
10873str->del(strings[2487]);
10874str->del(strings[2488]);
10875str->del(strings[1862]);
10876str->del(strings[2486]);
10877str->del(strings[2487]);
10878str->del(strings[2488]);
10879str->del(strings[1862]);
10880str->del(strings[2486]);
10881str->del(strings[2487]);
10882str->del(strings[2488]);
10883str->del(strings[1862]);
10884str->del(strings[2486]);
10885str->del(strings[2487]);
10886str->del(strings[2488]);
10887str->del(strings[1862]);
10888str->del(strings[7]);
10889str->del(strings[2479]);
10890strings[7] = str->add(strings[7]);
10891strings[2489] = str->add("images/34");
10892strings[2490] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/34");
10893strings[7] = str->add(strings[7]);
10894strings[2489] = str->add(strings[2489]);
10895strings[2491] = str->add("/usr/devel/lib/enlightenment/modules/conf_shelves/linux-gnu-x86_64/module.so");
10896strings[2491] = str->add(strings[2491]);
10897strings[22] = str->add(strings[22]);
10898strings[2492] = str->add("/usr/devel/lib/enlightenment/modules/conf_shelves");
10899str->del(strings[2491]);
10900strings[2493] = str->add("shelves");
10901strings[2494] = str->add("Shelves");
10902strings[2495] = str->add("enlightenment/shelf");
10903str->del(strings[22]);
10904strings[2496] = str->add("e,action,mouse,move");
10905strings[2497] = str->add("e");
10906strings[2498] = str->add("mouse,move");
10907strings[1862] = str->add(strings[1862]);
10908strings[2496] = str->add(strings[2496]);
10909strings[2497] = str->add(strings[2497]);
10910strings[2498] = str->add(strings[2498]);
10911strings[1862] = str->add(strings[1862]);
10912strings[2496] = str->add(strings[2496]);
10913strings[2497] = str->add(strings[2497]);
10914strings[2498] = str->add(strings[2498]);
10915strings[1862] = str->add(strings[1862]);
10916strings[2496] = str->add(strings[2496]);
10917strings[2497] = str->add(strings[2497]);
10918strings[1740] = str->add(strings[1740]);
10919strings[1862] = str->add(strings[1862]);
10920strings[1737] = str->add(strings[1737]);
10921strings[1856] = str->add(strings[1856]);
10922strings[2496] = str->add(strings[2496]);
10923strings[2497] = str->add(strings[2497]);
10924strings[2498] = str->add(strings[2498]);
10925strings[1856] = str->add(strings[1856]);
10926strings[2496] = str->add(strings[2496]);
10927strings[2497] = str->add(strings[2497]);
10928strings[2498] = str->add(strings[2498]);
10929strings[1856] = str->add(strings[1856]);
10930str->del(strings[2496]);
10931str->del(strings[2497]);
10932str->del(strings[2498]);
10933str->del(strings[1862]);
10934str->del(strings[2496]);
10935str->del(strings[2497]);
10936str->del(strings[2498]);
10937str->del(strings[1862]);
10938str->del(strings[2496]);
10939str->del(strings[2497]);
10940str->del(strings[2498]);
10941str->del(strings[1862]);
10942str->del(strings[2496]);
10943str->del(strings[2497]);
10944str->del(strings[1740]);
10945str->del(strings[1862]);
10946str->del(strings[1737]);
10947str->del(strings[1856]);
10948str->del(strings[2496]);
10949str->del(strings[2497]);
10950str->del(strings[2498]);
10951str->del(strings[1856]);
10952str->del(strings[2496]);
10953str->del(strings[2497]);
10954str->del(strings[2498]);
10955str->del(strings[1856]);
10956strings[2499] = str->add("/usr/devel/lib/enlightenment/modules/conf_startup/linux-gnu-x86_64/module.so");
10957strings[2499] = str->add(strings[2499]);
10958strings[21] = str->add(strings[21]);
10959strings[2500] = str->add("/usr/devel/lib/enlightenment/modules/conf_startup");
10960str->del(strings[2499]);
10961strings[2501] = str->add("startup");
10962strings[2502] = str->add("Startup");
10963strings[2503] = str->add("enlightenment/startup");
10964str->del(strings[21]);
10965strings[2504] = str->add("e,action,mouse,move");
10966strings[2505] = str->add("e");
10967strings[2506] = str->add("mouse,move");
10968strings[1856] = str->add(strings[1856]);
10969strings[2504] = str->add(strings[2504]);
10970strings[2505] = str->add(strings[2505]);
10971strings[2506] = str->add(strings[2506]);
10972strings[1856] = str->add(strings[1856]);
10973strings[2504] = str->add(strings[2504]);
10974strings[2505] = str->add(strings[2505]);
10975strings[2506] = str->add(strings[2506]);
10976strings[1856] = str->add(strings[1856]);
10977strings[2504] = str->add(strings[2504]);
10978strings[2505] = str->add(strings[2505]);
10979strings[1740] = str->add(strings[1740]);
10980strings[1856] = str->add(strings[1856]);
10981strings[1737] = str->add(strings[1737]);
10982strings[1853] = str->add(strings[1853]);
10983strings[2504] = str->add(strings[2504]);
10984strings[2505] = str->add(strings[2505]);
10985strings[2506] = str->add(strings[2506]);
10986strings[1853] = str->add(strings[1853]);
10987strings[2504] = str->add(strings[2504]);
10988strings[2505] = str->add(strings[2505]);
10989strings[2506] = str->add(strings[2506]);
10990strings[1853] = str->add(strings[1853]);
10991strings[1740] = str->add(strings[1740]);
10992strings[1853] = str->add(strings[1853]);
10993strings[2504] = str->add(strings[2504]);
10994strings[2505] = str->add(strings[2505]);
10995strings[2504] = str->add(strings[2504]);
10996strings[2505] = str->add(strings[2505]);
10997strings[2507] = str->add("e,state,focused");
10998strings[2505] = str->add(strings[2505]);
10999strings[2504] = str->add(strings[2504]);
11000strings[2505] = str->add(strings[2505]);
11001str->del(strings[2504]);
11002str->del(strings[2505]);
11003str->del(strings[2506]);
11004str->del(strings[1856]);
11005str->del(strings[2504]);
11006str->del(strings[2505]);
11007str->del(strings[2506]);
11008str->del(strings[1856]);
11009str->del(strings[2504]);
11010str->del(strings[2505]);
11011str->del(strings[2506]);
11012str->del(strings[1856]);
11013str->del(strings[2504]);
11014str->del(strings[2505]);
11015str->del(strings[1740]);
11016str->del(strings[1856]);
11017str->del(strings[1737]);
11018str->del(strings[1853]);
11019str->del(strings[2504]);
11020str->del(strings[2505]);
11021str->del(strings[2506]);
11022str->del(strings[1853]);
11023str->del(strings[2504]);
11024str->del(strings[2505]);
11025str->del(strings[2506]);
11026str->del(strings[1853]);
11027str->del(strings[1740]);
11028str->del(strings[1853]);
11029str->del(strings[2504]);
11030str->del(strings[2505]);
11031str->del(strings[2504]);
11032str->del(strings[2505]);
11033str->del(strings[2507]);
11034str->del(strings[2505]);
11035str->del(strings[2504]);
11036str->del(strings[2505]);
11037str->del(strings[7]);
11038str->del(strings[2489]);
11039strings[7] = str->add(strings[7]);
11040strings[2508] = str->add("images/35");
11041strings[2509] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/35");
11042strings[7] = str->add(strings[7]);
11043strings[2508] = str->add(strings[2508]);
11044strings[2510] = str->add("e,action,mouse,move");
11045strings[2511] = str->add("e");
11046str->del(strings[2510]);
11047str->del(strings[2511]);
11048strings[2512] = str->add("/usr/devel/lib/enlightenment/modules/conf_theme/linux-gnu-x86_64/module.so");
11049strings[2512] = str->add(strings[2512]);
11050strings[20] = str->add(strings[20]);
11051strings[2513] = str->add("/usr/devel/lib/enlightenment/modules/conf_theme");
11052str->del(strings[2512]);
11053strings[63] = str->add(strings[63]);
11054strings[2514] = str->add("Theme");
11055strings[376] = str->add(strings[376]);
11056str->del(strings[20]);
11057strings[2515] = str->add("e,action,mouse,move");
11058strings[2516] = str->add("e");
11059strings[1737] = str->add(strings[1737]);
11060strings[377] = str->add(strings[377]);
11061strings[1737] = str->add(strings[1737]);
11062strings[1946] = str->add(strings[1946]);
11063strings[1737] = str->add(strings[1737]);
11064strings[1946] = str->add(strings[1946]);
11065strings[2515] = str->add(strings[2515]);
11066strings[2516] = str->add(strings[2516]);
11067strings[2517] = str->add("mouse,move");
11068strings[377] = str->add(strings[377]);
11069strings[2517] = str->add(strings[2517]);
11070strings[1946] = str->add(strings[1946]);
11071strings[2517] = str->add(strings[2517]);
11072strings[1946] = str->add(strings[1946]);
11073strings[2515] = str->add(strings[2515]);
11074strings[2516] = str->add(strings[2516]);
11075strings[2517] = str->add(strings[2517]);
11076strings[377] = str->add(strings[377]);
11077strings[2517] = str->add(strings[2517]);
11078strings[1946] = str->add(strings[1946]);
11079strings[2517] = str->add(strings[2517]);
11080strings[1946] = str->add(strings[1946]);
11081strings[2515] = str->add(strings[2515]);
11082strings[2516] = str->add(strings[2516]);
11083strings[2517] = str->add(strings[2517]);
11084strings[377] = str->add(strings[377]);
11085strings[2517] = str->add(strings[2517]);
11086strings[1946] = str->add(strings[1946]);
11087strings[2517] = str->add(strings[2517]);
11088strings[1946] = str->add(strings[1946]);
11089str->del(strings[2515]);
11090str->del(strings[2516]);
11091str->del(strings[1737]);
11092str->del(strings[377]);
11093str->del(strings[1737]);
11094str->del(strings[1946]);
11095str->del(strings[1737]);
11096str->del(strings[1946]);
11097str->del(strings[2515]);
11098str->del(strings[2516]);
11099str->del(strings[2517]);
11100str->del(strings[377]);
11101str->del(strings[2517]);
11102str->del(strings[1946]);
11103str->del(strings[2517]);
11104str->del(strings[1946]);
11105str->del(strings[2515]);
11106str->del(strings[2516]);
11107str->del(strings[2517]);
11108str->del(strings[377]);
11109str->del(strings[2517]);
11110str->del(strings[1946]);
11111str->del(strings[2517]);
11112str->del(strings[1946]);
11113str->del(strings[2515]);
11114str->del(strings[2516]);
11115str->del(strings[2517]);
11116str->del(strings[377]);
11117str->del(strings[2517]);
11118str->del(strings[1946]);
11119str->del(strings[2517]);
11120str->del(strings[1946]);
11121str->del(strings[7]);
11122str->del(strings[2508]);
11123strings[7] = str->add(strings[7]);
11124strings[2518] = str->add("images/36");
11125strings[2519] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/36");
11126strings[7] = str->add(strings[7]);
11127strings[2518] = str->add(strings[2518]);
11128strings[2520] = str->add("e,action,mouse,move");
11129strings[2521] = str->add("e");
11130strings[2522] = str->add("mouse,move");
11131strings[377] = str->add(strings[377]);
11132strings[2522] = str->add(strings[2522]);
11133strings[1946] = str->add(strings[1946]);
11134strings[2522] = str->add(strings[2522]);
11135strings[1946] = str->add(strings[1946]);
11136str->del(strings[2520]);
11137str->del(strings[2521]);
11138str->del(strings[2522]);
11139str->del(strings[377]);
11140str->del(strings[2522]);
11141str->del(strings[1946]);
11142str->del(strings[2522]);
11143str->del(strings[1946]);
11144strings[2523] = str->add("/usr/devel/lib/enlightenment/modules/conf_transitions/linux-gnu-x86_64/module.so");
11145strings[2523] = str->add(strings[2523]);
11146strings[19] = str->add(strings[19]);
11147strings[2524] = str->add("/usr/devel/lib/enlightenment/modules/conf_transitions");
11148str->del(strings[2523]);
11149strings[2525] = str->add("transitions");
11150strings[2526] = str->add("Transitions");
11151strings[2527] = str->add("enlightenment/transitions");
11152str->del(strings[19]);
11153strings[2528] = str->add("e,action,mouse,move");
11154strings[2529] = str->add("e");
11155strings[2530] = str->add("mouse,move");
11156strings[377] = str->add(strings[377]);
11157strings[2530] = str->add(strings[2530]);
11158strings[1946] = str->add(strings[1946]);
11159strings[2530] = str->add(strings[2530]);
11160strings[1946] = str->add(strings[1946]);
11161strings[2528] = str->add(strings[2528]);
11162strings[2529] = str->add(strings[2529]);
11163strings[2530] = str->add(strings[2530]);
11164strings[377] = str->add(strings[377]);
11165strings[2530] = str->add(strings[2530]);
11166strings[1946] = str->add(strings[1946]);
11167strings[2530] = str->add(strings[2530]);
11168strings[1946] = str->add(strings[1946]);
11169strings[2528] = str->add(strings[2528]);
11170strings[2529] = str->add(strings[2529]);
11171strings[2530] = str->add(strings[2530]);
11172strings[377] = str->add(strings[377]);
11173strings[2530] = str->add(strings[2530]);
11174strings[1946] = str->add(strings[1946]);
11175strings[2530] = str->add(strings[2530]);
11176strings[1946] = str->add(strings[1946]);
11177strings[2528] = str->add(strings[2528]);
11178strings[2529] = str->add(strings[2529]);
11179strings[2530] = str->add(strings[2530]);
11180strings[377] = str->add(strings[377]);
11181strings[2530] = str->add(strings[2530]);
11182strings[1946] = str->add(strings[1946]);
11183strings[2530] = str->add(strings[2530]);
11184strings[1946] = str->add(strings[1946]);
11185strings[2528] = str->add(strings[2528]);
11186strings[2529] = str->add(strings[2529]);
11187strings[2530] = str->add(strings[2530]);
11188strings[377] = str->add(strings[377]);
11189strings[2530] = str->add(strings[2530]);
11190strings[1946] = str->add(strings[1946]);
11191strings[2530] = str->add(strings[2530]);
11192strings[1946] = str->add(strings[1946]);
11193str->del(strings[2528]);
11194str->del(strings[2529]);
11195str->del(strings[2530]);
11196str->del(strings[377]);
11197str->del(strings[2530]);
11198str->del(strings[1946]);
11199str->del(strings[2530]);
11200str->del(strings[1946]);
11201str->del(strings[2528]);
11202str->del(strings[2529]);
11203str->del(strings[2530]);
11204str->del(strings[377]);
11205str->del(strings[2530]);
11206str->del(strings[1946]);
11207str->del(strings[2530]);
11208str->del(strings[1946]);
11209str->del(strings[2528]);
11210str->del(strings[2529]);
11211str->del(strings[2530]);
11212str->del(strings[377]);
11213str->del(strings[2530]);
11214str->del(strings[1946]);
11215str->del(strings[2530]);
11216str->del(strings[1946]);
11217str->del(strings[2528]);
11218str->del(strings[2529]);
11219str->del(strings[2530]);
11220str->del(strings[377]);
11221str->del(strings[2530]);
11222str->del(strings[1946]);
11223str->del(strings[2530]);
11224str->del(strings[1946]);
11225str->del(strings[2528]);
11226str->del(strings[2529]);
11227str->del(strings[2530]);
11228str->del(strings[377]);
11229str->del(strings[2530]);
11230str->del(strings[1946]);
11231str->del(strings[2530]);
11232str->del(strings[1946]);
11233str->del(strings[7]);
11234str->del(strings[2518]);
11235strings[7] = str->add(strings[7]);
11236strings[2531] = str->add("images/37");
11237strings[2532] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/37");
11238strings[7] = str->add(strings[7]);
11239strings[2531] = str->add(strings[2531]);
11240strings[2533] = str->add("/usr/devel/lib/enlightenment/modules/conf_wallpaper/linux-gnu-x86_64/module.so");
11241strings[2533] = str->add(strings[2533]);
11242strings[18] = str->add(strings[18]);
11243strings[2534] = str->add("/usr/devel/lib/enlightenment/modules/conf_wallpaper");
11244str->del(strings[2533]);
11245strings[2535] = str->add("wallpaper");
11246strings[2536] = str->add("Wallpaper");
11247strings[1750] = str->add(strings[1750]);
11248strings[2537] = str->add("wallpaper_desk");
11249strings[2536] = str->add(strings[2536]);
11250strings[2250] = str->add(strings[2250]);
11251strings[1749] = str->add(strings[1749]);
11252strings[1750] = str->add(strings[1750]);
11253str->del(strings[18]);
11254strings[2538] = str->add("e,action,mouse,move");
11255strings[2539] = str->add("e");
11256strings[2540] = str->add("mouse,move");
11257strings[377] = str->add(strings[377]);
11258strings[2540] = str->add(strings[2540]);
11259strings[1946] = str->add(strings[1946]);
11260strings[2540] = str->add(strings[2540]);
11261strings[1946] = str->add(strings[1946]);
11262strings[2538] = str->add(strings[2538]);
11263strings[2539] = str->add(strings[2539]);
11264strings[2540] = str->add(strings[2540]);
11265strings[377] = str->add(strings[377]);
11266strings[2540] = str->add(strings[2540]);
11267strings[1946] = str->add(strings[1946]);
11268strings[2540] = str->add(strings[2540]);
11269strings[1946] = str->add(strings[1946]);
11270strings[2538] = str->add(strings[2538]);
11271strings[2539] = str->add(strings[2539]);
11272strings[2540] = str->add(strings[2540]);
11273strings[377] = str->add(strings[377]);
11274strings[2540] = str->add(strings[2540]);
11275strings[1946] = str->add(strings[1946]);
11276strings[2540] = str->add(strings[2540]);
11277strings[1946] = str->add(strings[1946]);
11278strings[2538] = str->add(strings[2538]);
11279strings[2539] = str->add(strings[2539]);
11280strings[2540] = str->add(strings[2540]);
11281strings[377] = str->add(strings[377]);
11282strings[2540] = str->add(strings[2540]);
11283strings[1946] = str->add(strings[1946]);
11284strings[2540] = str->add(strings[2540]);
11285strings[1946] = str->add(strings[1946]);
11286strings[2538] = str->add(strings[2538]);
11287strings[2539] = str->add(strings[2539]);
11288strings[2540] = str->add(strings[2540]);
11289strings[377] = str->add(strings[377]);
11290strings[2540] = str->add(strings[2540]);
11291strings[1946] = str->add(strings[1946]);
11292strings[2540] = str->add(strings[2540]);
11293strings[1946] = str->add(strings[1946]);
11294strings[2538] = str->add(strings[2538]);
11295strings[2539] = str->add(strings[2539]);
11296strings[2540] = str->add(strings[2540]);
11297strings[377] = str->add(strings[377]);
11298strings[2540] = str->add(strings[2540]);
11299strings[1946] = str->add(strings[1946]);
11300strings[2540] = str->add(strings[2540]);
11301strings[1946] = str->add(strings[1946]);
11302strings[2538] = str->add(strings[2538]);
11303strings[2539] = str->add(strings[2539]);
11304strings[2540] = str->add(strings[2540]);
11305strings[377] = str->add(strings[377]);
11306strings[2540] = str->add(strings[2540]);
11307strings[1946] = str->add(strings[1946]);
11308strings[2540] = str->add(strings[2540]);
11309strings[1946] = str->add(strings[1946]);
11310strings[2538] = str->add(strings[2538]);
11311strings[2539] = str->add(strings[2539]);
11312strings[2540] = str->add(strings[2540]);
11313strings[377] = str->add(strings[377]);
11314strings[2540] = str->add(strings[2540]);
11315strings[1946] = str->add(strings[1946]);
11316strings[2540] = str->add(strings[2540]);
11317strings[1946] = str->add(strings[1946]);
11318strings[2538] = str->add(strings[2538]);
11319strings[2539] = str->add(strings[2539]);
11320strings[2540] = str->add(strings[2540]);
11321strings[377] = str->add(strings[377]);
11322strings[2540] = str->add(strings[2540]);
11323strings[1946] = str->add(strings[1946]);
11324strings[2540] = str->add(strings[2540]);
11325strings[1946] = str->add(strings[1946]);
11326str->del(strings[2538]);
11327str->del(strings[2539]);
11328str->del(strings[2540]);
11329str->del(strings[377]);
11330str->del(strings[2540]);
11331str->del(strings[1946]);
11332str->del(strings[2540]);
11333str->del(strings[1946]);
11334str->del(strings[2538]);
11335str->del(strings[2539]);
11336str->del(strings[2540]);
11337str->del(strings[377]);
11338str->del(strings[2540]);
11339str->del(strings[1946]);
11340str->del(strings[2540]);
11341str->del(strings[1946]);
11342str->del(strings[2538]);
11343str->del(strings[2539]);
11344str->del(strings[2540]);
11345str->del(strings[377]);
11346str->del(strings[2540]);
11347str->del(strings[1946]);
11348str->del(strings[2540]);
11349str->del(strings[1946]);
11350str->del(strings[2538]);
11351str->del(strings[2539]);
11352str->del(strings[2540]);
11353str->del(strings[377]);
11354str->del(strings[2540]);
11355str->del(strings[1946]);
11356str->del(strings[2540]);
11357str->del(strings[1946]);
11358str->del(strings[2538]);
11359str->del(strings[2539]);
11360str->del(strings[2540]);
11361str->del(strings[377]);
11362str->del(strings[2540]);
11363str->del(strings[1946]);
11364str->del(strings[2540]);
11365str->del(strings[1946]);
11366str->del(strings[2538]);
11367str->del(strings[2539]);
11368str->del(strings[2540]);
11369str->del(strings[377]);
11370str->del(strings[2540]);
11371str->del(strings[1946]);
11372str->del(strings[2540]);
11373str->del(strings[1946]);
11374str->del(strings[2538]);
11375str->del(strings[2539]);
11376str->del(strings[2540]);
11377str->del(strings[377]);
11378str->del(strings[2540]);
11379str->del(strings[1946]);
11380str->del(strings[2540]);
11381str->del(strings[1946]);
11382str->del(strings[2538]);
11383str->del(strings[2539]);
11384str->del(strings[2540]);
11385str->del(strings[377]);
11386str->del(strings[2540]);
11387str->del(strings[1946]);
11388str->del(strings[2540]);
11389str->del(strings[1946]);
11390str->del(strings[2538]);
11391str->del(strings[2539]);
11392str->del(strings[2540]);
11393str->del(strings[377]);
11394str->del(strings[2540]);
11395str->del(strings[1946]);
11396str->del(strings[2540]);
11397str->del(strings[1946]);
11398strings[2541] = str->add("e,action,mouse,move");
11399strings[2542] = str->add("e");
11400strings[2543] = str->add("mouse,move");
11401strings[377] = str->add(strings[377]);
11402strings[2543] = str->add(strings[2543]);
11403strings[1946] = str->add(strings[1946]);
11404strings[2543] = str->add(strings[2543]);
11405strings[1946] = str->add(strings[1946]);
11406str->del(strings[2541]);
11407str->del(strings[2542]);
11408str->del(strings[2543]);
11409str->del(strings[377]);
11410str->del(strings[2543]);
11411str->del(strings[1946]);
11412str->del(strings[2543]);
11413str->del(strings[1946]);
11414str->del(strings[7]);
11415str->del(strings[2531]);
11416strings[7] = str->add(strings[7]);
11417strings[2544] = str->add("images/38");
11418strings[2545] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/38");
11419strings[7] = str->add(strings[7]);
11420strings[2544] = str->add(strings[2544]);
11421strings[2546] = str->add("e,action,mouse,move");
11422strings[2547] = str->add("e");
11423strings[2548] = str->add("mouse,move");
11424strings[377] = str->add(strings[377]);
11425strings[2548] = str->add(strings[2548]);
11426strings[1946] = str->add(strings[1946]);
11427strings[2548] = str->add(strings[2548]);
11428strings[1946] = str->add(strings[1946]);
11429str->del(strings[2546]);
11430str->del(strings[2547]);
11431str->del(strings[2548]);
11432str->del(strings[377]);
11433str->del(strings[2548]);
11434str->del(strings[1946]);
11435str->del(strings[2548]);
11436str->del(strings[1946]);
11437strings[2549] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_display/linux-gnu-x86_64/module.so");
11438strings[2549] = str->add(strings[2549]);
11439strings[17] = str->add(strings[17]);
11440strings[2550] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_display");
11441str->del(strings[2549]);
11442strings[2551] = str->add("windows");
11443strings[2552] = str->add("Windows");
11444strings[2250] = str->add(strings[2250]);
11445strings[2553] = str->add("window_display");
11446strings[2554] = str->add("Window Display");
11447strings[2250] = str->add(strings[2250]);
11448str->del(strings[17]);
11449strings[2555] = str->add("e,action,mouse,move");
11450strings[2556] = str->add("e");
11451strings[2557] = str->add("mouse,move");
11452strings[377] = str->add(strings[377]);
11453strings[2557] = str->add(strings[2557]);
11454strings[1946] = str->add(strings[1946]);
11455strings[2557] = str->add(strings[2557]);
11456strings[1946] = str->add(strings[1946]);
11457strings[2555] = str->add(strings[2555]);
11458strings[2556] = str->add(strings[2556]);
11459strings[2557] = str->add(strings[2557]);
11460strings[377] = str->add(strings[377]);
11461strings[2557] = str->add(strings[2557]);
11462strings[1946] = str->add(strings[1946]);
11463strings[2557] = str->add(strings[2557]);
11464strings[1946] = str->add(strings[1946]);
11465str->del(strings[2555]);
11466str->del(strings[2556]);
11467str->del(strings[2557]);
11468str->del(strings[377]);
11469str->del(strings[2557]);
11470str->del(strings[1946]);
11471str->del(strings[2557]);
11472str->del(strings[1946]);
11473str->del(strings[2555]);
11474str->del(strings[2556]);
11475str->del(strings[2557]);
11476str->del(strings[377]);
11477str->del(strings[2557]);
11478str->del(strings[1946]);
11479str->del(strings[2557]);
11480str->del(strings[1946]);
11481strings[2558] = str->add("e,action,mouse,move");
11482strings[2559] = str->add("e");
11483strings[2560] = str->add("mouse,move");
11484strings[377] = str->add(strings[377]);
11485strings[2560] = str->add(strings[2560]);
11486strings[1946] = str->add(strings[1946]);
11487strings[2560] = str->add(strings[2560]);
11488strings[1946] = str->add(strings[1946]);
11489str->del(strings[2558]);
11490str->del(strings[2559]);
11491str->del(strings[2560]);
11492str->del(strings[377]);
11493str->del(strings[2560]);
11494str->del(strings[1946]);
11495str->del(strings[2560]);
11496str->del(strings[1946]);
11497str->del(strings[7]);
11498str->del(strings[2544]);
11499strings[7] = str->add(strings[7]);
11500strings[2561] = str->add("images/39");
11501strings[2562] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/39");
11502strings[7] = str->add(strings[7]);
11503strings[2561] = str->add(strings[2561]);
11504strings[2563] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_focus/linux-gnu-x86_64/module.so");
11505strings[2563] = str->add(strings[2563]);
11506strings[16] = str->add(strings[16]);
11507strings[2564] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_focus");
11508str->del(strings[2563]);
11509strings[2565] = str->add("window_focus");
11510strings[2566] = str->add("Window Focus");
11511strings[2567] = str->add("enlightenment/focus");
11512str->del(strings[16]);
11513strings[2568] = str->add("e,action,mouse,move");
11514strings[2569] = str->add("e");
11515strings[2570] = str->add("e,action,mouse,down");
11516strings[2569] = str->add(strings[2569]);
11517strings[167] = str->add(strings[167]);
11518strings[377] = str->add(strings[377]);
11519strings[2571] = str->add("Main");
11520strings[66] = str->add(strings[66]);
11521strings[2572] = str->add("Favorite Applications");
11522strings[2573] = str->add("base/theme/icons");
11523strings[1839] = str->add(strings[1839]);
11524strings[2574] = str->add("e/widgets/border/default/border");
11525strings[2575] = str->add("e/widgets/border/shaped/border");
11526strings[2576] = str->add("e/widgets/border/noresize/border");
11527strings[2577] = str->add("e/widgets/border/dialog/border");
11528strings[2578] = str->add("e/widgets/border/noresize_dialog/border");
11529strings[2579] = str->add("e/widgets/border/pixel/border");
11530strings[2580] = str->add("e/pointer/enlightenment/default/color");
11531strings[1754] = str->add(strings[1754]);
11532strings[2581] = str->add("e/widgets/menu/default/background");
11533strings[2582] = str->add("e/widgets/menu/default/separator");
11534strings[2583] = str->add("e/widgets/menu/default/item_bg");
11535strings[2584] = str->add("e/widgets/menu/default/icon");
11536strings[2585] = str->add("e/widgets/menu/default/label");
11537strings[2586] = str->add("e/widgets/menu/default/submenu");
11538strings[2587] = str->add("e/widgets/menu/default/check");
11539strings[2588] = str->add("e/widgets/menu/default/radio");
11540strings[1945] = str->add(strings[1945]);
11541strings[2061] = str->add(strings[2061]);
11542strings[1960] = str->add(strings[1960]);
11543strings[2589] = str->add("e/shelf/invisible/base");
11544strings[2590] = str->add("e/shelf/invisible/inset");
11545strings[2591] = str->add("e/shelf/invisible/plain");
11546strings[2592] = str->add("e/shelf/alternate/base");
11547strings[2593] = str->add("e/shelf/alternate/inset");
11548strings[2594] = str->add("e/shelf/alternate/plain");
11549strings[1957] = str->add(strings[1957]);
11550strings[2127] = str->add(strings[2127]);
11551strings[1963] = str->add(strings[1963]);
11552strings[2595] = str->add("e/modules/pager/window");
11553strings[2090] = str->add(strings[2090]);
11554strings[2081] = str->add(strings[2081]);
11555strings[2112] = str->add(strings[2112]);
11556strings[2083] = str->add(strings[2083]);
11557strings[2596] = str->add("e/widgets/winlist/main");
11558strings[2597] = str->add("e/widgets/winlist/item");
11559strings[2598] = str->add("e/modules/mixer/main");
11560strings[2599] = str->add("e/sys/logout");
11561strings[2600] = str->add("e/widgets/dialog/main");
11562strings[2601] = str->add("e/widgets/dialog/text");
11563strings[2602] = str->add("e/widgets/configure/main");
11564strings[2603] = str->add("e/widgets/border/default/move");
11565strings[2604] = str->add("e/widgets/border/default/resize");
11566strings[2605] = str->add("e/transpreview/0");
11567strings[2606] = str->add("e/transpreview/1");
11568strings[2607] = str->add("e/transitions/crossfade");
11569strings[2608] = str->add("e/transitions/vswipe");
11570strings[2609] = str->add("e/widgets/check");
11571strings[2610] = str->add("e/widgets/check_icon");
11572strings[2611] = str->add("e/widgets/radio");
11573strings[2612] = str->add("e/widgets/radio_icon");
11574strings[2613] = str->add("e/widgets/button");
11575strings[2614] = str->add("e/widgets/scrollframe");
11576strings[2615] = str->add("e/widgets/ilist");
11577strings[2616] = str->add("e/widgets/ilist_odd");
11578strings[2617] = str->add("e/widgets/ilist_header");
11579strings[2618] = str->add("e/widgets/ilist_header_odd");
11580strings[2619] = str->add("e/widgets/entry");
11581strings[2620] = str->add("e/widgets/entry/text");
11582strings[2621] = str->add("e/widgets/entry/cursor");
11583strings[2622] = str->add("e/widgets/entry/selection");
11584strings[2623] = str->add("e/widgets/preview");
11585strings[2624] = str->add("e/widgets/deskpreview/desk");
11586strings[2625] = str->add("e/widgets/color_well");
11587strings[2626] = str->add("e/widgets/spectrum");
11588strings[2627] = str->add("e/widgets/cslider");
11589strings[2628] = str->add("e/widgets/slider_vertical");
11590strings[2629] = str->add("e/widgets/slider_horizontal");
11591strings[2630] = str->add("e/widgets/frame");
11592strings[2631] = str->add("e/widgets/label");
11593strings[2632] = str->add("e/widgets/fontpreview");
11594strings[2633] = str->add("e/widgets/textblock");
11595strings[2634] = str->add("e/widgets/menu/default/submenu_bg");
11596strings[2635] = str->add("e/sys/halt");
11597strings[2636] = str->add("e/sys/reboot");
11598strings[2637] = str->add("e/sys/suspend");
11599strings[2638] = str->add("e/sys/hibernate");
11600strings[2639] = str->add("e/widgets/gradpreview");
11601strings[1839] = str->add(strings[1839]);
11602strings[2574] = str->add(strings[2574]);
11603strings[2575] = str->add(strings[2575]);
11604strings[2576] = str->add(strings[2576]);
11605strings[2577] = str->add(strings[2577]);
11606strings[2578] = str->add(strings[2578]);
11607strings[2579] = str->add(strings[2579]);
11608strings[2580] = str->add(strings[2580]);
11609strings[1754] = str->add(strings[1754]);
11610strings[2581] = str->add(strings[2581]);
11611strings[2582] = str->add(strings[2582]);
11612strings[2583] = str->add(strings[2583]);
11613strings[2584] = str->add(strings[2584]);
11614strings[2585] = str->add(strings[2585]);
11615strings[2586] = str->add(strings[2586]);
11616strings[2587] = str->add(strings[2587]);
11617strings[2588] = str->add(strings[2588]);
11618strings[1945] = str->add(strings[1945]);
11619strings[2061] = str->add(strings[2061]);
11620strings[1960] = str->add(strings[1960]);
11621strings[2589] = str->add(strings[2589]);
11622strings[2590] = str->add(strings[2590]);
11623strings[2591] = str->add(strings[2591]);
11624strings[2592] = str->add(strings[2592]);
11625strings[2593] = str->add(strings[2593]);
11626strings[2594] = str->add(strings[2594]);
11627strings[1957] = str->add(strings[1957]);
11628strings[2127] = str->add(strings[2127]);
11629strings[1963] = str->add(strings[1963]);
11630strings[2595] = str->add(strings[2595]);
11631strings[2090] = str->add(strings[2090]);
11632strings[2081] = str->add(strings[2081]);
11633strings[2112] = str->add(strings[2112]);
11634strings[2083] = str->add(strings[2083]);
11635strings[2596] = str->add(strings[2596]);
11636strings[2597] = str->add(strings[2597]);
11637strings[2598] = str->add(strings[2598]);
11638strings[2599] = str->add(strings[2599]);
11639strings[2600] = str->add(strings[2600]);
11640strings[2601] = str->add(strings[2601]);
11641strings[2602] = str->add(strings[2602]);
11642strings[2603] = str->add(strings[2603]);
11643strings[2604] = str->add(strings[2604]);
11644strings[2605] = str->add(strings[2605]);
11645strings[2606] = str->add(strings[2606]);
11646strings[2607] = str->add(strings[2607]);
11647strings[2608] = str->add(strings[2608]);
11648strings[2609] = str->add(strings[2609]);
11649strings[2610] = str->add(strings[2610]);
11650strings[2611] = str->add(strings[2611]);
11651strings[2612] = str->add(strings[2612]);
11652strings[2613] = str->add(strings[2613]);
11653strings[2614] = str->add(strings[2614]);
11654strings[2615] = str->add(strings[2615]);
11655strings[2616] = str->add(strings[2616]);
11656strings[2617] = str->add(strings[2617]);
11657strings[2618] = str->add(strings[2618]);
11658strings[2619] = str->add(strings[2619]);
11659strings[2620] = str->add(strings[2620]);
11660strings[2621] = str->add(strings[2621]);
11661strings[2622] = str->add(strings[2622]);
11662strings[2623] = str->add(strings[2623]);
11663strings[2624] = str->add(strings[2624]);
11664strings[2625] = str->add(strings[2625]);
11665strings[2626] = str->add(strings[2626]);
11666strings[2627] = str->add(strings[2627]);
11667strings[2628] = str->add(strings[2628]);
11668strings[2629] = str->add(strings[2629]);
11669strings[2630] = str->add(strings[2630]);
11670strings[2631] = str->add(strings[2631]);
11671strings[2632] = str->add(strings[2632]);
11672strings[2633] = str->add(strings[2633]);
11673strings[2634] = str->add(strings[2634]);
11674strings[2635] = str->add(strings[2635]);
11675strings[2636] = str->add(strings[2636]);
11676strings[2637] = str->add(strings[2637]);
11677strings[2638] = str->add(strings[2638]);
11678strings[2639] = str->add(strings[2639]);
11679str->del(strings[1839]);
11680str->del(strings[2574]);
11681str->del(strings[2575]);
11682str->del(strings[2576]);
11683str->del(strings[2577]);
11684str->del(strings[2578]);
11685str->del(strings[2579]);
11686str->del(strings[2580]);
11687str->del(strings[1754]);
11688str->del(strings[2581]);
11689str->del(strings[2582]);
11690str->del(strings[2583]);
11691str->del(strings[2584]);
11692str->del(strings[2585]);
11693str->del(strings[2586]);
11694str->del(strings[2587]);
11695str->del(strings[2588]);
11696str->del(strings[1945]);
11697str->del(strings[2061]);
11698str->del(strings[1960]);
11699str->del(strings[2589]);
11700str->del(strings[2590]);
11701str->del(strings[2591]);
11702str->del(strings[2592]);
11703str->del(strings[2593]);
11704str->del(strings[2594]);
11705str->del(strings[1957]);
11706str->del(strings[2127]);
11707str->del(strings[1963]);
11708str->del(strings[2595]);
11709str->del(strings[2090]);
11710str->del(strings[2081]);
11711str->del(strings[2112]);
11712str->del(strings[2083]);
11713str->del(strings[2596]);
11714str->del(strings[2597]);
11715str->del(strings[2598]);
11716str->del(strings[2599]);
11717str->del(strings[2600]);
11718str->del(strings[2601]);
11719str->del(strings[2602]);
11720str->del(strings[2603]);
11721str->del(strings[2604]);
11722str->del(strings[2605]);
11723str->del(strings[2606]);
11724str->del(strings[2607]);
11725str->del(strings[2608]);
11726str->del(strings[2609]);
11727str->del(strings[2610]);
11728str->del(strings[2611]);
11729str->del(strings[2612]);
11730str->del(strings[2613]);
11731str->del(strings[2614]);
11732str->del(strings[2615]);
11733str->del(strings[2616]);
11734str->del(strings[2617]);
11735str->del(strings[2618]);
11736str->del(strings[2619]);
11737str->del(strings[2620]);
11738str->del(strings[2621]);
11739str->del(strings[2622]);
11740str->del(strings[2623]);
11741str->del(strings[2624]);
11742str->del(strings[2625]);
11743str->del(strings[2626]);
11744str->del(strings[2627]);
11745str->del(strings[2628]);
11746str->del(strings[2629]);
11747str->del(strings[2630]);
11748str->del(strings[2631]);
11749str->del(strings[2632]);
11750str->del(strings[2633]);
11751str->del(strings[2634]);
11752str->del(strings[2635]);
11753str->del(strings[2636]);
11754str->del(strings[2637]);
11755str->del(strings[2638]);
11756str->del(strings[2639]);
11757strings[1839] = str->add(strings[1839]);
11758strings[2090] = str->add(strings[2090]);
11759strings[2640] = str->add("e/modules/battery/popup");
11760strings[2574] = str->add(strings[2574]);
11761strings[2575] = str->add(strings[2575]);
11762strings[2576] = str->add(strings[2576]);
11763strings[2577] = str->add(strings[2577]);
11764strings[2578] = str->add(strings[2578]);
11765strings[2579] = str->add(strings[2579]);
11766strings[2641] = str->add("e/widgets/border/default/close");
11767strings[2642] = str->add("e/widgets/border/default/minimize");
11768strings[2643] = str->add("e/widgets/border/default/maximize");
11769strings[2644] = str->add("e/widgets/border/default/shade");
11770strings[2645] = str->add("e/widgets/border/default/stick");
11771strings[2646] = str->add("e/widgets/border/default/kill");
11772strings[2647] = str->add("e/widgets/border/default/locks");
11773strings[2648] = str->add("e/widgets/border/default/locks_user");
11774strings[2649] = str->add("e/widgets/border/default/locks_application");
11775strings[2650] = str->add("e/widgets/border/default/borderless");
11776strings[2651] = str->add("e/widgets/border/default/fullscreen");
11777strings[2652] = str->add("e/widgets/border/default/remember");
11778strings[2653] = str->add("e/widgets/border/default/skip_winlist");
11779strings[2654] = str->add("e/widgets/border/default/skip");
11780strings[2655] = str->add("e/widgets/border/default/skip_pager");
11781strings[2656] = str->add("e/widgets/border/default/sendto");
11782strings[2657] = str->add("e/widgets/border/default/stacking");
11783strings[2658] = str->add("e/widgets/border/default/stack_on_top");
11784strings[2659] = str->add("e/widgets/border/default/stack_normal");
11785strings[2660] = str->add("e/widgets/border/default/stack_below");
11786strings[2661] = str->add("e/widgets/border/default/properties");
11787strings[2112] = str->add(strings[2112]);
11788strings[1935] = str->add(strings[1935]);
11789strings[2662] = str->add("e/gadman/popup");
11790strings[1929] = str->add(strings[1929]);
11791strings[2663] = str->add("e/gadman/frame");
11792strings[2067] = str->add(strings[2067]);
11793strings[2069] = str->add(strings[2069]);
11794strings[2664] = str->add("e/modules/ibar/drop");
11795strings[2665] = str->add("e/modules/ibar/drop_overlay");
11796strings[2581] = str->add(strings[2581]);
11797strings[2582] = str->add(strings[2582]);
11798strings[2583] = str->add(strings[2583]);
11799strings[2634] = str->add(strings[2634]);
11800strings[2587] = str->add(strings[2587]);
11801strings[2588] = str->add(strings[2588]);
11802strings[2584] = str->add(strings[2584]);
11803strings[2585] = str->add(strings[2585]);
11804strings[2586] = str->add(strings[2586]);
11805strings[2127] = str->add(strings[2127]);
11806strings[1963] = str->add(strings[1963]);
11807strings[2595] = str->add(strings[2595]);
11808strings[2604] = str->add(strings[2604]);
11809strings[2603] = str->add(strings[2603]);
11810strings[2081] = str->add(strings[2081]);
11811strings[2666] = str->add("e/error/main");
11812strings[2083] = str->add(strings[2083]);
11813strings[2667] = str->add("e/modules/ibox/icon");
11814strings[2668] = str->add("e/modules/ibox/icon_overlay");
11815strings[2669] = str->add("e/modules/ibox/drop");
11816strings[2670] = str->add("e/modules/ibox/drop_overlay");
11817strings[1957] = str->add(strings[1957]);
11818strings[2596] = str->add(strings[2596]);
11819strings[2597] = str->add(strings[2597]);
11820strings[2605] = str->add(strings[2605]);
11821strings[2606] = str->add(strings[2606]);
11822strings[2607] = str->add(strings[2607]);
11823strings[2608] = str->add(strings[2608]);
11824strings[2600] = str->add(strings[2600]);
11825strings[2601] = str->add(strings[2601]);
11826strings[2602] = str->add(strings[2602]);
11827strings[2671] = str->add("e/icons/enlightenment/e");
11828strings[2672] = str->add("e/icons/enlightenment/reset");
11829strings[2673] = str->add("e/icons/enlightenment/exit");
11830strings[2674] = str->add("e/icons/enlightenment/logout");
11831strings[2675] = str->add("e/icons/enlightenment/halt");
11832strings[2676] = str->add("e/icons/enlightenment/reboot");
11833strings[2677] = str->add("e/icons/enlightenment/suspend");
11834strings[2678] = str->add("e/icons/enlightenment/hibernate");
11835strings[2679] = str->add("e/icons/enlightenment/screen_setup");
11836strings[2680] = str->add("e/icons/enlightenment/themes");
11837strings[2681] = str->add("e/icons/enlightenment/colors");
11838strings[2682] = str->add("e/icons/enlightenment/windows");
11839strings[2683] = str->add("e/icons/enlightenment/lost_windows");
11840strings[2684] = str->add("e/icons/enlightenment/focus");
11841strings[2685] = str->add("e/icons/enlightenment/modules");
11842strings[2686] = str->add("e/icons/enlightenment/favorites");
11843strings[2687] = str->add("e/icons/enlightenment/desktops");
11844strings[2688] = str->add("e/icons/enlightenment/configuration");
11845strings[2689] = str->add("e/icons/enlightenment/intl");
11846strings[2690] = str->add("e/icons/enlightenment/system");
11847strings[2691] = str->add("e/icons/enlightenment/run");
11848strings[2692] = str->add("e/icons/enlightenment/directories");
11849strings[2693] = str->add("e/icons/enlightenment/fileman");
11850strings[2694] = str->add("e/icons/enlightenment/unknown");
11851strings[2695] = str->add("e/icons/widget/new_dialog");
11852strings[2696] = str->add("e/icons/widget/up_arrow");
11853strings[2697] = str->add("e/icons/widget/down_arrow");
11854strings[2698] = str->add("e/icons/widget/up_dir");
11855strings[2699] = str->add("e/icons/enlightenment/mouse");
11856strings[2700] = str->add("e/icons/enlightenment/mouse_left");
11857strings[2701] = str->add("e/icons/enlightenment/mouse_middle");
11858strings[2702] = str->add("e/icons/enlightenment/mouse_right");
11859strings[2703] = str->add("e/icons/enlightenment/mouse_extra");
11860strings[2704] = str->add("e/icons/enlightenment/mouse_wheel");
11861strings[2705] = str->add("e/icons/enlightenment/mouse_clean");
11862strings[2706] = str->add("e/icons/enlightenment/keys");
11863strings[2707] = str->add("e/icons/enlightenment/desklock");
11864strings[2708] = str->add("e/icons/enlightenment/desklock_menu");
11865strings[2709] = str->add("e/icons/enlightenment/regenerate_menus");
11866strings[2710] = str->add("e/icons/enlightenment/screen_resolution");
11867strings[2711] = str->add("e/icons/enlightenment/shelf");
11868strings[2712] = str->add("e/icons/enlightenment/fonts");
11869strings[2713] = str->add("e/icons/enlightenment/background");
11870strings[2714] = str->add("e/icons/enlightenment/icon_theme");
11871strings[2715] = str->add("e/icons/enlightenment/applications");
11872strings[2716] = str->add("e/icons/enlightenment/transitions");
11873strings[2717] = str->add("e/icons/enlightenment/performance");
11874strings[2718] = str->add("e/icons/enlightenment/startup");
11875strings[2719] = str->add("e/icons/enlightenment/winlist");
11876strings[2720] = str->add("e/icons/enlightenment/window_manipulation");
11877strings[2721] = str->add("e/icons/enlightenment/menus");
11878strings[2722] = str->add("e/icons/enlightenment/screen_normal");
11879strings[2723] = str->add("e/icons/enlightenment/screen_around");
11880strings[2724] = str->add("e/icons/enlightenment/screen_left");
11881strings[2725] = str->add("e/icons/enlightenment/screen_right");
11882strings[2726] = str->add("e/icons/enlightenment/screen_vflip");
11883strings[2727] = str->add("e/icons/enlightenment/screen_hflip");
11884strings[2728] = str->add("e/icons/enlightenment/shelf_position_bottom");
11885strings[2729] = str->add("e/icons/enlightenment/shelf_position_bottom_left");
11886strings[2730] = str->add("e/icons/enlightenment/shelf_position_bottom_right");
11887strings[2731] = str->add("e/icons/enlightenment/shelf_position_top");
11888strings[2732] = str->add("e/icons/enlightenment/shelf_position_top_left");
11889strings[2733] = str->add("e/icons/enlightenment/shelf_position_top_right");
11890strings[2734] = str->add("e/icons/enlightenment/shelf_position_left");
11891strings[2735] = str->add("e/icons/enlightenment/shelf_position_left_top");
11892strings[2736] = str->add("e/icons/enlightenment/shelf_position_left_bottom");
11893strings[2737] = str->add("e/icons/enlightenment/shelf_position_right");
11894strings[2738] = str->add("e/icons/enlightenment/shelf_position_right_top");
11895strings[2739] = str->add("e/icons/enlightenment/shelf_position_right_bottom");
11896strings[2740] = str->add("e/icons/enlightenment/shelf_bottom_desk");
11897strings[2741] = str->add("e/icons/enlightenment/shelf_custom");
11898strings[2742] = str->add("e/icons/enlightenment/shelf_dock");
11899strings[2743] = str->add("e/icons/enlightenment/shelf_menu_bar");
11900strings[2744] = str->add("e/icons/enlightenment/shelf_panel");
11901strings[2745] = str->add("e/icons/enlightenment/shelf_top_desk");
11902strings[2746] = str->add("e/icons/enlightenment/wallpaper_stretch");
11903strings[2747] = str->add("e/icons/enlightenment/wallpaper_tile");
11904strings[2748] = str->add("e/icons/enlightenment/wallpaper_center");
11905strings[2749] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_in");
11906strings[2750] = str->add("e/icons/enlightenment/wallpaper_scale_aspect_out");
11907strings[2751] = str->add("e/icons/enlightenment/gradient_h");
11908strings[2752] = str->add("e/icons/enlightenment/gradient_v");
11909strings[2753] = str->add("e/icons/enlightenment/gradient_du");
11910strings[2754] = str->add("e/icons/enlightenment/gradient_dd");
11911strings[2755] = str->add("e/icons/enlightenment/gradient_rad");
11912strings[2756] = str->add("e/icons/enlightenment/advanced");
11913strings[2757] = str->add("e/icons/enlightenment/behavior");
11914strings[2758] = str->add("e/icons/enlightenment/appearance");
11915strings[2759] = str->add("e/icons/enlightenment/extensions");
11916strings[2760] = str->add("e/icons/enlightenment/imc");
11917strings[2761] = str->add("e/icons/enlightenment/file_icons");
11918strings[2762] = str->add("e/icons/enlightenment/menu_settings");
11919strings[2763] = str->add("e/icons/enlightenment/ibar_applications");
11920strings[2764] = str->add("e/icons/enlightenment/restart_applications");
11921strings[2765] = str->add("e/icons/enlightenment/startup_applications");
11922strings[2766] = str->add("e/icons/enlightenment/power_management");
11923strings[2767] = str->add("e/icons/enlightenment/screensaver");
11924strings[2768] = str->add("e/icons/enlightenment/window_remembers");
11925strings[2580] = str->add(strings[2580]);
11926strings[1754] = str->add(strings[1754]);
11927strings[2769] = str->add("e/widgets/about/main");
11928strings[2770] = str->add("e/theme/about");
11929strings[2619] = str->add(strings[2619]);
11930strings[2620] = str->add(strings[2620]);
11931strings[2621] = str->add(strings[2621]);
11932strings[2622] = str->add(strings[2622]);
11933strings[2771] = str->add("e/fileman/default/window/main");
11934strings[2772] = str->add("e/fileman/default/scrollframe");
11935strings[2773] = str->add("e/fileman/default/list/variable");
11936strings[2774] = str->add("e/fileman/default/list_odd/variable");
11937strings[2775] = str->add("e/fileman/default/list/fixed");
11938strings[2776] = str->add("e/fileman/default/list_odd/fixed");
11939strings[2777] = str->add("e/fileman/default/icon/fixed");
11940strings[2778] = str->add("e/fileman/default/icon/variable");
11941strings[2779] = str->add("e/fileman/default/overlay");
11942strings[2780] = str->add("e/fileman/default/list/drop_between");
11943strings[2781] = str->add("e/fileman/default/list/drop_in");
11944strings[2782] = str->add("e/fileman/desktop/scrollframe");
11945strings[2783] = str->add("e/fileman/desktop/icon/fixed");
11946strings[2784] = str->add("e/fileman/desktop/icon/variable");
11947strings[2785] = str->add("e/fileman/desktop/overlay");
11948strings[2786] = str->add("e/fileman/desktop/list/drop_between");
11949strings[2787] = str->add("e/fileman/desktop/list/drop_in");
11950strings[2788] = str->add("e/fileman/default/rubberband");
11951strings[2789] = str->add("e/icons/fileman/folder");
11952strings[2790] = str->add("e/icons/fileman/file");
11953strings[2791] = str->add("e/icons/fileman/home");
11954strings[2792] = str->add("e/icons/fileman/desktop");
11955strings[2793] = str->add("e/icons/fileman/hdd");
11956strings[2794] = str->add("e/icons/fileman/hd");
11957strings[2795] = str->add("e/icons/fileman/mime/application/pdf");
11958strings[2796] = str->add("e/icons/fileman/mime/text/x-csrc");
11959strings[2797] = str->add("e/icons/fileman/mime/text/x-chdr");
11960strings[2798] = str->add("e/icons/fileman/mime/application/x-object");
11961strings[2799] = str->add("e/icons/fileman/mime/application/x-shellscript");
11962strings[2800] = str->add("e/icons/fileman/mime/image/png");
11963strings[2801] = str->add("e/icons/fileman/mime/image/jpeg");
11964strings[2802] = str->add("e/icons/fileman/mime/video/x-msvideo");
11965strings[2803] = str->add("e/icons/fileman/mime/audio/mpeg");
11966strings[2804] = str->add("e/icons/fileman/mime/application/x-xcf");
11967strings[2805] = str->add("e/icons/fileman/mime/text/x-c++src");
11968strings[2806] = str->add("e/icons/fileman/mime/text/x-csharp");
11969strings[2807] = str->add("e/icons/fileman/mime/text/x-patch");
11970strings[2808] = str->add("e/icons/fileman/mime/application/msword");
11971strings[2809] = str->add("e/icons/fileman/mime/application/ogg");
11972strings[2810] = str->add("e/icons/fileman/mime/text/plain");
11973strings[2811] = str->add("e/icons/fileman/mime/application/x-bzip");
11974strings[2812] = str->add("e/icons/fileman/mime/application/x-deb");
11975strings[2813] = str->add("e/icons/fileman/mime/application/x-font-ttf");
11976strings[2814] = str->add("e/icons/fileman/mime/application/x-font-pcf");
11977strings[2815] = str->add("e/icons/fileman/mime/application/x-font-bdf");
11978strings[2816] = str->add("e/icons/fileman/mime/text/css");
11979strings[2817] = str->add("e/icons/fileman/mime/text/html");
11980strings[2817] = str->add(strings[2817]);
11981strings[2818] = str->add("e/icons/fileman/mime/application/zip");
11982strings[2819] = str->add("e/icons/fileman/mime/application/x-gzip");
11983strings[2820] = str->add("e/icons/fileman/mime/application/x-bzip-compressed-tar");
11984strings[2821] = str->add("e/icons/fileman/mime/application/x-bzip2-compressed-tar");
11985strings[2822] = str->add("e/icons/fileman/mime/application/x-compressed-tar");
11986strings[2823] = str->add("e/icons/fileman/mime/application/x-tar");
11987strings[2824] = str->add("e/icons/fileman/mime/application/x-rar");
11988strings[2825] = str->add("e/icons/fileman/mime/video/mpeg");
11989strings[2826] = str->add("e/icons/fileman/mime/video");
11990strings[2827] = str->add("e/icons/fileman/mime/text");
11991strings[2828] = str->add("e/icons/fileman/mime/image");
11992strings[2829] = str->add("e/icons/fileman/mime/audio");
11993strings[2830] = str->add("e/fileman/default/button/open");
11994strings[2831] = str->add("e/fileman/default/button/copy");
11995strings[2832] = str->add("e/fileman/default/button/cut");
11996strings[2833] = str->add("e/fileman/default/button/paste");
11997strings[2834] = str->add("e/fileman/default/button/delete");
11998strings[2835] = str->add("e/fileman/default/button/rename");
11999strings[2836] = str->add("e/fileman/default/button/properties");
12000strings[2837] = str->add("e/fileman/default/button/arrange_name");
12001strings[2838] = str->add("e/fileman/default/button/arrange");
12002strings[2839] = str->add("e/fileman/default/button/arrange_time");
12003strings[2840] = str->add("e/fileman/default/button/new");
12004strings[2841] = str->add("e/fileman/default/button/new_dir");
12005strings[2842] = str->add("e/fileman/default/button/refresh");
12006strings[2843] = str->add("e/fileman/default/button/view_details");
12007strings[2844] = str->add("e/fileman/default/button/view_name");
12008strings[2845] = str->add("e/fileman/default/button/view");
12009strings[2846] = str->add("e/fileman/default/button/select");
12010strings[2847] = str->add("e/widgets/fileselector/main");
12011strings[2609] = str->add(strings[2609]);
12012strings[2610] = str->add(strings[2610]);
12013strings[2611] = str->add(strings[2611]);
12014strings[2612] = str->add(strings[2612]);
12015strings[2630] = str->add(strings[2630]);
12016strings[2613] = str->add(strings[2613]);
12017strings[2631] = str->add(strings[2631]);
12018strings[2614] = str->add(strings[2614]);
12019strings[2615] = str->add(strings[2615]);
12020strings[2616] = str->add(strings[2616]);
12021strings[2617] = str->add(strings[2617]);
12022strings[2848] = str->add("e/widgets/tlist");
12023strings[2849] = str->add("e/widgets/tlist_odd");
12024strings[2628] = str->add(strings[2628]);
12025strings[2629] = str->add(strings[2629]);
12026strings[2850] = str->add("e/widgets/exebuf/main");
12027strings[2851] = str->add("e/widgets/exebuf/item");
12028strings[2852] = str->add("e/desklock/background");
12029strings[2853] = str->add("e/desklock/login_box");
12030strings[2633] = str->add(strings[2633]);
12031strings[1945] = str->add(strings[1945]);
12032strings[2061] = str->add(strings[2061]);
12033strings[1960] = str->add(strings[1960]);
12034strings[2592] = str->add(strings[2592]);
12035strings[2593] = str->add(strings[2593]);
12036strings[2594] = str->add(strings[2594]);
12037strings[2589] = str->add(strings[2589]);
12038strings[2590] = str->add(strings[2590]);
12039strings[2591] = str->add(strings[2591]);
12040strings[2623] = str->add(strings[2623]);
12041strings[2627] = str->add(strings[2627]);
12042strings[2626] = str->add(strings[2626]);
12043strings[2625] = str->add(strings[2625]);
12044strings[2599] = str->add(strings[2599]);
12045strings[2635] = str->add(strings[2635]);
12046strings[2636] = str->add(strings[2636]);
12047strings[2637] = str->add(strings[2637]);
12048strings[2638] = str->add(strings[2638]);
12049strings[2624] = str->add(strings[2624]);
12050strings[2632] = str->add(strings[2632]);
12051strings[2854] = str->add("e/wizard/extra");
12052strings[2855] = str->add("e/wizard/main");
12053strings[2856] = str->add("e/toolbar/default/base");
12054strings[2857] = str->add("e/widgets/slidesel");
12055strings[2598] = str->add(strings[2598]);
12056strings[2858] = str->add("e/modules/connman/main");
12057strings[2859] = str->add("e/modules/connman/network");
12058strings[2639] = str->add(strings[2639]);
12059strings[1839] = str->add(strings[1839]);
12060strings[2090] = str->add(strings[2090]);
12061strings[2640] = str->add(strings[2640]);
12062strings[2574] = str->add(strings[2574]);
12063strings[2575] = str->add(strings[2575]);
12064strings[2576] = str->add(strings[2576]);
12065strings[2577] = str->add(strings[2577]);
12066strings[2578] = str->add(strings[2578]);
12067strings[2579] = str->add(strings[2579]);
12068strings[2641] = str->add(strings[2641]);
12069strings[2642] = str->add(strings[2642]);
12070strings[2643] = str->add(strings[2643]);
12071strings[2644] = str->add(strings[2644]);
12072strings[2645] = str->add(strings[2645]);
12073strings[2646] = str->add(strings[2646]);
12074strings[2647] = str->add(strings[2647]);
12075strings[2648] = str->add(strings[2648]);
12076strings[2649] = str->add(strings[2649]);
12077strings[2650] = str->add(strings[2650]);
12078strings[2651] = str->add(strings[2651]);
12079strings[2652] = str->add(strings[2652]);
12080strings[2653] = str->add(strings[2653]);
12081strings[2654] = str->add(strings[2654]);
12082strings[2655] = str->add(strings[2655]);
12083strings[2656] = str->add(strings[2656]);
12084strings[2657] = str->add(strings[2657]);
12085strings[2658] = str->add(strings[2658]);
12086strings[2659] = str->add(strings[2659]);
12087strings[2660] = str->add(strings[2660]);
12088strings[2661] = str->add(strings[2661]);
12089strings[2112] = str->add(strings[2112]);
12090strings[1935] = str->add(strings[1935]);
12091strings[2662] = str->add(strings[2662]);
12092strings[1929] = str->add(strings[1929]);
12093strings[2663] = str->add(strings[2663]);
12094strings[2067] = str->add(strings[2067]);
12095strings[2069] = str->add(strings[2069]);
12096strings[2664] = str->add(strings[2664]);
12097strings[2665] = str->add(strings[2665]);
12098strings[2581] = str->add(strings[2581]);
12099strings[2582] = str->add(strings[2582]);
12100strings[2583] = str->add(strings[2583]);
12101strings[2634] = str->add(strings[2634]);
12102strings[2587] = str->add(strings[2587]);
12103strings[2588] = str->add(strings[2588]);
12104strings[2584] = str->add(strings[2584]);
12105strings[2585] = str->add(strings[2585]);
12106strings[2586] = str->add(strings[2586]);
12107strings[2127] = str->add(strings[2127]);
12108strings[1963] = str->add(strings[1963]);
12109strings[2595] = str->add(strings[2595]);
12110strings[2604] = str->add(strings[2604]);
12111strings[2603] = str->add(strings[2603]);
12112strings[2081] = str->add(strings[2081]);
12113strings[2666] = str->add(strings[2666]);
12114strings[2083] = str->add(strings[2083]);
12115strings[2667] = str->add(strings[2667]);
12116strings[2668] = str->add(strings[2668]);
12117strings[2669] = str->add(strings[2669]);
12118strings[2670] = str->add(strings[2670]);
12119strings[1957] = str->add(strings[1957]);
12120strings[2596] = str->add(strings[2596]);
12121strings[2597] = str->add(strings[2597]);
12122strings[2605] = str->add(strings[2605]);
12123strings[2606] = str->add(strings[2606]);
12124strings[2607] = str->add(strings[2607]);
12125strings[2608] = str->add(strings[2608]);
12126strings[2600] = str->add(strings[2600]);
12127strings[2601] = str->add(strings[2601]);
12128strings[2602] = str->add(strings[2602]);
12129strings[2671] = str->add(strings[2671]);
12130strings[2672] = str->add(strings[2672]);
12131strings[2673] = str->add(strings[2673]);
12132strings[2674] = str->add(strings[2674]);
12133strings[2675] = str->add(strings[2675]);
12134strings[2676] = str->add(strings[2676]);
12135strings[2677] = str->add(strings[2677]);
12136strings[2678] = str->add(strings[2678]);
12137strings[2679] = str->add(strings[2679]);
12138strings[2680] = str->add(strings[2680]);
12139strings[2681] = str->add(strings[2681]);
12140strings[2682] = str->add(strings[2682]);
12141strings[2683] = str->add(strings[2683]);
12142strings[2684] = str->add(strings[2684]);
12143strings[2685] = str->add(strings[2685]);
12144strings[2686] = str->add(strings[2686]);
12145strings[2687] = str->add(strings[2687]);
12146strings[2688] = str->add(strings[2688]);
12147strings[2689] = str->add(strings[2689]);
12148strings[2690] = str->add(strings[2690]);
12149strings[2691] = str->add(strings[2691]);
12150strings[2692] = str->add(strings[2692]);
12151strings[2693] = str->add(strings[2693]);
12152strings[2694] = str->add(strings[2694]);
12153strings[2695] = str->add(strings[2695]);
12154strings[2696] = str->add(strings[2696]);
12155strings[2697] = str->add(strings[2697]);
12156strings[2698] = str->add(strings[2698]);
12157strings[2699] = str->add(strings[2699]);
12158strings[2700] = str->add(strings[2700]);
12159strings[2701] = str->add(strings[2701]);
12160strings[2702] = str->add(strings[2702]);
12161strings[2703] = str->add(strings[2703]);
12162strings[2704] = str->add(strings[2704]);
12163strings[2705] = str->add(strings[2705]);
12164strings[2706] = str->add(strings[2706]);
12165strings[2707] = str->add(strings[2707]);
12166strings[2708] = str->add(strings[2708]);
12167strings[2709] = str->add(strings[2709]);
12168strings[2710] = str->add(strings[2710]);
12169strings[2711] = str->add(strings[2711]);
12170strings[2712] = str->add(strings[2712]);
12171strings[2713] = str->add(strings[2713]);
12172strings[2714] = str->add(strings[2714]);
12173strings[2715] = str->add(strings[2715]);
12174strings[2716] = str->add(strings[2716]);
12175strings[2717] = str->add(strings[2717]);
12176strings[2718] = str->add(strings[2718]);
12177strings[2719] = str->add(strings[2719]);
12178strings[2720] = str->add(strings[2720]);
12179strings[2721] = str->add(strings[2721]);
12180strings[2722] = str->add(strings[2722]);
12181strings[2723] = str->add(strings[2723]);
12182strings[2724] = str->add(strings[2724]);
12183strings[2725] = str->add(strings[2725]);
12184strings[2726] = str->add(strings[2726]);
12185strings[2727] = str->add(strings[2727]);
12186strings[2728] = str->add(strings[2728]);
12187strings[2729] = str->add(strings[2729]);
12188strings[2730] = str->add(strings[2730]);
12189strings[2731] = str->add(strings[2731]);
12190strings[2732] = str->add(strings[2732]);
12191strings[2733] = str->add(strings[2733]);
12192strings[2734] = str->add(strings[2734]);
12193strings[2735] = str->add(strings[2735]);
12194strings[2736] = str->add(strings[2736]);
12195strings[2737] = str->add(strings[2737]);
12196strings[2738] = str->add(strings[2738]);
12197strings[2739] = str->add(strings[2739]);
12198strings[2740] = str->add(strings[2740]);
12199strings[2741] = str->add(strings[2741]);
12200strings[2742] = str->add(strings[2742]);
12201strings[2743] = str->add(strings[2743]);
12202strings[2744] = str->add(strings[2744]);
12203strings[2745] = str->add(strings[2745]);
12204strings[2746] = str->add(strings[2746]);
12205strings[2747] = str->add(strings[2747]);
12206strings[2748] = str->add(strings[2748]);
12207strings[2749] = str->add(strings[2749]);
12208strings[2750] = str->add(strings[2750]);
12209strings[2751] = str->add(strings[2751]);
12210strings[2752] = str->add(strings[2752]);
12211strings[2753] = str->add(strings[2753]);
12212strings[2754] = str->add(strings[2754]);
12213strings[2755] = str->add(strings[2755]);
12214strings[2756] = str->add(strings[2756]);
12215strings[2757] = str->add(strings[2757]);
12216strings[2758] = str->add(strings[2758]);
12217strings[2759] = str->add(strings[2759]);
12218strings[2760] = str->add(strings[2760]);
12219strings[2761] = str->add(strings[2761]);
12220strings[2762] = str->add(strings[2762]);
12221strings[2763] = str->add(strings[2763]);
12222strings[2764] = str->add(strings[2764]);
12223strings[2765] = str->add(strings[2765]);
12224strings[2766] = str->add(strings[2766]);
12225strings[2767] = str->add(strings[2767]);
12226strings[2768] = str->add(strings[2768]);
12227strings[2580] = str->add(strings[2580]);
12228strings[1754] = str->add(strings[1754]);
12229strings[2769] = str->add(strings[2769]);
12230strings[2770] = str->add(strings[2770]);
12231strings[2619] = str->add(strings[2619]);
12232strings[2620] = str->add(strings[2620]);
12233strings[2621] = str->add(strings[2621]);
12234strings[2622] = str->add(strings[2622]);
12235strings[2771] = str->add(strings[2771]);
12236strings[2772] = str->add(strings[2772]);
12237strings[2773] = str->add(strings[2773]);
12238strings[2774] = str->add(strings[2774]);
12239strings[2775] = str->add(strings[2775]);
12240strings[2776] = str->add(strings[2776]);
12241strings[2777] = str->add(strings[2777]);
12242strings[2778] = str->add(strings[2778]);
12243strings[2779] = str->add(strings[2779]);
12244strings[2780] = str->add(strings[2780]);
12245strings[2781] = str->add(strings[2781]);
12246strings[2782] = str->add(strings[2782]);
12247strings[2783] = str->add(strings[2783]);
12248strings[2784] = str->add(strings[2784]);
12249strings[2785] = str->add(strings[2785]);
12250strings[2786] = str->add(strings[2786]);
12251strings[2787] = str->add(strings[2787]);
12252strings[2788] = str->add(strings[2788]);
12253strings[2789] = str->add(strings[2789]);
12254strings[2790] = str->add(strings[2790]);
12255strings[2791] = str->add(strings[2791]);
12256strings[2792] = str->add(strings[2792]);
12257strings[2793] = str->add(strings[2793]);
12258strings[2794] = str->add(strings[2794]);
12259strings[2795] = str->add(strings[2795]);
12260strings[2796] = str->add(strings[2796]);
12261strings[2797] = str->add(strings[2797]);
12262strings[2798] = str->add(strings[2798]);
12263strings[2799] = str->add(strings[2799]);
12264strings[2800] = str->add(strings[2800]);
12265strings[2801] = str->add(strings[2801]);
12266strings[2802] = str->add(strings[2802]);
12267strings[2803] = str->add(strings[2803]);
12268strings[2804] = str->add(strings[2804]);
12269strings[2805] = str->add(strings[2805]);
12270strings[2806] = str->add(strings[2806]);
12271strings[2807] = str->add(strings[2807]);
12272strings[2808] = str->add(strings[2808]);
12273strings[2809] = str->add(strings[2809]);
12274strings[2810] = str->add(strings[2810]);
12275strings[2811] = str->add(strings[2811]);
12276strings[2812] = str->add(strings[2812]);
12277strings[2813] = str->add(strings[2813]);
12278strings[2814] = str->add(strings[2814]);
12279strings[2815] = str->add(strings[2815]);
12280strings[2816] = str->add(strings[2816]);
12281strings[2817] = str->add(strings[2817]);
12282strings[2817] = str->add(strings[2817]);
12283strings[2818] = str->add(strings[2818]);
12284strings[2819] = str->add(strings[2819]);
12285strings[2820] = str->add(strings[2820]);
12286strings[2821] = str->add(strings[2821]);
12287strings[2822] = str->add(strings[2822]);
12288strings[2823] = str->add(strings[2823]);
12289strings[2824] = str->add(strings[2824]);
12290strings[2825] = str->add(strings[2825]);
12291strings[2826] = str->add(strings[2826]);
12292strings[2827] = str->add(strings[2827]);
12293strings[2828] = str->add(strings[2828]);
12294strings[2829] = str->add(strings[2829]);
12295strings[2830] = str->add(strings[2830]);
12296strings[2831] = str->add(strings[2831]);
12297strings[2832] = str->add(strings[2832]);
12298strings[2833] = str->add(strings[2833]);
12299strings[2834] = str->add(strings[2834]);
12300strings[2835] = str->add(strings[2835]);
12301strings[2836] = str->add(strings[2836]);
12302strings[2837] = str->add(strings[2837]);
12303strings[2838] = str->add(strings[2838]);
12304strings[2839] = str->add(strings[2839]);
12305strings[2840] = str->add(strings[2840]);
12306strings[2841] = str->add(strings[2841]);
12307strings[2842] = str->add(strings[2842]);
12308strings[2843] = str->add(strings[2843]);
12309strings[2844] = str->add(strings[2844]);
12310strings[2845] = str->add(strings[2845]);
12311strings[2846] = str->add(strings[2846]);
12312strings[2847] = str->add(strings[2847]);
12313strings[2609] = str->add(strings[2609]);
12314strings[2610] = str->add(strings[2610]);
12315strings[2611] = str->add(strings[2611]);
12316strings[2612] = str->add(strings[2612]);
12317strings[2630] = str->add(strings[2630]);
12318strings[2613] = str->add(strings[2613]);
12319strings[2631] = str->add(strings[2631]);
12320strings[2614] = str->add(strings[2614]);
12321strings[2615] = str->add(strings[2615]);
12322strings[2616] = str->add(strings[2616]);
12323strings[2617] = str->add(strings[2617]);
12324strings[2848] = str->add(strings[2848]);
12325strings[2849] = str->add(strings[2849]);
12326strings[2628] = str->add(strings[2628]);
12327strings[2629] = str->add(strings[2629]);
12328strings[2850] = str->add(strings[2850]);
12329strings[2851] = str->add(strings[2851]);
12330strings[2852] = str->add(strings[2852]);
12331strings[2853] = str->add(strings[2853]);
12332strings[2633] = str->add(strings[2633]);
12333strings[1945] = str->add(strings[1945]);
12334strings[2061] = str->add(strings[2061]);
12335strings[1960] = str->add(strings[1960]);
12336strings[2592] = str->add(strings[2592]);
12337strings[2593] = str->add(strings[2593]);
12338strings[2594] = str->add(strings[2594]);
12339strings[2589] = str->add(strings[2589]);
12340strings[2590] = str->add(strings[2590]);
12341strings[2591] = str->add(strings[2591]);
12342strings[2623] = str->add(strings[2623]);
12343strings[2627] = str->add(strings[2627]);
12344strings[2626] = str->add(strings[2626]);
12345strings[2625] = str->add(strings[2625]);
12346strings[2599] = str->add(strings[2599]);
12347strings[2635] = str->add(strings[2635]);
12348strings[2636] = str->add(strings[2636]);
12349strings[2637] = str->add(strings[2637]);
12350strings[2638] = str->add(strings[2638]);
12351strings[2624] = str->add(strings[2624]);
12352strings[2632] = str->add(strings[2632]);
12353strings[2854] = str->add(strings[2854]);
12354strings[2855] = str->add(strings[2855]);
12355strings[2856] = str->add(strings[2856]);
12356strings[2857] = str->add(strings[2857]);
12357strings[2598] = str->add(strings[2598]);
12358strings[2858] = str->add(strings[2858]);
12359strings[2859] = str->add(strings[2859]);
12360strings[2639] = str->add(strings[2639]);
12361str->del(strings[1839]);
12362str->del(strings[2090]);
12363str->del(strings[2640]);
12364str->del(strings[2574]);
12365str->del(strings[2575]);
12366str->del(strings[2576]);
12367str->del(strings[2577]);
12368str->del(strings[2578]);
12369str->del(strings[2579]);
12370str->del(strings[2641]);
12371str->del(strings[2642]);
12372str->del(strings[2643]);
12373str->del(strings[2644]);
12374str->del(strings[2645]);
12375str->del(strings[2646]);
12376str->del(strings[2647]);
12377str->del(strings[2648]);
12378str->del(strings[2649]);
12379str->del(strings[2650]);
12380str->del(strings[2651]);
12381str->del(strings[2652]);
12382str->del(strings[2653]);
12383str->del(strings[2654]);
12384str->del(strings[2655]);
12385str->del(strings[2656]);
12386str->del(strings[2657]);
12387str->del(strings[2658]);
12388str->del(strings[2659]);
12389str->del(strings[2660]);
12390str->del(strings[2661]);
12391str->del(strings[2112]);
12392str->del(strings[1935]);
12393str->del(strings[2662]);
12394str->del(strings[1929]);
12395str->del(strings[2663]);
12396str->del(strings[2067]);
12397str->del(strings[2069]);
12398str->del(strings[2664]);
12399str->del(strings[2665]);
12400str->del(strings[2581]);
12401str->del(strings[2582]);
12402str->del(strings[2583]);
12403str->del(strings[2634]);
12404str->del(strings[2587]);
12405str->del(strings[2588]);
12406str->del(strings[2584]);
12407str->del(strings[2585]);
12408str->del(strings[2586]);
12409str->del(strings[2127]);
12410str->del(strings[1963]);
12411str->del(strings[2595]);
12412str->del(strings[2604]);
12413str->del(strings[2603]);
12414str->del(strings[2081]);
12415str->del(strings[2666]);
12416str->del(strings[2083]);
12417str->del(strings[2667]);
12418str->del(strings[2668]);
12419str->del(strings[2669]);
12420str->del(strings[2670]);
12421str->del(strings[1957]);
12422str->del(strings[2596]);
12423str->del(strings[2597]);
12424str->del(strings[2605]);
12425str->del(strings[2606]);
12426str->del(strings[2607]);
12427str->del(strings[2608]);
12428str->del(strings[2600]);
12429str->del(strings[2601]);
12430str->del(strings[2602]);
12431str->del(strings[2671]);
12432str->del(strings[2672]);
12433str->del(strings[2673]);
12434str->del(strings[2674]);
12435str->del(strings[2675]);
12436str->del(strings[2676]);
12437str->del(strings[2677]);
12438str->del(strings[2678]);
12439str->del(strings[2679]);
12440str->del(strings[2680]);
12441str->del(strings[2681]);
12442str->del(strings[2682]);
12443str->del(strings[2683]);
12444str->del(strings[2684]);
12445str->del(strings[2685]);
12446str->del(strings[2686]);
12447str->del(strings[2687]);
12448str->del(strings[2688]);
12449str->del(strings[2689]);
12450str->del(strings[2690]);
12451str->del(strings[2691]);
12452str->del(strings[2692]);
12453str->del(strings[2693]);
12454str->del(strings[2694]);
12455str->del(strings[2695]);
12456str->del(strings[2696]);
12457str->del(strings[2697]);
12458str->del(strings[2698]);
12459str->del(strings[2699]);
12460str->del(strings[2700]);
12461str->del(strings[2701]);
12462str->del(strings[2702]);
12463str->del(strings[2703]);
12464str->del(strings[2704]);
12465str->del(strings[2705]);
12466str->del(strings[2706]);
12467str->del(strings[2707]);
12468str->del(strings[2708]);
12469str->del(strings[2709]);
12470str->del(strings[2710]);
12471str->del(strings[2711]);
12472str->del(strings[2712]);
12473str->del(strings[2713]);
12474str->del(strings[2714]);
12475str->del(strings[2715]);
12476str->del(strings[2716]);
12477str->del(strings[2717]);
12478str->del(strings[2718]);
12479str->del(strings[2719]);
12480str->del(strings[2720]);
12481str->del(strings[2721]);
12482str->del(strings[2722]);
12483str->del(strings[2723]);
12484str->del(strings[2724]);
12485str->del(strings[2725]);
12486str->del(strings[2726]);
12487str->del(strings[2727]);
12488str->del(strings[2728]);
12489str->del(strings[2729]);
12490str->del(strings[2730]);
12491str->del(strings[2731]);
12492str->del(strings[2732]);
12493str->del(strings[2733]);
12494str->del(strings[2734]);
12495str->del(strings[2735]);
12496str->del(strings[2736]);
12497str->del(strings[2737]);
12498str->del(strings[2738]);
12499str->del(strings[2739]);
12500str->del(strings[2740]);
12501str->del(strings[2741]);
12502str->del(strings[2742]);
12503str->del(strings[2743]);
12504str->del(strings[2744]);
12505str->del(strings[2745]);
12506str->del(strings[2746]);
12507str->del(strings[2747]);
12508str->del(strings[2748]);
12509str->del(strings[2749]);
12510str->del(strings[2750]);
12511str->del(strings[2751]);
12512str->del(strings[2752]);
12513str->del(strings[2753]);
12514str->del(strings[2754]);
12515str->del(strings[2755]);
12516str->del(strings[2756]);
12517str->del(strings[2757]);
12518str->del(strings[2758]);
12519str->del(strings[2759]);
12520str->del(strings[2760]);
12521str->del(strings[2761]);
12522str->del(strings[2762]);
12523str->del(strings[2763]);
12524str->del(strings[2764]);
12525str->del(strings[2765]);
12526str->del(strings[2766]);
12527str->del(strings[2767]);
12528str->del(strings[2768]);
12529str->del(strings[2580]);
12530str->del(strings[1754]);
12531str->del(strings[2769]);
12532str->del(strings[2770]);
12533str->del(strings[2619]);
12534str->del(strings[2620]);
12535str->del(strings[2621]);
12536str->del(strings[2622]);
12537str->del(strings[2771]);
12538str->del(strings[2772]);
12539str->del(strings[2773]);
12540str->del(strings[2774]);
12541str->del(strings[2775]);
12542str->del(strings[2776]);
12543str->del(strings[2777]);
12544str->del(strings[2778]);
12545str->del(strings[2779]);
12546str->del(strings[2780]);
12547str->del(strings[2781]);
12548str->del(strings[2782]);
12549str->del(strings[2783]);
12550str->del(strings[2784]);
12551str->del(strings[2785]);
12552str->del(strings[2786]);
12553str->del(strings[2787]);
12554str->del(strings[2788]);
12555str->del(strings[2789]);
12556str->del(strings[2790]);
12557str->del(strings[2791]);
12558str->del(strings[2792]);
12559str->del(strings[2793]);
12560str->del(strings[2794]);
12561str->del(strings[2795]);
12562str->del(strings[2796]);
12563str->del(strings[2797]);
12564str->del(strings[2798]);
12565str->del(strings[2799]);
12566str->del(strings[2800]);
12567str->del(strings[2801]);
12568str->del(strings[2802]);
12569str->del(strings[2803]);
12570str->del(strings[2804]);
12571str->del(strings[2805]);
12572str->del(strings[2806]);
12573str->del(strings[2807]);
12574str->del(strings[2808]);
12575str->del(strings[2809]);
12576str->del(strings[2810]);
12577str->del(strings[2811]);
12578str->del(strings[2812]);
12579str->del(strings[2813]);
12580str->del(strings[2814]);
12581str->del(strings[2815]);
12582str->del(strings[2816]);
12583str->del(strings[2817]);
12584str->del(strings[2817]);
12585str->del(strings[2818]);
12586str->del(strings[2819]);
12587str->del(strings[2820]);
12588str->del(strings[2821]);
12589str->del(strings[2822]);
12590str->del(strings[2823]);
12591str->del(strings[2824]);
12592str->del(strings[2825]);
12593str->del(strings[2826]);
12594str->del(strings[2827]);
12595str->del(strings[2828]);
12596str->del(strings[2829]);
12597str->del(strings[2830]);
12598str->del(strings[2831]);
12599str->del(strings[2832]);
12600str->del(strings[2833]);
12601str->del(strings[2834]);
12602str->del(strings[2835]);
12603str->del(strings[2836]);
12604str->del(strings[2837]);
12605str->del(strings[2838]);
12606str->del(strings[2839]);
12607str->del(strings[2840]);
12608str->del(strings[2841]);
12609str->del(strings[2842]);
12610str->del(strings[2843]);
12611str->del(strings[2844]);
12612str->del(strings[2845]);
12613str->del(strings[2846]);
12614str->del(strings[2847]);
12615str->del(strings[2609]);
12616str->del(strings[2610]);
12617str->del(strings[2611]);
12618str->del(strings[2612]);
12619str->del(strings[2630]);
12620str->del(strings[2613]);
12621str->del(strings[2631]);
12622str->del(strings[2614]);
12623str->del(strings[2615]);
12624str->del(strings[2616]);
12625str->del(strings[2617]);
12626str->del(strings[2848]);
12627str->del(strings[2849]);
12628str->del(strings[2628]);
12629str->del(strings[2629]);
12630str->del(strings[2850]);
12631str->del(strings[2851]);
12632str->del(strings[2852]);
12633str->del(strings[2853]);
12634str->del(strings[2633]);
12635str->del(strings[1945]);
12636str->del(strings[2061]);
12637str->del(strings[1960]);
12638str->del(strings[2592]);
12639str->del(strings[2593]);
12640str->del(strings[2594]);
12641str->del(strings[2589]);
12642str->del(strings[2590]);
12643str->del(strings[2591]);
12644str->del(strings[2623]);
12645str->del(strings[2627]);
12646str->del(strings[2626]);
12647str->del(strings[2625]);
12648str->del(strings[2599]);
12649str->del(strings[2635]);
12650str->del(strings[2636]);
12651str->del(strings[2637]);
12652str->del(strings[2638]);
12653str->del(strings[2624]);
12654str->del(strings[2632]);
12655str->del(strings[2854]);
12656str->del(strings[2855]);
12657str->del(strings[2856]);
12658str->del(strings[2857]);
12659str->del(strings[2598]);
12660str->del(strings[2858]);
12661str->del(strings[2859]);
12662str->del(strings[2639]);
12663strings[469] = str->add(strings[469]);
12664strings[2686] = str->add(strings[2686]);
12665strings[2231] = str->add(strings[2231]);
12666strings[469] = str->add(strings[469]);
12667strings[2715] = str->add(strings[2715]);
12668strings[2338] = str->add(strings[2338]);
12669strings[469] = str->add(strings[469]);
12670strings[2691] = str->add(strings[2691]);
12671strings[2860] = str->add("Virtual");
12672strings[469] = str->add(strings[469]);
12673strings[2687] = str->add(strings[2687]);
12674strings[2494] = str->add(strings[2494]);
12675strings[469] = str->add(strings[469]);
12676strings[2711] = str->add(strings[2711]);
12677strings[2861] = str->add("Show/Hide All Windows");
12678strings[1619] = str->add(strings[1619]);
12679strings[469] = str->add(strings[469]);
12680strings[2687] = str->add(strings[2687]);
12681strings[2552] = str->add(strings[2552]);
12682strings[469] = str->add(strings[469]);
12683strings[2682] = str->add(strings[2682]);
12684strings[1712] = str->add(strings[1712]);
12685strings[469] = str->add(strings[469]);
12686strings[2671] = str->add(strings[2671]);
12687strings[2862] = str->add("About");
12688strings[469] = str->add(strings[469]);
12689strings[2671] = str->add(strings[2671]);
12690strings[2514] = str->add(strings[2514]);
12691strings[469] = str->add(strings[469]);
12692strings[2680] = str->add(strings[2680]);
12693strings[1713] = str->add(strings[1713]);
12694strings[469] = str->add(strings[469]);
12695strings[2672] = str->add(strings[2672]);
12696strings[1714] = str->add(strings[1714]);
12697strings[469] = str->add(strings[469]);
12698strings[2673] = str->add(strings[2673]);
12699strings[2863] = str->add("Configuration");
12700strings[469] = str->add(strings[469]);
12701strings[2688] = str->add(strings[2688]);
12702strings[1721] = str->add(strings[1721]);
12703strings[469] = str->add(strings[469]);
12704strings[2690] = str->add(strings[2690]);
12705strings[361] = str->add(strings[361]);
12706strings[362] = str->add(strings[362]);
12707strings[361] = str->add(strings[361]);
12708str->del(strings[361]);
12709strings[362] = str->add(strings[362]);
12710str->del(strings[362]);
12711strings[2864] = str->add("resize");
12712strings[2865] = str->add("base/theme/menus");
12713str->del(strings[2864]);
12714strings[64] = str->add(strings[64]);
12715strings[2581] = str->add(strings[2581]);
12716strings[2581] = str->add(strings[2581]);
12717strings[64] = str->add(strings[64]);
12718strings[2866] = str->add("load");
12719strings[2571] = str->add(strings[2571]);
12720strings[2867] = str->add("e,action,show,title");
12721strings[2569] = str->add(strings[2569]);
12722str->del(strings[2866]);
12723strings[2868] = str->add("program,start");
12724strings[2869] = str->add("on");
12725strings[1932] = str->add(strings[1932]);
12726strings[2869] = str->add(strings[2869]);
12727str->del(strings[2867]);
12728str->del(strings[2569]);
12729strings[1841] = str->add(strings[1841]);
12730strings[64] = str->add(strings[64]);
12731strings[1949] = str->add(strings[1949]);
12732strings[64] = str->add(strings[64]);
12733strings[1880] = str->add(strings[1880]);
12734str->del(strings[64]);
12735strings[379] = str->add(strings[379]);
12736strings[2571] = str->add(strings[2571]);
12737strings[2571] = str->add(strings[2571]);
12738strings[2571] = str->add(strings[2571]);
12739strings[64] = str->add(strings[64]);
12740strings[1876] = str->add(strings[1876]);
12741strings[64] = str->add(strings[64]);
12742strings[1874] = str->add(strings[1874]);
12743strings[64] = str->add(strings[64]);
12744strings[2634] = str->add(strings[2634]);
12745strings[2634] = str->add(strings[2634]);
12746strings[2870] = str->add("load");
12747strings[1841] = str->add(strings[1841]);
12748strings[64] = str->add(strings[64]);
12749strings[2584] = str->add(strings[2584]);
12750strings[2584] = str->add(strings[2584]);
12751strings[2870] = str->add(strings[2870]);
12752strings[1841] = str->add(strings[1841]);
12753strings[469] = str->add(strings[469]);
12754strings[2686] = str->add(strings[2686]);
12755strings[2686] = str->add(strings[2686]);
12756strings[2870] = str->add(strings[2870]);
12757strings[469] = str->add(strings[469]);
12758strings[2871] = str->add("images/322");
12759strings[2872] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/322");
12760strings[469] = str->add(strings[469]);
12761strings[2871] = str->add(strings[2871]);
12762strings[1841] = str->add(strings[1841]);
12763strings[2873] = str->add("resize");
12764strings[2873] = str->add(strings[2873]);
12765strings[64] = str->add(strings[64]);
12766strings[2585] = str->add(strings[2585]);
12767strings[2585] = str->add(strings[2585]);
12768strings[64] = str->add(strings[64]);
12769strings[2870] = str->add(strings[2870]);
12770strings[2572] = str->add(strings[2572]);
12771strings[1841] = str->add(strings[1841]);
12772str->del(strings[64]);
12773strings[385] = str->add(strings[385]);
12774strings[2874] = str->add("Sans");
12775strings[2875] = str->add("Edje-Vera");
12776str->del(strings[2874]);
12777str->del(strings[2875]);
12778strings[2876] = str->add("/var/lib/defoma/fontconfig.d/N/NimbusSanL-Regu.pfb");
12779strings[2877] = str->add("/var/lib/defoma/fontconfig.d/L/Loma.ttf");
12780strings[2878] = str->add("/var/lib/defoma/fontconfig.d/P/PadmaaMedium.ttf");
12781strings[2879] = str->add("/var/lib/defoma/fontconfig.d/P/Padmaa.ttf");
12782strings[2880] = str->add("/usr/share/fonts/truetype/ttf-indic-fonts-core/utkal.ttf");
12783strings[2881] = str->add("/var/lib/defoma/fontconfig.d/A/AlArabiya.ttf");
12784strings[2882] = str->add("/var/lib/defoma/fontconfig.d/B/Batang-Regular.ttf");
12785strings[2883] = str->add("/var/lib/defoma/fontconfig.d/D/DejaVu-Sans-Mono.ttf");
12786strings[2884] = str->add("/var/lib/defoma/fontconfig.d/G/Gentium.ttf");
12787strings[2885] = str->add("/var/lib/defoma/fontconfig.d/N/Nakula.ttf");
12788strings[385] = str->add(strings[385]);
12789strings[2572] = str->add(strings[2572]);
12790strings[64] = str->add(strings[64]);
12791strings[2586] = str->add(strings[2586]);
12792strings[2586] = str->add(strings[2586]);
12793strings[2870] = str->add(strings[2870]);
12794strings[1841] = str->add(strings[1841]);
12795strings[64] = str->add(strings[64]);
12796strings[2886] = str->add("images/44");
12797strings[2887] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/44");
12798strings[64] = str->add(strings[64]);
12799strings[2886] = str->add(strings[2886]);
12800strings[64] = str->add(strings[64]);
12801strings[2888] = str->add("images/45");
12802strings[2889] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/45");
12803strings[64] = str->add(strings[64]);
12804strings[2888] = str->add(strings[2888]);
12805strings[64] = str->add(strings[64]);
12806strings[2634] = str->add(strings[2634]);
12807strings[2870] = str->add(strings[2870]);
12808strings[1841] = str->add(strings[1841]);
12809strings[64] = str->add(strings[64]);
12810strings[2584] = str->add(strings[2584]);
12811strings[2870] = str->add(strings[2870]);
12812strings[1841] = str->add(strings[1841]);
12813strings[469] = str->add(strings[469]);
12814strings[2715] = str->add(strings[2715]);
12815strings[2715] = str->add(strings[2715]);
12816strings[2870] = str->add(strings[2870]);
12817strings[469] = str->add(strings[469]);
12818strings[2890] = str->add("images/340");
12819strings[2891] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/340");
12820strings[469] = str->add(strings[469]);
12821strings[2890] = str->add(strings[2890]);
12822strings[1841] = str->add(strings[1841]);
12823strings[2873] = str->add(strings[2873]);
12824strings[2873] = str->add(strings[2873]);
12825strings[64] = str->add(strings[64]);
12826strings[2585] = str->add(strings[2585]);
12827strings[64] = str->add(strings[64]);
12828strings[2870] = str->add(strings[2870]);
12829strings[2231] = str->add(strings[2231]);
12830strings[1841] = str->add(strings[1841]);
12831str->del(strings[64]);
12832strings[385] = str->add(strings[385]);
12833strings[2231] = str->add(strings[2231]);
12834strings[64] = str->add(strings[64]);
12835strings[2586] = str->add(strings[2586]);
12836strings[2870] = str->add(strings[2870]);
12837strings[1841] = str->add(strings[1841]);
12838strings[64] = str->add(strings[64]);
12839strings[2886] = str->add(strings[2886]);
12840strings[64] = str->add(strings[64]);
12841strings[2888] = str->add(strings[2888]);
12842strings[64] = str->add(strings[64]);
12843strings[2583] = str->add(strings[2583]);
12844strings[2583] = str->add(strings[2583]);
12845strings[2870] = str->add(strings[2870]);
12846strings[1841] = str->add(strings[1841]);
12847strings[64] = str->add(strings[64]);
12848strings[2584] = str->add(strings[2584]);
12849strings[2870] = str->add(strings[2870]);
12850strings[1841] = str->add(strings[1841]);
12851strings[469] = str->add(strings[469]);
12852strings[2691] = str->add(strings[2691]);
12853strings[2691] = str->add(strings[2691]);
12854strings[2870] = str->add(strings[2870]);
12855strings[469] = str->add(strings[469]);
12856strings[2892] = str->add("images/326");
12857strings[2893] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/326");
12858strings[469] = str->add(strings[469]);
12859strings[2892] = str->add(strings[2892]);
12860strings[1841] = str->add(strings[1841]);
12861strings[2873] = str->add(strings[2873]);
12862strings[2873] = str->add(strings[2873]);
12863strings[64] = str->add(strings[64]);
12864strings[2585] = str->add(strings[2585]);
12865strings[64] = str->add(strings[64]);
12866strings[2870] = str->add(strings[2870]);
12867strings[2338] = str->add(strings[2338]);
12868strings[1841] = str->add(strings[1841]);
12869str->del(strings[64]);
12870strings[385] = str->add(strings[385]);
12871strings[2338] = str->add(strings[2338]);
12872strings[64] = str->add(strings[64]);
12873strings[2886] = str->add(strings[2886]);
12874strings[64] = str->add(strings[64]);
12875strings[2888] = str->add(strings[2888]);
12876strings[64] = str->add(strings[64]);
12877strings[2582] = str->add(strings[2582]);
12878strings[2582] = str->add(strings[2582]);
12879strings[2870] = str->add(strings[2870]);
12880strings[1841] = str->add(strings[1841]);
12881strings[64] = str->add(strings[64]);
12882strings[2634] = str->add(strings[2634]);
12883strings[2870] = str->add(strings[2870]);
12884strings[1841] = str->add(strings[1841]);
12885strings[64] = str->add(strings[64]);
12886strings[2584] = str->add(strings[2584]);
12887strings[2870] = str->add(strings[2870]);
12888strings[1841] = str->add(strings[1841]);
12889strings[469] = str->add(strings[469]);
12890strings[2687] = str->add(strings[2687]);
12891strings[2687] = str->add(strings[2687]);
12892strings[2870] = str->add(strings[2870]);
12893strings[469] = str->add(strings[469]);
12894strings[2894] = str->add("images/323");
12895strings[2895] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/323");
12896strings[469] = str->add(strings[469]);
12897strings[2894] = str->add(strings[2894]);
12898strings[1841] = str->add(strings[1841]);
12899strings[2873] = str->add(strings[2873]);
12900strings[2873] = str->add(strings[2873]);
12901strings[64] = str->add(strings[64]);
12902strings[2585] = str->add(strings[2585]);
12903strings[64] = str->add(strings[64]);
12904strings[2870] = str->add(strings[2870]);
12905strings[1619] = str->add(strings[1619]);
12906strings[1841] = str->add(strings[1841]);
12907str->del(strings[64]);
12908strings[385] = str->add(strings[385]);
12909strings[1619] = str->add(strings[1619]);
12910strings[64] = str->add(strings[64]);
12911strings[2586] = str->add(strings[2586]);
12912strings[2870] = str->add(strings[2870]);
12913strings[1841] = str->add(strings[1841]);
12914strings[64] = str->add(strings[64]);
12915strings[2886] = str->add(strings[2886]);
12916strings[64] = str->add(strings[64]);
12917strings[2888] = str->add(strings[2888]);
12918strings[64] = str->add(strings[64]);
12919strings[2634] = str->add(strings[2634]);
12920strings[2870] = str->add(strings[2870]);
12921strings[1841] = str->add(strings[1841]);
12922strings[64] = str->add(strings[64]);
12923strings[2584] = str->add(strings[2584]);
12924strings[2870] = str->add(strings[2870]);
12925strings[1841] = str->add(strings[1841]);
12926strings[469] = str->add(strings[469]);
12927strings[2682] = str->add(strings[2682]);
12928strings[2682] = str->add(strings[2682]);
12929strings[2870] = str->add(strings[2870]);
12930strings[469] = str->add(strings[469]);
12931strings[2896] = str->add("images/319");
12932strings[2897] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/319");
12933strings[469] = str->add(strings[469]);
12934strings[2896] = str->add(strings[2896]);
12935strings[1841] = str->add(strings[1841]);
12936strings[2873] = str->add(strings[2873]);
12937strings[2873] = str->add(strings[2873]);
12938strings[64] = str->add(strings[64]);
12939strings[2585] = str->add(strings[2585]);
12940strings[64] = str->add(strings[64]);
12941strings[2870] = str->add(strings[2870]);
12942strings[2552] = str->add(strings[2552]);
12943strings[1841] = str->add(strings[1841]);
12944str->del(strings[64]);
12945strings[385] = str->add(strings[385]);
12946strings[2552] = str->add(strings[2552]);
12947strings[64] = str->add(strings[64]);
12948strings[2586] = str->add(strings[2586]);
12949strings[2870] = str->add(strings[2870]);
12950strings[1841] = str->add(strings[1841]);
12951strings[64] = str->add(strings[64]);
12952strings[2886] = str->add(strings[2886]);
12953strings[64] = str->add(strings[64]);
12954strings[2888] = str->add(strings[2888]);
12955strings[64] = str->add(strings[64]);
12956strings[2582] = str->add(strings[2582]);
12957strings[2870] = str->add(strings[2870]);
12958strings[1841] = str->add(strings[1841]);
12959strings[64] = str->add(strings[64]);
12960strings[2634] = str->add(strings[2634]);
12961strings[2870] = str->add(strings[2870]);
12962strings[1841] = str->add(strings[1841]);
12963strings[64] = str->add(strings[64]);
12964strings[2584] = str->add(strings[2584]);
12965strings[2870] = str->add(strings[2870]);
12966strings[1841] = str->add(strings[1841]);
12967strings[469] = str->add(strings[469]);
12968strings[2671] = str->add(strings[2671]);
12969strings[2671] = str->add(strings[2671]);
12970strings[2870] = str->add(strings[2870]);
12971strings[469] = str->add(strings[469]);
12972strings[2898] = str->add("images/314");
12973strings[2899] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/314");
12974strings[469] = str->add(strings[469]);
12975strings[2898] = str->add(strings[2898]);
12976strings[469] = str->add(strings[469]);
12977strings[2900] = str->add("images/315");
12978strings[2901] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/315");
12979strings[469] = str->add(strings[469]);
12980strings[2900] = str->add(strings[2900]);
12981strings[1841] = str->add(strings[1841]);
12982strings[2873] = str->add(strings[2873]);
12983strings[2873] = str->add(strings[2873]);
12984strings[64] = str->add(strings[64]);
12985strings[2585] = str->add(strings[2585]);
12986strings[64] = str->add(strings[64]);
12987strings[2870] = str->add(strings[2870]);
12988strings[1712] = str->add(strings[1712]);
12989strings[1841] = str->add(strings[1841]);
12990str->del(strings[64]);
12991strings[385] = str->add(strings[385]);
12992strings[1712] = str->add(strings[1712]);
12993strings[64] = str->add(strings[64]);
12994strings[2586] = str->add(strings[2586]);
12995strings[2870] = str->add(strings[2870]);
12996strings[1841] = str->add(strings[1841]);
12997strings[64] = str->add(strings[64]);
12998strings[2886] = str->add(strings[2886]);
12999strings[64] = str->add(strings[64]);
13000strings[2888] = str->add(strings[2888]);
13001strings[64] = str->add(strings[64]);
13002strings[2582] = str->add(strings[2582]);
13003strings[2870] = str->add(strings[2870]);
13004strings[1841] = str->add(strings[1841]);
13005strings[64] = str->add(strings[64]);
13006strings[2634] = str->add(strings[2634]);
13007strings[2870] = str->add(strings[2870]);
13008strings[1841] = str->add(strings[1841]);
13009strings[64] = str->add(strings[64]);
13010strings[2584] = str->add(strings[2584]);
13011strings[2870] = str->add(strings[2870]);
13012strings[1841] = str->add(strings[1841]);
13013strings[469] = str->add(strings[469]);
13014strings[2688] = str->add(strings[2688]);
13015strings[2688] = str->add(strings[2688]);
13016strings[2870] = str->add(strings[2870]);
13017strings[469] = str->add(strings[469]);
13018strings[2902] = str->add("images/324");
13019strings[2903] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/324");
13020strings[469] = str->add(strings[469]);
13021strings[2902] = str->add(strings[2902]);
13022strings[1841] = str->add(strings[1841]);
13023strings[2873] = str->add(strings[2873]);
13024strings[2873] = str->add(strings[2873]);
13025strings[64] = str->add(strings[64]);
13026strings[2585] = str->add(strings[2585]);
13027strings[64] = str->add(strings[64]);
13028strings[2870] = str->add(strings[2870]);
13029strings[2863] = str->add(strings[2863]);
13030strings[1841] = str->add(strings[1841]);
13031str->del(strings[64]);
13032strings[385] = str->add(strings[385]);
13033strings[2863] = str->add(strings[2863]);
13034strings[64] = str->add(strings[64]);
13035strings[2586] = str->add(strings[2586]);
13036strings[2870] = str->add(strings[2870]);
13037strings[1841] = str->add(strings[1841]);
13038strings[64] = str->add(strings[64]);
13039strings[2886] = str->add(strings[2886]);
13040strings[64] = str->add(strings[64]);
13041strings[2888] = str->add(strings[2888]);
13042strings[64] = str->add(strings[64]);
13043strings[2582] = str->add(strings[2582]);
13044strings[2870] = str->add(strings[2870]);
13045strings[1841] = str->add(strings[1841]);
13046strings[64] = str->add(strings[64]);
13047strings[2634] = str->add(strings[2634]);
13048strings[2870] = str->add(strings[2870]);
13049strings[1841] = str->add(strings[1841]);
13050strings[64] = str->add(strings[64]);
13051strings[2584] = str->add(strings[2584]);
13052strings[2870] = str->add(strings[2870]);
13053strings[1841] = str->add(strings[1841]);
13054strings[469] = str->add(strings[469]);
13055strings[2690] = str->add(strings[2690]);
13056strings[2690] = str->add(strings[2690]);
13057strings[2870] = str->add(strings[2870]);
13058strings[469] = str->add(strings[469]);
13059strings[2904] = str->add("images/327");
13060strings[2905] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/327");
13061strings[469] = str->add(strings[469]);
13062strings[2904] = str->add(strings[2904]);
13063strings[1841] = str->add(strings[1841]);
13064strings[2873] = str->add(strings[2873]);
13065strings[2873] = str->add(strings[2873]);
13066strings[64] = str->add(strings[64]);
13067strings[2585] = str->add(strings[2585]);
13068strings[64] = str->add(strings[64]);
13069strings[2870] = str->add(strings[2870]);
13070strings[1721] = str->add(strings[1721]);
13071strings[1841] = str->add(strings[1841]);
13072str->del(strings[64]);
13073strings[385] = str->add(strings[385]);
13074strings[1721] = str->add(strings[1721]);
13075strings[64] = str->add(strings[64]);
13076strings[2586] = str->add(strings[2586]);
13077strings[2870] = str->add(strings[2870]);
13078strings[1841] = str->add(strings[1841]);
13079strings[64] = str->add(strings[64]);
13080strings[2886] = str->add(strings[2886]);
13081strings[64] = str->add(strings[64]);
13082strings[2888] = str->add(strings[2888]);
13083strings[2873] = str->add(strings[2873]);
13084strings[2873] = str->add(strings[2873]);
13085strings[2873] = str->add(strings[2873]);
13086strings[2873] = str->add(strings[2873]);
13087strings[2873] = str->add(strings[2873]);
13088strings[2873] = str->add(strings[2873]);
13089strings[2873] = str->add(strings[2873]);
13090strings[2873] = str->add(strings[2873]);
13091strings[2873] = str->add(strings[2873]);
13092strings[2873] = str->add(strings[2873]);
13093strings[2873] = str->add(strings[2873]);
13094strings[2873] = str->add(strings[2873]);
13095strings[2873] = str->add(strings[2873]);
13096strings[2873] = str->add(strings[2873]);
13097strings[2873] = str->add(strings[2873]);
13098strings[2873] = str->add(strings[2873]);
13099strings[2873] = str->add(strings[2873]);
13100strings[2873] = str->add(strings[2873]);
13101strings[2873] = str->add(strings[2873]);
13102strings[2873] = str->add(strings[2873]);
13103strings[2873] = str->add(strings[2873]);
13104strings[2873] = str->add(strings[2873]);
13105strings[2873] = str->add(strings[2873]);
13106strings[2873] = str->add(strings[2873]);
13107strings[2873] = str->add(strings[2873]);
13108strings[2873] = str->add(strings[2873]);
13109strings[2873] = str->add(strings[2873]);
13110strings[2873] = str->add(strings[2873]);
13111strings[2873] = str->add(strings[2873]);
13112strings[2873] = str->add(strings[2873]);
13113strings[2873] = str->add(strings[2873]);
13114strings[2873] = str->add(strings[2873]);
13115strings[2873] = str->add(strings[2873]);
13116strings[2873] = str->add(strings[2873]);
13117strings[2873] = str->add(strings[2873]);
13118strings[2873] = str->add(strings[2873]);
13119strings[2906] = str->add("e,state,focused");
13120strings[2569] = str->add(strings[2569]);
13121strings[167] = str->add(strings[167]);
13122strings[1946] = str->add(strings[1946]);
13123strings[167] = str->add(strings[167]);
13124strings[1946] = str->add(strings[1946]);
13125str->del(strings[2568]);
13126str->del(strings[2569]);
13127str->del(strings[2570]);
13128str->del(strings[2569]);
13129str->del(strings[167]);
13130str->del(strings[377]);
13131str->del(strings[2868]);
13132str->del(strings[2869]);
13133str->del(strings[1932]);
13134str->del(strings[2869]);
13135str->del(strings[1841]);
13136str->del(strings[2870]);
13137str->del(strings[1841]);
13138str->del(strings[2870]);
13139str->del(strings[1841]);
13140str->del(strings[2870]);
13141str->del(strings[1841]);
13142str->del(strings[2873]);
13143str->del(strings[2873]);
13144str->del(strings[2870]);
13145str->del(strings[1841]);
13146str->del(strings[2870]);
13147str->del(strings[1841]);
13148str->del(strings[2870]);
13149str->del(strings[1841]);
13150str->del(strings[2870]);
13151str->del(strings[1841]);
13152str->del(strings[2870]);
13153str->del(strings[1841]);
13154str->del(strings[2873]);
13155str->del(strings[2873]);
13156str->del(strings[2870]);
13157str->del(strings[1841]);
13158str->del(strings[2870]);
13159str->del(strings[1841]);
13160str->del(strings[2870]);
13161str->del(strings[1841]);
13162str->del(strings[2870]);
13163str->del(strings[1841]);
13164str->del(strings[2870]);
13165str->del(strings[1841]);
13166str->del(strings[2873]);
13167str->del(strings[2873]);
13168str->del(strings[2870]);
13169str->del(strings[1841]);
13170str->del(strings[2870]);
13171str->del(strings[1841]);
13172str->del(strings[2870]);
13173str->del(strings[1841]);
13174str->del(strings[2870]);
13175str->del(strings[1841]);
13176str->del(strings[2870]);
13177str->del(strings[1841]);
13178str->del(strings[2873]);
13179str->del(strings[2873]);
13180str->del(strings[2870]);
13181str->del(strings[1841]);
13182str->del(strings[2870]);
13183str->del(strings[1841]);
13184str->del(strings[2870]);
13185str->del(strings[1841]);
13186str->del(strings[2870]);
13187str->del(strings[1841]);
13188str->del(strings[2870]);
13189str->del(strings[1841]);
13190str->del(strings[2873]);
13191str->del(strings[2873]);
13192str->del(strings[2870]);
13193str->del(strings[1841]);
13194str->del(strings[2870]);
13195str->del(strings[1841]);
13196str->del(strings[2870]);
13197str->del(strings[1841]);
13198str->del(strings[2870]);
13199str->del(strings[1841]);
13200str->del(strings[2870]);
13201str->del(strings[1841]);
13202str->del(strings[2870]);
13203str->del(strings[1841]);
13204str->del(strings[2873]);
13205str->del(strings[2873]);
13206str->del(strings[2870]);
13207str->del(strings[1841]);
13208str->del(strings[2870]);
13209str->del(strings[1841]);
13210str->del(strings[2870]);
13211str->del(strings[1841]);
13212str->del(strings[2870]);
13213str->del(strings[1841]);
13214str->del(strings[2870]);
13215str->del(strings[1841]);
13216str->del(strings[2870]);
13217str->del(strings[1841]);
13218str->del(strings[2873]);
13219str->del(strings[2873]);
13220str->del(strings[2870]);
13221str->del(strings[1841]);
13222str->del(strings[2870]);
13223str->del(strings[1841]);
13224str->del(strings[2870]);
13225str->del(strings[1841]);
13226str->del(strings[2870]);
13227str->del(strings[1841]);
13228str->del(strings[2870]);
13229str->del(strings[1841]);
13230str->del(strings[2870]);
13231str->del(strings[1841]);
13232str->del(strings[2873]);
13233str->del(strings[2873]);
13234str->del(strings[2870]);
13235str->del(strings[1841]);
13236str->del(strings[2870]);
13237str->del(strings[1841]);
13238str->del(strings[2873]);
13239str->del(strings[2873]);
13240str->del(strings[2873]);
13241str->del(strings[2873]);
13242str->del(strings[2873]);
13243str->del(strings[2873]);
13244str->del(strings[2873]);
13245str->del(strings[2873]);
13246str->del(strings[2873]);
13247str->del(strings[2873]);
13248str->del(strings[2873]);
13249str->del(strings[2873]);
13250str->del(strings[2873]);
13251str->del(strings[2873]);
13252str->del(strings[2873]);
13253str->del(strings[2873]);
13254str->del(strings[2873]);
13255str->del(strings[2873]);
13256str->del(strings[2873]);
13257str->del(strings[2873]);
13258str->del(strings[2873]);
13259str->del(strings[2873]);
13260str->del(strings[2873]);
13261str->del(strings[2873]);
13262str->del(strings[2873]);
13263str->del(strings[2873]);
13264str->del(strings[2873]);
13265str->del(strings[2873]);
13266str->del(strings[2873]);
13267str->del(strings[2873]);
13268str->del(strings[2873]);
13269str->del(strings[2873]);
13270str->del(strings[2873]);
13271str->del(strings[2873]);
13272str->del(strings[2873]);
13273str->del(strings[2873]);
13274strings[2907] = str->add("program,start");
13275strings[2908] = str->add("on");
13276str->del(strings[2906]);
13277str->del(strings[2569]);
13278str->del(strings[167]);
13279str->del(strings[1946]);
13280str->del(strings[167]);
13281str->del(strings[1946]);
13282str->del(strings[2907]);
13283str->del(strings[2908]);
13284strings[2909] = str->add("e,action,mouse,move");
13285strings[2910] = str->add("e");
13286strings[2909] = str->add(strings[2909]);
13287strings[2910] = str->add(strings[2910]);
13288strings[169] = str->add(strings[169]);
13289strings[377] = str->add(strings[377]);
13290strings[159] = str->add(strings[159]);
13291strings[377] = str->add(strings[377]);
13292strings[169] = str->add(strings[169]);
13293strings[1946] = str->add(strings[1946]);
13294strings[159] = str->add(strings[159]);
13295strings[1946] = str->add(strings[1946]);
13296strings[169] = str->add(strings[169]);
13297strings[1946] = str->add(strings[1946]);
13298strings[159] = str->add(strings[159]);
13299strings[1946] = str->add(strings[1946]);
13300strings[1740] = str->add(strings[1740]);
13301strings[377] = str->add(strings[377]);
13302strings[1740] = str->add(strings[1740]);
13303strings[1946] = str->add(strings[1946]);
13304strings[1740] = str->add(strings[1740]);
13305strings[1946] = str->add(strings[1946]);
13306strings[2909] = str->add(strings[2909]);
13307strings[2910] = str->add(strings[2910]);
13308strings[2911] = str->add("e,action,mouse,up");
13309strings[2910] = str->add(strings[2910]);
13310str->del(strings[2909]);
13311str->del(strings[2910]);
13312str->del(strings[2909]);
13313str->del(strings[2910]);
13314str->del(strings[169]);
13315str->del(strings[377]);
13316str->del(strings[159]);
13317str->del(strings[377]);
13318str->del(strings[169]);
13319str->del(strings[1946]);
13320str->del(strings[159]);
13321str->del(strings[1946]);
13322str->del(strings[169]);
13323str->del(strings[1946]);
13324str->del(strings[159]);
13325str->del(strings[1946]);
13326str->del(strings[1740]);
13327str->del(strings[377]);
13328str->del(strings[1740]);
13329str->del(strings[1946]);
13330str->del(strings[1740]);
13331str->del(strings[1946]);
13332str->del(strings[2909]);
13333str->del(strings[2910]);
13334str->del(strings[2911]);
13335str->del(strings[2910]);
13336str->del(strings[2571]);
13337strings[2571] = str->add(strings[2571]);
13338str->del(strings[2571]);
13339strings[2571] = str->add(strings[2571]);
13340strings[2912] = str->add("resize");
13341strings[2572] = str->add(strings[2572]);
13342strings[2572] = str->add(strings[2572]);
13343strings[64] = str->add(strings[64]);
13344strings[2913] = str->add("images/46");
13345strings[2914] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/46");
13346strings[64] = str->add(strings[64]);
13347strings[2913] = str->add(strings[2913]);
13348strings[2912] = str->add(strings[2912]);
13349strings[2231] = str->add(strings[2231]);
13350strings[2231] = str->add(strings[2231]);
13351strings[64] = str->add(strings[64]);
13352strings[2913] = str->add(strings[2913]);
13353strings[2912] = str->add(strings[2912]);
13354strings[2338] = str->add(strings[2338]);
13355strings[2338] = str->add(strings[2338]);
13356strings[64] = str->add(strings[64]);
13357strings[2915] = str->add("images/43");
13358strings[2916] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/43");
13359strings[64] = str->add(strings[64]);
13360strings[2915] = str->add(strings[2915]);
13361strings[2912] = str->add(strings[2912]);
13362strings[1619] = str->add(strings[1619]);
13363strings[1619] = str->add(strings[1619]);
13364strings[64] = str->add(strings[64]);
13365strings[2913] = str->add(strings[2913]);
13366strings[2912] = str->add(strings[2912]);
13367strings[2552] = str->add(strings[2552]);
13368strings[2552] = str->add(strings[2552]);
13369strings[64] = str->add(strings[64]);
13370strings[2913] = str->add(strings[2913]);
13371strings[64] = str->add(strings[64]);
13372strings[2915] = str->add(strings[2915]);
13373strings[2912] = str->add(strings[2912]);
13374strings[1712] = str->add(strings[1712]);
13375strings[1712] = str->add(strings[1712]);
13376strings[64] = str->add(strings[64]);
13377strings[2913] = str->add(strings[2913]);
13378strings[64] = str->add(strings[64]);
13379strings[2915] = str->add(strings[2915]);
13380strings[2912] = str->add(strings[2912]);
13381strings[2863] = str->add(strings[2863]);
13382strings[2863] = str->add(strings[2863]);
13383strings[64] = str->add(strings[64]);
13384strings[2913] = str->add(strings[2913]);
13385strings[64] = str->add(strings[64]);
13386strings[2915] = str->add(strings[2915]);
13387strings[2912] = str->add(strings[2912]);
13388strings[1721] = str->add(strings[1721]);
13389strings[1721] = str->add(strings[1721]);
13390strings[64] = str->add(strings[64]);
13391strings[2913] = str->add(strings[2913]);
13392str->del(strings[2912]);
13393str->del(strings[2912]);
13394str->del(strings[2912]);
13395str->del(strings[2912]);
13396str->del(strings[2912]);
13397str->del(strings[2912]);
13398str->del(strings[2912]);
13399str->del(strings[2912]);
13400str->del(strings[7]);
13401str->del(strings[2561]);
13402strings[7] = str->add(strings[7]);
13403strings[2915] = str->add(strings[2915]);
13404strings[2917] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/43");
13405strings[7] = str->add(strings[7]);
13406strings[2915] = str->add(strings[2915]);
13407strings[2918] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_manipulation/linux-gnu-x86_64/module.so");
13408strings[2918] = str->add(strings[2918]);
13409strings[15] = str->add(strings[15]);
13410strings[2919] = str->add("/usr/devel/lib/enlightenment/modules/conf_window_manipulation");
13411str->del(strings[2918]);
13412strings[2920] = str->add("window_manipulation");
13413strings[197] = str->add(strings[197]);
13414strings[2921] = str->add("enlightenment/window_manipulation");
13415str->del(strings[15]);
13416str->del(strings[7]);
13417str->del(strings[2915]);
13418strings[7] = str->add(strings[7]);
13419strings[2886] = str->add(strings[2886]);
13420strings[2922] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/44");
13421strings[7] = str->add(strings[7]);
13422strings[2886] = str->add(strings[2886]);
13423strings[2923] = str->add("/usr/devel/lib/enlightenment/modules/conf_winlist/linux-gnu-x86_64/module.so");
13424strings[2923] = str->add(strings[2923]);
13425strings[14] = str->add(strings[14]);
13426strings[2924] = str->add("/usr/devel/lib/enlightenment/modules/conf_winlist");
13427str->del(strings[2923]);
13428strings[2925] = str->add("window_list");
13429strings[2926] = str->add("Window List");
13430strings[2269] = str->add(strings[2269]);
13431str->del(strings[14]);
13432str->del(strings[7]);
13433str->del(strings[2886]);
13434strings[7] = str->add(strings[7]);
13435strings[2888] = str->add(strings[2888]);
13436strings[2927] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/45");
13437strings[7] = str->add(strings[7]);
13438strings[2888] = str->add(strings[2888]);
13439strings[2928] = str->add("/usr/devel/lib/enlightenment/modules/conf_engine/linux-gnu-x86_64/module.so");
13440strings[2928] = str->add(strings[2928]);
13441strings[13] = str->add(strings[13]);
13442strings[2929] = str->add("/usr/devel/lib/enlightenment/modules/conf_engine");
13443str->del(strings[2928]);
13444strings[2930] = str->add("engine");
13445strings[2931] = str->add("Engine");
13446strings[2932] = str->add("enlightenment/engine");
13447str->del(strings[13]);
13448strings[1932] = str->add(strings[1932]);
13449strings[2933] = str->add("on");
13450str->del(strings[1932]);
13451str->del(strings[2933]);
13452str->del(strings[7]);
13453str->del(strings[2888]);
13454strings[7] = str->add(strings[7]);
13455strings[2913] = str->add(strings[2913]);
13456strings[2934] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/46");
13457strings[7] = str->add(strings[7]);
13458strings[2913] = str->add(strings[2913]);
13459strings[2935] = str->add("/usr/devel/lib/enlightenment/modules/fileman/linux-gnu-x86_64/module.so");
13460strings[2935] = str->add(strings[2935]);
13461strings[12] = str->add(strings[12]);
13462strings[2936] = str->add("/usr/devel/lib/enlightenment/modules/fileman");
13463str->del(strings[2935]);
13464strings[12] = str->add(strings[12]);
13465strings[2408] = str->add(strings[2408]);
13466strings[2409] = str->add(strings[2409]);
13467strings[2408] = str->add(strings[2408]);
13468strings[12] = str->add(strings[12]);
13469strings[2937] = str->add("base/theme/fileman");
13470strings[64] = str->add(strings[64]);
13471strings[2780] = str->add(strings[2780]);
13472str->del(strings[64]);
13473str->del(strings[2780]);
13474strings[469] = str->add(strings[469]);
13475strings[2780] = str->add(strings[2780]);
13476strings[2780] = str->add(strings[2780]);
13477strings[2938] = str->add("load");
13478strings[1841] = str->add(strings[1841]);
13479strings[64] = str->add(strings[64]);
13480strings[2781] = str->add(strings[2781]);
13481str->del(strings[64]);
13482str->del(strings[2781]);
13483strings[469] = str->add(strings[469]);
13484strings[2781] = str->add(strings[2781]);
13485strings[2781] = str->add(strings[2781]);
13486strings[2938] = str->add(strings[2938]);
13487strings[1841] = str->add(strings[1841]);
13488strings[64] = str->add(strings[64]);
13489strings[2779] = str->add(strings[2779]);
13490str->del(strings[64]);
13491str->del(strings[2779]);
13492strings[469] = str->add(strings[469]);
13493strings[2779] = str->add(strings[2779]);
13494strings[2779] = str->add(strings[2779]);
13495strings[469] = str->add(strings[469]);
13496strings[469] = str->add(strings[469]);
13497strings[2938] = str->add(strings[2938]);
13498strings[1841] = str->add(strings[1841]);
13499strings[64] = str->add(strings[64]);
13500strings[2788] = str->add(strings[2788]);
13501str->del(strings[64]);
13502str->del(strings[2788]);
13503strings[469] = str->add(strings[469]);
13504strings[2788] = str->add(strings[2788]);
13505strings[2788] = str->add(strings[2788]);
13506strings[2938] = str->add(strings[2938]);
13507strings[2939] = str->add("desktop");
13508str->del(strings[2938]);
13509str->del(strings[1841]);
13510str->del(strings[469]);
13511str->del(strings[2780]);
13512strings[64] = str->add(strings[64]);
13513strings[2786] = str->add(strings[2786]);
13514str->del(strings[64]);
13515str->del(strings[2786]);
13516strings[469] = str->add(strings[469]);
13517strings[2786] = str->add(strings[2786]);
13518strings[2786] = str->add(strings[2786]);
13519strings[2938] = str->add(strings[2938]);
13520str->del(strings[2938]);
13521str->del(strings[1841]);
13522str->del(strings[469]);
13523str->del(strings[2781]);
13524strings[64] = str->add(strings[64]);
13525strings[2787] = str->add(strings[2787]);
13526str->del(strings[64]);
13527str->del(strings[2787]);
13528strings[469] = str->add(strings[469]);
13529strings[2787] = str->add(strings[2787]);
13530strings[2787] = str->add(strings[2787]);
13531strings[2938] = str->add(strings[2938]);
13532str->del(strings[2938]);
13533str->del(strings[1841]);
13534str->del(strings[469]);
13535str->del(strings[2779]);
13536strings[64] = str->add(strings[64]);
13537strings[2785] = str->add(strings[2785]);
13538str->del(strings[64]);
13539str->del(strings[2785]);
13540strings[469] = str->add(strings[469]);
13541strings[2785] = str->add(strings[2785]);
13542strings[2785] = str->add(strings[2785]);
13543strings[2938] = str->add(strings[2938]);
13544strings[2940] = str->add("dir_changed");
13545strings[2941] = str->add("dir_deleted");
13546strings[2942] = str->add("selected");
13547strings[2943] = str->add("selection_change");
13548strings[2944] = str->add("base/theme/widgets");
13549strings[64] = str->add(strings[64]);
13550strings[2614] = str->add(strings[2614]);
13551strings[2614] = str->add(strings[2614]);
13552strings[2938] = str->add(strings[2938]);
13553strings[2945] = str->add("drag*");
13554strings[2946] = str->add("e.dragable.vbar");
13555strings[2945] = str->add(strings[2945]);
13556strings[2947] = str->add("e.dragable.hbar");
13557str->del(strings[2938]);
13558str->del(strings[64]);
13559str->del(strings[2614]);
13560strings[64] = str->add(strings[64]);
13561strings[2782] = str->add(strings[2782]);
13562str->del(strings[64]);
13563str->del(strings[2782]);
13564strings[469] = str->add(strings[469]);
13565strings[2782] = str->add(strings[2782]);
13566strings[2782] = str->add(strings[2782]);
13567strings[2938] = str->add(strings[2938]);
13568strings[2948] = str->add("changed");
13569strings[2949] = str->add("pan_changed");
13570strings[469] = str->add(strings[469]);
13571strings[2950] = str->add("images/422");
13572strings[2951] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/422");
13573strings[469] = str->add(strings[469]);
13574strings[2950] = str->add(strings[2950]);
13575strings[469] = str->add(strings[469]);
13576strings[2952] = str->add("images/420");
13577strings[2953] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/420");
13578strings[469] = str->add(strings[469]);
13579strings[2952] = str->add(strings[2952]);
13580strings[469] = str->add(strings[469]);
13581strings[2954] = str->add("images/433");
13582strings[2955] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/433");
13583strings[469] = str->add(strings[469]);
13584strings[2954] = str->add(strings[2954]);
13585strings[469] = str->add(strings[469]);
13586strings[2956] = str->add("images/430");
13587strings[2957] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/430");
13588strings[469] = str->add(strings[469]);
13589strings[2956] = str->add(strings[2956]);
13590strings[469] = str->add(strings[469]);
13591strings[2958] = str->add("images/435");
13592strings[2959] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/435");
13593strings[469] = str->add(strings[469]);
13594strings[2958] = str->add(strings[2958]);
13595strings[469] = str->add(strings[469]);
13596strings[2960] = str->add("images/424");
13597strings[2961] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/424");
13598strings[469] = str->add(strings[469]);
13599strings[2960] = str->add(strings[2960]);
13600strings[469] = str->add(strings[469]);
13601strings[2962] = str->add("images/426");
13602strings[2963] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/426");
13603strings[469] = str->add(strings[469]);
13604strings[2962] = str->add(strings[2962]);
13605strings[469] = str->add(strings[469]);
13606strings[2964] = str->add("images/432");
13607strings[2965] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/432");
13608strings[469] = str->add(strings[469]);
13609strings[2964] = str->add(strings[2964]);
13610strings[469] = str->add(strings[469]);
13611strings[2966] = str->add("images/428");
13612strings[2967] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/428");
13613strings[469] = str->add(strings[469]);
13614strings[2966] = str->add(strings[2966]);
13615strings[469] = str->add(strings[469]);
13616strings[2968] = str->add("images/434");
13617strings[2969] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/434");
13618strings[469] = str->add(strings[469]);
13619strings[2968] = str->add(strings[2968]);
13620strings[2970] = str->add("resize");
13621strings[2970] = str->add(strings[2970]);
13622strings[1841] = str->add(strings[1841]);
13623strings[2971] = str->add("/home/cedric/Desktop");
13624strings[2939] = str->add(strings[2939]);
13625strings[347] = str->add(strings[347]);
13626strings[2972] = str->add("e,state,typebuf,stop");
13627strings[2973] = str->add("e");
13628strings[2974] = str->add("e,action,hide,hbar");
13629strings[2973] = str->add(strings[2973]);
13630str->del(strings[2938]);
13631str->del(strings[2970]);
13632str->del(strings[1841]);
13633strings[2975] = str->add("program,start");
13634strings[2976] = str->add("sb_hbar_hide");
13635strings[1932] = str->add(strings[1932]);
13636strings[2976] = str->add(strings[2976]);
13637str->del(strings[2974]);
13638str->del(strings[2973]);
13639strings[2970] = str->add(strings[2970]);
13640strings[2977] = str->add("e,action,hide,vbar");
13641strings[2973] = str->add(strings[2973]);
13642str->del(strings[2975]);
13643str->del(strings[2976]);
13644str->del(strings[1932]);
13645str->del(strings[2976]);
13646strings[2978] = str->add("program,start");
13647strings[2979] = str->add("sb_vbar_hide");
13648strings[1932] = str->add(strings[1932]);
13649strings[2979] = str->add(strings[2979]);
13650str->del(strings[2977]);
13651str->del(strings[2973]);
13652strings[2970] = str->add(strings[2970]);
13653str->del(strings[12]);
13654str->del(strings[2938]);
13655str->del(strings[2938]);
13656str->del(strings[2938]);
13657str->del(strings[2938]);
13658str->del(strings[2970]);
13659str->del(strings[2972]);
13660str->del(strings[2973]);
13661str->del(strings[2970]);
13662str->del(strings[2978]);
13663str->del(strings[2979]);
13664str->del(strings[1932]);
13665str->del(strings[2979]);
13666str->del(strings[2970]);
13667strings[2980] = str->add("e,action,mouse,move");
13668strings[2981] = str->add("e");
13669strings[2980] = str->add(strings[2980]);
13670strings[2981] = str->add(strings[2981]);
13671strings[2980] = str->add(strings[2980]);
13672strings[2981] = str->add(strings[2981]);
13673strings[2980] = str->add(strings[2980]);
13674strings[2981] = str->add(strings[2981]);
13675strings[2980] = str->add(strings[2980]);
13676strings[2981] = str->add(strings[2981]);
13677strings[2980] = str->add(strings[2980]);
13678strings[2981] = str->add(strings[2981]);
13679str->del(strings[2980]);
13680str->del(strings[2981]);
13681str->del(strings[2980]);
13682str->del(strings[2981]);
13683str->del(strings[2980]);
13684str->del(strings[2981]);
13685str->del(strings[2980]);
13686str->del(strings[2981]);
13687str->del(strings[2980]);
13688str->del(strings[2981]);
13689str->del(strings[2980]);
13690str->del(strings[2981]);
13691strings[2982] = str->add("e,action,mouse,move");
13692strings[2983] = str->add("e");
13693str->del(strings[2982]);
13694str->del(strings[2983]);
13695strings[2984] = str->add("e,action,mouse,move");
13696strings[2985] = str->add("e");
13697str->del(strings[2984]);
13698str->del(strings[2985]);
13699strings[469] = str->add(strings[469]);
13700strings[2986] = str->add("images/251");
13701strings[2987] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/251");
13702strings[469] = str->add(strings[469]);
13703strings[2986] = str->add(strings[2986]);
13704strings[469] = str->add(strings[469]);
13705strings[2192] = str->add(strings[2192]);
13706strings[469] = str->add(strings[469]);
13707strings[2192] = str->add(strings[2192]);
13708strings[469] = str->add(strings[469]);
13709strings[2192] = str->add(strings[2192]);
13710strings[469] = str->add(strings[469]);
13711strings[2192] = str->add(strings[2192]);
13712strings[469] = str->add(strings[469]);
13713strings[2190] = str->add(strings[2190]);
13714strings[469] = str->add(strings[469]);
13715strings[2190] = str->add(strings[2190]);
13716strings[469] = str->add(strings[469]);
13717strings[2190] = str->add(strings[2190]);
13718strings[469] = str->add(strings[469]);
13719strings[2190] = str->add(strings[2190]);
13720strings[469] = str->add(strings[469]);
13721strings[2198] = str->add(strings[2198]);
13722strings[469] = str->add(strings[469]);
13723strings[2198] = str->add(strings[2198]);
13724strings[469] = str->add(strings[469]);
13725strings[2198] = str->add(strings[2198]);
13726strings[469] = str->add(strings[469]);
13727strings[2198] = str->add(strings[2198]);
13728strings[469] = str->add(strings[469]);
13729strings[2196] = str->add(strings[2196]);
13730strings[469] = str->add(strings[469]);
13731strings[2196] = str->add(strings[2196]);
13732strings[469] = str->add(strings[469]);
13733strings[2196] = str->add(strings[2196]);
13734strings[469] = str->add(strings[469]);
13735strings[2196] = str->add(strings[2196]);
13736strings[469] = str->add(strings[469]);
13737strings[2986] = str->add(strings[2986]);
13738strings[469] = str->add(strings[469]);
13739strings[2192] = str->add(strings[2192]);
13740strings[469] = str->add(strings[469]);
13741strings[2192] = str->add(strings[2192]);
13742strings[469] = str->add(strings[469]);
13743strings[2192] = str->add(strings[2192]);
13744strings[469] = str->add(strings[469]);
13745strings[2192] = str->add(strings[2192]);
13746strings[469] = str->add(strings[469]);
13747strings[2190] = str->add(strings[2190]);
13748strings[469] = str->add(strings[469]);
13749strings[2190] = str->add(strings[2190]);
13750strings[469] = str->add(strings[469]);
13751strings[2190] = str->add(strings[2190]);
13752strings[469] = str->add(strings[469]);
13753strings[2190] = str->add(strings[2190]);
13754strings[469] = str->add(strings[469]);
13755strings[2198] = str->add(strings[2198]);
13756strings[469] = str->add(strings[469]);
13757strings[2198] = str->add(strings[2198]);
13758strings[469] = str->add(strings[469]);
13759strings[2198] = str->add(strings[2198]);
13760strings[469] = str->add(strings[469]);
13761strings[2198] = str->add(strings[2198]);
13762strings[469] = str->add(strings[469]);
13763strings[2196] = str->add(strings[2196]);
13764strings[469] = str->add(strings[469]);
13765strings[2196] = str->add(strings[2196]);
13766strings[469] = str->add(strings[469]);
13767strings[2196] = str->add(strings[2196]);
13768strings[469] = str->add(strings[469]);
13769strings[2196] = str->add(strings[2196]);
13770strings[469] = str->add(strings[469]);
13771strings[2988] = str->add("images/448");
13772strings[2989] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/448");
13773strings[469] = str->add(strings[469]);
13774strings[2988] = str->add(strings[2988]);
13775str->del(strings[7]);
13776str->del(strings[2913]);
13777strings[7] = str->add(strings[7]);
13778strings[2990] = str->add("images/51");
13779strings[2991] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/51");
13780strings[7] = str->add(strings[7]);
13781strings[2990] = str->add(strings[2990]);
13782str->del(strings[469]);
13783str->del(strings[469]);
13784strings[2992] = str->add("e,action,mouse,move");
13785strings[2993] = str->add("e");
13786strings[2992] = str->add(strings[2992]);
13787strings[2993] = str->add(strings[2993]);
13788strings[2992] = str->add(strings[2992]);
13789strings[2993] = str->add(strings[2993]);
13790strings[2992] = str->add(strings[2992]);
13791strings[2993] = str->add(strings[2993]);
13792strings[2992] = str->add(strings[2992]);
13793strings[2993] = str->add(strings[2993]);
13794strings[2992] = str->add(strings[2992]);
13795strings[2993] = str->add(strings[2993]);
13796strings[2992] = str->add(strings[2992]);
13797strings[2993] = str->add(strings[2993]);
13798strings[2992] = str->add(strings[2992]);
13799strings[2993] = str->add(strings[2993]);
13800str->del(strings[2992]);
13801str->del(strings[2993]);
13802str->del(strings[2992]);
13803str->del(strings[2993]);
13804str->del(strings[2992]);
13805str->del(strings[2993]);
13806str->del(strings[2992]);
13807str->del(strings[2993]);
13808str->del(strings[2992]);
13809str->del(strings[2993]);
13810str->del(strings[2992]);
13811str->del(strings[2993]);
13812str->del(strings[2992]);
13813str->del(strings[2993]);
13814str->del(strings[2992]);
13815str->del(strings[2993]);
13816strings[2994] = str->add("/usr/devel/lib/enlightenment/modules/conf_interaction/linux-gnu-x86_64/module.so");
13817strings[2994] = str->add(strings[2994]);
13818strings[11] = str->add(strings[11]);
13819strings[2995] = str->add("/usr/devel/lib/enlightenment/modules/conf_interaction");
13820str->del(strings[2994]);
13821strings[2996] = str->add("interaction");
13822strings[2997] = str->add("Interaction");
13823strings[2306] = str->add(strings[2306]);
13824str->del(strings[11]);
13825strings[2998] = str->add("e,action,mouse,move");
13826strings[2999] = str->add("e");
13827strings[2998] = str->add(strings[2998]);
13828strings[2999] = str->add(strings[2999]);
13829strings[2998] = str->add(strings[2998]);
13830strings[2999] = str->add(strings[2999]);
13831strings[2998] = str->add(strings[2998]);
13832strings[2999] = str->add(strings[2999]);
13833strings[3000] = str->add("e,state,selected");
13834strings[2999] = str->add(strings[2999]);
13835strings[3000] = str->add(strings[3000]);
13836strings[2999] = str->add(strings[2999]);
13837strings[3000] = str->add(strings[3000]);
13838strings[2999] = str->add(strings[2999]);
13839strings[3000] = str->add(strings[3000]);
13840strings[2999] = str->add(strings[2999]);
13841strings[3000] = str->add(strings[3000]);
13842strings[2999] = str->add(strings[2999]);
13843strings[3000] = str->add(strings[3000]);
13844strings[2999] = str->add(strings[2999]);
13845strings[3001] = str->add("Lock Screen");
13846strings[469] = str->add(strings[469]);
13847strings[2708] = str->add(strings[2708]);
13848strings[1726] = str->add(strings[1726]);
13849strings[469] = str->add(strings[469]);
13850strings[2677] = str->add(strings[2677]);
13851strings[3002] = str->add("Hibernate");
13852strings[469] = str->add(strings[469]);
13853strings[2678] = str->add(strings[2678]);
13854strings[1724] = str->add(strings[1724]);
13855strings[469] = str->add(strings[469]);
13856strings[2676] = str->add(strings[2676]);
13857strings[1722] = str->add(strings[1722]);
13858strings[469] = str->add(strings[469]);
13859strings[2675] = str->add(strings[2675]);
13860strings[3003] = str->add("Logout");
13861strings[469] = str->add(strings[469]);
13862strings[2674] = str->add(strings[2674]);
13863strings[2998] = str->add(strings[2998]);
13864strings[2999] = str->add(strings[2999]);
13865strings[2998] = str->add(strings[2998]);
13866strings[2999] = str->add(strings[2999]);
13867str->del(strings[2998]);
13868str->del(strings[2999]);
13869str->del(strings[2998]);
13870str->del(strings[2999]);
13871str->del(strings[2998]);
13872str->del(strings[2999]);
13873str->del(strings[2998]);
13874str->del(strings[2999]);
13875strings[3004] = str->add("program,start");
13876strings[3005] = str->add("sel");
13877str->del(strings[3000]);
13878str->del(strings[2999]);
13879str->del(strings[3000]);
13880str->del(strings[2999]);
13881strings[3004] = str->add(strings[3004]);
13882strings[3005] = str->add(strings[3005]);
13883str->del(strings[3000]);
13884str->del(strings[2999]);
13885strings[3004] = str->add(strings[3004]);
13886strings[3005] = str->add(strings[3005]);
13887strings[1932] = str->add(strings[1932]);
13888strings[3005] = str->add(strings[3005]);
13889str->del(strings[3000]);
13890str->del(strings[2999]);
13891str->del(strings[3000]);
13892str->del(strings[2999]);
13893str->del(strings[3000]);
13894str->del(strings[2999]);
13895str->del(strings[2998]);
13896str->del(strings[2999]);
13897str->del(strings[2998]);
13898str->del(strings[2999]);
13899str->del(strings[3004]);
13900str->del(strings[3005]);
13901str->del(strings[3004]);
13902str->del(strings[3005]);
13903str->del(strings[3004]);
13904str->del(strings[3005]);
13905str->del(strings[1932]);
13906str->del(strings[3005]);
13907strings[361] = str->add(strings[361]);
13908strings[362] = str->add(strings[362]);
13909strings[361] = str->add(strings[361]);
13910str->del(strings[361]);
13911strings[362] = str->add(strings[362]);
13912str->del(strings[362]);
13913strings[3006] = str->add("resize");
13914str->del(strings[3006]);
13915strings[64] = str->add(strings[64]);
13916strings[2581] = str->add(strings[2581]);
13917strings[64] = str->add(strings[64]);
13918strings[3007] = str->add("load");
13919strings[1841] = str->add(strings[1841]);
13920strings[64] = str->add(strings[64]);
13921strings[1949] = str->add(strings[1949]);
13922strings[64] = str->add(strings[64]);
13923strings[1880] = str->add(strings[1880]);
13924strings[64] = str->add(strings[64]);
13925strings[1876] = str->add(strings[1876]);
13926str->del(strings[64]);
13927strings[379] = str->add(strings[379]);
13928strings[1842] = str->add(strings[1842]);
13929strings[1842] = str->add(strings[1842]);
13930strings[64] = str->add(strings[64]);
13931strings[1874] = str->add(strings[1874]);
13932strings[64] = str->add(strings[64]);
13933strings[2583] = str->add(strings[2583]);
13934strings[3007] = str->add(strings[3007]);
13935strings[1841] = str->add(strings[1841]);
13936strings[64] = str->add(strings[64]);
13937strings[2584] = str->add(strings[2584]);
13938strings[3007] = str->add(strings[3007]);
13939strings[1841] = str->add(strings[1841]);
13940strings[469] = str->add(strings[469]);
13941strings[2708] = str->add(strings[2708]);
13942strings[2708] = str->add(strings[2708]);
13943strings[3007] = str->add(strings[3007]);
13944strings[469] = str->add(strings[469]);
13945strings[3008] = str->add("images/396");
13946strings[3009] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/396");
13947strings[469] = str->add(strings[469]);
13948strings[3008] = str->add(strings[3008]);
13949strings[1841] = str->add(strings[1841]);
13950strings[3010] = str->add("resize");
13951strings[3010] = str->add(strings[3010]);
13952strings[64] = str->add(strings[64]);
13953strings[2585] = str->add(strings[2585]);
13954strings[64] = str->add(strings[64]);
13955strings[3007] = str->add(strings[3007]);
13956strings[3001] = str->add(strings[3001]);
13957strings[1841] = str->add(strings[1841]);
13958str->del(strings[64]);
13959strings[385] = str->add(strings[385]);
13960strings[3001] = str->add(strings[3001]);
13961strings[64] = str->add(strings[64]);
13962strings[2886] = str->add(strings[2886]);
13963strings[64] = str->add(strings[64]);
13964strings[2888] = str->add(strings[2888]);
13965strings[64] = str->add(strings[64]);
13966strings[2582] = str->add(strings[2582]);
13967strings[3007] = str->add(strings[3007]);
13968strings[1841] = str->add(strings[1841]);
13969strings[64] = str->add(strings[64]);
13970strings[2583] = str->add(strings[2583]);
13971strings[3007] = str->add(strings[3007]);
13972strings[1841] = str->add(strings[1841]);
13973strings[64] = str->add(strings[64]);
13974strings[2584] = str->add(strings[2584]);
13975strings[3007] = str->add(strings[3007]);
13976strings[1841] = str->add(strings[1841]);
13977strings[469] = str->add(strings[469]);
13978strings[2677] = str->add(strings[2677]);
13979strings[2677] = str->add(strings[2677]);
13980strings[3007] = str->add(strings[3007]);
13981strings[469] = str->add(strings[469]);
13982strings[3011] = str->add("images/386");
13983strings[3012] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/386");
13984strings[469] = str->add(strings[469]);
13985strings[3011] = str->add(strings[3011]);
13986strings[1841] = str->add(strings[1841]);
13987strings[3010] = str->add(strings[3010]);
13988strings[3010] = str->add(strings[3010]);
13989strings[64] = str->add(strings[64]);
13990strings[2585] = str->add(strings[2585]);
13991strings[64] = str->add(strings[64]);
13992strings[3007] = str->add(strings[3007]);
13993strings[1726] = str->add(strings[1726]);
13994strings[1841] = str->add(strings[1841]);
13995str->del(strings[64]);
13996strings[385] = str->add(strings[385]);
13997strings[1726] = str->add(strings[1726]);
13998strings[64] = str->add(strings[64]);
13999strings[2886] = str->add(strings[2886]);
14000strings[64] = str->add(strings[64]);
14001strings[2888] = str->add(strings[2888]);
14002strings[64] = str->add(strings[64]);
14003strings[2583] = str->add(strings[2583]);
14004strings[3007] = str->add(strings[3007]);
14005strings[1841] = str->add(strings[1841]);
14006strings[64] = str->add(strings[64]);
14007strings[2584] = str->add(strings[2584]);
14008strings[3007] = str->add(strings[3007]);
14009strings[1841] = str->add(strings[1841]);
14010strings[469] = str->add(strings[469]);
14011strings[2678] = str->add(strings[2678]);
14012strings[2678] = str->add(strings[2678]);
14013strings[3007] = str->add(strings[3007]);
14014strings[469] = str->add(strings[469]);
14015strings[3013] = str->add("images/385");
14016strings[3014] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/385");
14017strings[469] = str->add(strings[469]);
14018strings[3013] = str->add(strings[3013]);
14019strings[1841] = str->add(strings[1841]);
14020strings[3010] = str->add(strings[3010]);
14021strings[3010] = str->add(strings[3010]);
14022strings[64] = str->add(strings[64]);
14023strings[2585] = str->add(strings[2585]);
14024strings[64] = str->add(strings[64]);
14025strings[3007] = str->add(strings[3007]);
14026strings[3002] = str->add(strings[3002]);
14027strings[1841] = str->add(strings[1841]);
14028str->del(strings[64]);
14029strings[385] = str->add(strings[385]);
14030strings[3002] = str->add(strings[3002]);
14031strings[64] = str->add(strings[64]);
14032strings[2886] = str->add(strings[2886]);
14033strings[64] = str->add(strings[64]);
14034strings[2888] = str->add(strings[2888]);
14035strings[64] = str->add(strings[64]);
14036strings[2583] = str->add(strings[2583]);
14037strings[3007] = str->add(strings[3007]);
14038strings[1841] = str->add(strings[1841]);
14039strings[64] = str->add(strings[64]);
14040strings[2584] = str->add(strings[2584]);
14041strings[3007] = str->add(strings[3007]);
14042strings[1841] = str->add(strings[1841]);
14043strings[469] = str->add(strings[469]);
14044strings[2676] = str->add(strings[2676]);
14045strings[2676] = str->add(strings[2676]);
14046strings[3007] = str->add(strings[3007]);
14047strings[469] = str->add(strings[469]);
14048strings[3015] = str->add("images/388");
14049strings[3016] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/388");
14050strings[469] = str->add(strings[469]);
14051strings[3015] = str->add(strings[3015]);
14052strings[1841] = str->add(strings[1841]);
14053strings[3010] = str->add(strings[3010]);
14054strings[3010] = str->add(strings[3010]);
14055strings[64] = str->add(strings[64]);
14056strings[2585] = str->add(strings[2585]);
14057strings[64] = str->add(strings[64]);
14058strings[3007] = str->add(strings[3007]);
14059strings[1724] = str->add(strings[1724]);
14060strings[1841] = str->add(strings[1841]);
14061str->del(strings[64]);
14062strings[385] = str->add(strings[385]);
14063strings[1724] = str->add(strings[1724]);
14064strings[64] = str->add(strings[64]);
14065strings[2886] = str->add(strings[2886]);
14066strings[64] = str->add(strings[64]);
14067strings[2888] = str->add(strings[2888]);
14068strings[64] = str->add(strings[64]);
14069strings[2583] = str->add(strings[2583]);
14070strings[3007] = str->add(strings[3007]);
14071strings[1841] = str->add(strings[1841]);
14072strings[64] = str->add(strings[64]);
14073strings[2584] = str->add(strings[2584]);
14074strings[3007] = str->add(strings[3007]);
14075strings[1841] = str->add(strings[1841]);
14076strings[469] = str->add(strings[469]);
14077strings[2675] = str->add(strings[2675]);
14078strings[2675] = str->add(strings[2675]);
14079strings[3007] = str->add(strings[3007]);
14080strings[469] = str->add(strings[469]);
14081strings[3017] = str->add("images/387");
14082strings[3018] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/387");
14083strings[469] = str->add(strings[469]);
14084strings[3017] = str->add(strings[3017]);
14085strings[1841] = str->add(strings[1841]);
14086strings[3010] = str->add(strings[3010]);
14087strings[3010] = str->add(strings[3010]);
14088strings[64] = str->add(strings[64]);
14089strings[2585] = str->add(strings[2585]);
14090strings[64] = str->add(strings[64]);
14091strings[3007] = str->add(strings[3007]);
14092strings[1722] = str->add(strings[1722]);
14093strings[1841] = str->add(strings[1841]);
14094str->del(strings[64]);
14095strings[385] = str->add(strings[385]);
14096strings[1722] = str->add(strings[1722]);
14097strings[64] = str->add(strings[64]);
14098strings[2886] = str->add(strings[2886]);
14099strings[64] = str->add(strings[64]);
14100strings[2888] = str->add(strings[2888]);
14101strings[64] = str->add(strings[64]);
14102strings[2582] = str->add(strings[2582]);
14103strings[3007] = str->add(strings[3007]);
14104strings[1841] = str->add(strings[1841]);
14105strings[64] = str->add(strings[64]);
14106strings[2583] = str->add(strings[2583]);
14107strings[3007] = str->add(strings[3007]);
14108strings[1841] = str->add(strings[1841]);
14109strings[64] = str->add(strings[64]);
14110strings[2584] = str->add(strings[2584]);
14111strings[3007] = str->add(strings[3007]);
14112strings[1841] = str->add(strings[1841]);
14113strings[469] = str->add(strings[469]);
14114strings[2674] = str->add(strings[2674]);
14115strings[2674] = str->add(strings[2674]);
14116strings[3007] = str->add(strings[3007]);
14117strings[469] = str->add(strings[469]);
14118strings[3019] = str->add("images/384");
14119strings[3020] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/384");
14120strings[469] = str->add(strings[469]);
14121strings[3019] = str->add(strings[3019]);
14122strings[1841] = str->add(strings[1841]);
14123strings[3010] = str->add(strings[3010]);
14124strings[3010] = str->add(strings[3010]);
14125strings[64] = str->add(strings[64]);
14126strings[2585] = str->add(strings[2585]);
14127strings[64] = str->add(strings[64]);
14128strings[3007] = str->add(strings[3007]);
14129strings[3003] = str->add(strings[3003]);
14130strings[1841] = str->add(strings[1841]);
14131str->del(strings[64]);
14132strings[385] = str->add(strings[385]);
14133strings[3003] = str->add(strings[3003]);
14134strings[64] = str->add(strings[64]);
14135strings[2886] = str->add(strings[2886]);
14136strings[64] = str->add(strings[64]);
14137strings[2888] = str->add(strings[2888]);
14138strings[3010] = str->add(strings[3010]);
14139strings[3010] = str->add(strings[3010]);
14140strings[3010] = str->add(strings[3010]);
14141strings[3010] = str->add(strings[3010]);
14142strings[3010] = str->add(strings[3010]);
14143strings[3010] = str->add(strings[3010]);
14144strings[3010] = str->add(strings[3010]);
14145strings[3010] = str->add(strings[3010]);
14146strings[3010] = str->add(strings[3010]);
14147strings[3010] = str->add(strings[3010]);
14148strings[3010] = str->add(strings[3010]);
14149strings[3010] = str->add(strings[3010]);
14150strings[3010] = str->add(strings[3010]);
14151strings[3010] = str->add(strings[3010]);
14152strings[3010] = str->add(strings[3010]);
14153strings[3010] = str->add(strings[3010]);
14154strings[3010] = str->add(strings[3010]);
14155strings[3010] = str->add(strings[3010]);
14156strings[3010] = str->add(strings[3010]);
14157strings[3010] = str->add(strings[3010]);
14158strings[3010] = str->add(strings[3010]);
14159str->del(strings[1842]);
14160strings[1842] = str->add(strings[1842]);
14161str->del(strings[1842]);
14162strings[1842] = str->add(strings[1842]);
14163strings[3010] = str->add(strings[3010]);
14164strings[3001] = str->add(strings[3001]);
14165strings[3001] = str->add(strings[3001]);
14166strings[64] = str->add(strings[64]);
14167strings[2915] = str->add(strings[2915]);
14168strings[3010] = str->add(strings[3010]);
14169strings[1726] = str->add(strings[1726]);
14170strings[1726] = str->add(strings[1726]);
14171strings[3010] = str->add(strings[3010]);
14172strings[3002] = str->add(strings[3002]);
14173strings[3002] = str->add(strings[3002]);
14174strings[3010] = str->add(strings[3010]);
14175strings[1724] = str->add(strings[1724]);
14176strings[1724] = str->add(strings[1724]);
14177strings[3010] = str->add(strings[3010]);
14178strings[1722] = str->add(strings[1722]);
14179strings[1722] = str->add(strings[1722]);
14180strings[64] = str->add(strings[64]);
14181strings[2915] = str->add(strings[2915]);
14182strings[3010] = str->add(strings[3010]);
14183strings[3003] = str->add(strings[3003]);
14184strings[3003] = str->add(strings[3003]);
14185str->del(strings[64]);
14186str->del(strings[2913]);
14187strings[64] = str->add(strings[64]);
14188strings[3021] = str->add("images/47");
14189strings[3022] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/47");
14190strings[64] = str->add(strings[64]);
14191strings[3021] = str->add(strings[3021]);
14192str->del(strings[3007]);
14193str->del(strings[1841]);
14194str->del(strings[3007]);
14195str->del(strings[1841]);
14196str->del(strings[3007]);
14197str->del(strings[1841]);
14198str->del(strings[3007]);
14199str->del(strings[1841]);
14200str->del(strings[3010]);
14201str->del(strings[3010]);
14202str->del(strings[3007]);
14203str->del(strings[1841]);
14204str->del(strings[3007]);
14205str->del(strings[1841]);
14206str->del(strings[3007]);
14207str->del(strings[1841]);
14208str->del(strings[3007]);
14209str->del(strings[1841]);
14210str->del(strings[3007]);
14211str->del(strings[1841]);
14212str->del(strings[3010]);
14213str->del(strings[3010]);
14214str->del(strings[3007]);
14215str->del(strings[1841]);
14216str->del(strings[3007]);
14217str->del(strings[1841]);
14218str->del(strings[3007]);
14219str->del(strings[1841]);
14220str->del(strings[3007]);
14221str->del(strings[1841]);
14222str->del(strings[3010]);
14223str->del(strings[3010]);
14224str->del(strings[3007]);
14225str->del(strings[1841]);
14226str->del(strings[3007]);
14227str->del(strings[1841]);
14228str->del(strings[3007]);
14229str->del(strings[1841]);
14230str->del(strings[3007]);
14231str->del(strings[1841]);
14232str->del(strings[3010]);
14233str->del(strings[3010]);
14234str->del(strings[3007]);
14235str->del(strings[1841]);
14236str->del(strings[3007]);
14237str->del(strings[1841]);
14238str->del(strings[3007]);
14239str->del(strings[1841]);
14240str->del(strings[3007]);
14241str->del(strings[1841]);
14242str->del(strings[3010]);
14243str->del(strings[3010]);
14244str->del(strings[3007]);
14245str->del(strings[1841]);
14246str->del(strings[3007]);
14247str->del(strings[1841]);
14248str->del(strings[3007]);
14249str->del(strings[1841]);
14250str->del(strings[3007]);
14251str->del(strings[1841]);
14252str->del(strings[3007]);
14253str->del(strings[1841]);
14254str->del(strings[3010]);
14255str->del(strings[3010]);
14256str->del(strings[3007]);
14257str->del(strings[1841]);
14258str->del(strings[3010]);
14259str->del(strings[3010]);
14260str->del(strings[3010]);
14261str->del(strings[3010]);
14262str->del(strings[3010]);
14263str->del(strings[3010]);
14264str->del(strings[3010]);
14265str->del(strings[3010]);
14266str->del(strings[3010]);
14267str->del(strings[3010]);
14268str->del(strings[3010]);
14269str->del(strings[3010]);
14270str->del(strings[3010]);
14271str->del(strings[3010]);
14272str->del(strings[3010]);
14273str->del(strings[3010]);
14274str->del(strings[3010]);
14275str->del(strings[3010]);
14276str->del(strings[3010]);
14277str->del(strings[3010]);
14278str->del(strings[3010]);
14279str->del(strings[3010]);
14280str->del(strings[3010]);
14281str->del(strings[3010]);
14282str->del(strings[3010]);
14283str->del(strings[3010]);
14284str->del(strings[3010]);
14285strings[3023] = str->add("e,action,mouse,move");
14286strings[3024] = str->add("e");
14287strings[3023] = str->add(strings[3023]);
14288strings[3024] = str->add(strings[3024]);
14289str->del(strings[3023]);
14290str->del(strings[3024]);
14291str->del(strings[3023]);
14292str->del(strings[3024]);
14293strings[3025] = str->add("e,action,mouse,move");
14294strings[3026] = str->add("e");
14295str->del(strings[3025]);
14296str->del(strings[3026]);
14297str->del(strings[7]);
14298str->del(strings[2990]);
14299strings[7] = str->add(strings[7]);
14300strings[3027] = str->add("images/52");
14301strings[3028] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/52");
14302strings[7] = str->add(strings[7]);
14303strings[3027] = str->add(strings[3027]);
14304strings[3029] = str->add("e,action,mouse,move");
14305strings[3030] = str->add("e");
14306strings[3029] = str->add(strings[3029]);
14307strings[3030] = str->add(strings[3030]);
14308str->del(strings[3029]);
14309str->del(strings[3030]);
14310str->del(strings[3029]);
14311str->del(strings[3030]);
14312strings[3031] = str->add("e,action,mouse,move");
14313strings[3032] = str->add("e");
14314strings[3031] = str->add(strings[3031]);
14315strings[3032] = str->add(strings[3032]);
14316str->del(strings[3031]);
14317str->del(strings[3032]);
14318str->del(strings[3031]);
14319str->del(strings[3032]);
14320str->del(strings[7]);
14321str->del(strings[3027]);
14322strings[7] = str->add(strings[7]);
14323strings[3033] = str->add("images/53");
14324strings[3034] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/53");
14325strings[7] = str->add(strings[7]);
14326strings[3033] = str->add(strings[3033]);
14327strings[3035] = str->add("e,action,mouse,move");
14328strings[3036] = str->add("e");
14329str->del(strings[3035]);
14330str->del(strings[3036]);
14331strings[3037] = str->add("e,state,busy,start");
14332strings[3038] = str->add("e");
14333strings[3039] = str->add("print.pdf");
14334strings[3040] = str->add("application/pdf");
14335strings[64] = str->add(strings[64]);
14336strings[2784] = str->add(strings[2784]);
14337str->del(strings[64]);
14338str->del(strings[2784]);
14339strings[469] = str->add(strings[469]);
14340strings[2784] = str->add(strings[2784]);
14341strings[2784] = str->add(strings[2784]);
14342strings[469] = str->add(strings[469]);
14343strings[3041] = str->add("load");
14344strings[3039] = str->add(strings[3039]);
14345strings[469] = str->add(strings[469]);
14346strings[3042] = str->add("images/419");
14347strings[3043] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/419");
14348strings[469] = str->add(strings[469]);
14349strings[3042] = str->add(strings[3042]);
14350str->del(strings[469]);
14351strings[379] = str->add(strings[379]);
14352strings[3039] = str->add(strings[3039]);
14353strings[3039] = str->add(strings[3039]);
14354strings[3039] = str->add(strings[3039]);
14355strings[469] = str->add(strings[469]);
14356strings[3027] = str->add(strings[3027]);
14357strings[3044] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/52");
14358strings[469] = str->add(strings[469]);
14359strings[3027] = str->add(strings[3027]);
14360strings[469] = str->add(strings[469]);
14361strings[3045] = str->add("images/418");
14362strings[3046] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/418");
14363strings[469] = str->add(strings[469]);
14364strings[3045] = str->add(strings[3045]);
14365strings[3047] = str->add("3899_001.pdf");
14366strings[3040] = str->add(strings[3040]);
14367str->del(strings[3039]);
14368strings[3047] = str->add(strings[3047]);
14369str->del(strings[3039]);
14370strings[3047] = str->add(strings[3047]);
14371strings[3048] = str->add("ACCORD EDF MR BAIL.pdf");
14372strings[3040] = str->add(strings[3040]);
14373str->del(strings[3047]);
14374strings[3048] = str->add(strings[3048]);
14375str->del(strings[3047]);
14376strings[3048] = str->add(strings[3048]);
14377strings[3049] = str->add("3817_001.pdf");
14378strings[3040] = str->add(strings[3040]);
14379str->del(strings[3048]);
14380strings[3049] = str->add(strings[3049]);
14381str->del(strings[3048]);
14382strings[3049] = str->add(strings[3049]);
14383strings[3050] = str->add("NVIDIA-Linux-x86_64-173.14.12-pkg2.run");
14384str->del(strings[3049]);
14385strings[3050] = str->add(strings[3050]);
14386str->del(strings[3049]);
14387strings[3050] = str->add(strings[3050]);
14388str->del(strings[3037]);
14389str->del(strings[3038]);
14390str->del(strings[3041]);
14391strings[3051] = str->add("e,action,mouse,move");
14392strings[3052] = str->add("e");
14393strings[3051] = str->add(strings[3051]);
14394strings[3052] = str->add(strings[3052]);
14395str->del(strings[3051]);
14396str->del(strings[3052]);
14397str->del(strings[3051]);
14398str->del(strings[3052]);
14399str->del(strings[3039]);
14400strings[3050] = str->add(strings[3050]);
14401str->del(strings[3039]);
14402strings[3050] = str->add(strings[3050]);
14403strings[3053] = str->add("e,action,mouse,move");
14404strings[3054] = str->add("e");
14405strings[3053] = str->add(strings[3053]);
14406strings[3054] = str->add(strings[3054]);
14407strings[3053] = str->add(strings[3053]);
14408strings[3054] = str->add(strings[3054]);
14409str->del(strings[3053]);
14410str->del(strings[3054]);
14411str->del(strings[3053]);
14412str->del(strings[3054]);
14413str->del(strings[3053]);
14414str->del(strings[3054]);
14415strings[3055] = str->add("e,state,busy,stop");
14416strings[3056] = str->add("e");
14417str->del(strings[3050]);
14418str->del(strings[3050]);
14419str->del(strings[3050]);
14420str->del(strings[469]);
14421str->del(strings[2784]);
14422strings[469] = str->add(strings[469]);
14423strings[2784] = str->add(strings[2784]);
14424strings[469] = str->add(strings[469]);
14425strings[3057] = str->add("load");
14426strings[3049] = str->add(strings[3049]);
14427strings[3058] = str->add("resize");
14428strings[1839] = str->add(strings[1839]);
14429strings[2090] = str->add(strings[2090]);
14430strings[2640] = str->add(strings[2640]);
14431strings[2574] = str->add(strings[2574]);
14432strings[2575] = str->add(strings[2575]);
14433strings[2576] = str->add(strings[2576]);
14434strings[2577] = str->add(strings[2577]);
14435strings[2578] = str->add(strings[2578]);
14436strings[2579] = str->add(strings[2579]);
14437strings[2641] = str->add(strings[2641]);
14438strings[2642] = str->add(strings[2642]);
14439strings[2643] = str->add(strings[2643]);
14440strings[2644] = str->add(strings[2644]);
14441strings[2645] = str->add(strings[2645]);
14442strings[2646] = str->add(strings[2646]);
14443strings[2647] = str->add(strings[2647]);
14444strings[2648] = str->add(strings[2648]);
14445strings[2649] = str->add(strings[2649]);
14446strings[2650] = str->add(strings[2650]);
14447strings[2651] = str->add(strings[2651]);
14448strings[2652] = str->add(strings[2652]);
14449strings[2653] = str->add(strings[2653]);
14450strings[2654] = str->add(strings[2654]);
14451strings[2655] = str->add(strings[2655]);
14452strings[2656] = str->add(strings[2656]);
14453strings[2657] = str->add(strings[2657]);
14454strings[2658] = str->add(strings[2658]);
14455strings[2659] = str->add(strings[2659]);
14456strings[2660] = str->add(strings[2660]);
14457strings[2661] = str->add(strings[2661]);
14458strings[2112] = str->add(strings[2112]);
14459strings[1935] = str->add(strings[1935]);
14460strings[2662] = str->add(strings[2662]);
14461strings[1929] = str->add(strings[1929]);
14462strings[2663] = str->add(strings[2663]);
14463strings[2067] = str->add(strings[2067]);
14464strings[2069] = str->add(strings[2069]);
14465strings[2664] = str->add(strings[2664]);
14466strings[2665] = str->add(strings[2665]);
14467strings[2581] = str->add(strings[2581]);
14468strings[2582] = str->add(strings[2582]);
14469strings[2583] = str->add(strings[2583]);
14470strings[2634] = str->add(strings[2634]);
14471strings[2587] = str->add(strings[2587]);
14472strings[2588] = str->add(strings[2588]);
14473strings[2584] = str->add(strings[2584]);
14474strings[2585] = str->add(strings[2585]);
14475strings[2586] = str->add(strings[2586]);
14476strings[2127] = str->add(strings[2127]);
14477strings[1963] = str->add(strings[1963]);
14478strings[2595] = str->add(strings[2595]);
14479strings[2604] = str->add(strings[2604]);
14480strings[2603] = str->add(strings[2603]);
14481strings[2081] = str->add(strings[2081]);
14482strings[2666] = str->add(strings[2666]);
14483strings[2083] = str->add(strings[2083]);
14484strings[2667] = str->add(strings[2667]);
14485strings[2668] = str->add(strings[2668]);
14486strings[2669] = str->add(strings[2669]);
14487strings[2670] = str->add(strings[2670]);
14488strings[1957] = str->add(strings[1957]);
14489strings[2596] = str->add(strings[2596]);
14490strings[2597] = str->add(strings[2597]);
14491strings[2605] = str->add(strings[2605]);
14492strings[2606] = str->add(strings[2606]);
14493strings[2607] = str->add(strings[2607]);
14494strings[2608] = str->add(strings[2608]);
14495strings[2600] = str->add(strings[2600]);
14496strings[2601] = str->add(strings[2601]);
14497strings[2602] = str->add(strings[2602]);
14498strings[2671] = str->add(strings[2671]);
14499strings[2672] = str->add(strings[2672]);
14500strings[2673] = str->add(strings[2673]);
14501strings[2674] = str->add(strings[2674]);
14502strings[2675] = str->add(strings[2675]);
14503strings[2676] = str->add(strings[2676]);
14504strings[2677] = str->add(strings[2677]);
14505strings[2678] = str->add(strings[2678]);
14506strings[2679] = str->add(strings[2679]);
14507strings[2680] = str->add(strings[2680]);
14508strings[2681] = str->add(strings[2681]);
14509strings[2682] = str->add(strings[2682]);
14510strings[2683] = str->add(strings[2683]);
14511strings[2684] = str->add(strings[2684]);
14512strings[2685] = str->add(strings[2685]);
14513strings[2686] = str->add(strings[2686]);
14514strings[2687] = str->add(strings[2687]);
14515strings[2688] = str->add(strings[2688]);
14516strings[2689] = str->add(strings[2689]);
14517strings[2690] = str->add(strings[2690]);
14518strings[2691] = str->add(strings[2691]);
14519strings[2692] = str->add(strings[2692]);
14520strings[2693] = str->add(strings[2693]);
14521strings[2694] = str->add(strings[2694]);
14522strings[2695] = str->add(strings[2695]);
14523strings[2696] = str->add(strings[2696]);
14524strings[2697] = str->add(strings[2697]);
14525strings[2698] = str->add(strings[2698]);
14526strings[2699] = str->add(strings[2699]);
14527strings[2700] = str->add(strings[2700]);
14528strings[2701] = str->add(strings[2701]);
14529strings[2702] = str->add(strings[2702]);
14530strings[2703] = str->add(strings[2703]);
14531strings[2704] = str->add(strings[2704]);
14532strings[2705] = str->add(strings[2705]);
14533strings[2706] = str->add(strings[2706]);
14534strings[2707] = str->add(strings[2707]);
14535strings[2708] = str->add(strings[2708]);
14536strings[2709] = str->add(strings[2709]);
14537strings[2710] = str->add(strings[2710]);
14538strings[2711] = str->add(strings[2711]);
14539strings[2712] = str->add(strings[2712]);
14540strings[2713] = str->add(strings[2713]);
14541strings[2714] = str->add(strings[2714]);
14542strings[2715] = str->add(strings[2715]);
14543strings[2716] = str->add(strings[2716]);
14544strings[2717] = str->add(strings[2717]);
14545strings[2718] = str->add(strings[2718]);
14546strings[2719] = str->add(strings[2719]);
14547strings[2720] = str->add(strings[2720]);
14548strings[2721] = str->add(strings[2721]);
14549strings[2722] = str->add(strings[2722]);
14550strings[2723] = str->add(strings[2723]);
14551strings[2724] = str->add(strings[2724]);
14552strings[2725] = str->add(strings[2725]);
14553strings[2726] = str->add(strings[2726]);
14554strings[2727] = str->add(strings[2727]);
14555strings[2728] = str->add(strings[2728]);
14556strings[2729] = str->add(strings[2729]);
14557strings[2730] = str->add(strings[2730]);
14558strings[2731] = str->add(strings[2731]);
14559strings[2732] = str->add(strings[2732]);
14560strings[2733] = str->add(strings[2733]);
14561strings[2734] = str->add(strings[2734]);
14562strings[2735] = str->add(strings[2735]);
14563strings[2736] = str->add(strings[2736]);
14564strings[2737] = str->add(strings[2737]);
14565strings[2738] = str->add(strings[2738]);
14566strings[2739] = str->add(strings[2739]);
14567strings[2740] = str->add(strings[2740]);
14568strings[2741] = str->add(strings[2741]);
14569strings[2742] = str->add(strings[2742]);
14570strings[2743] = str->add(strings[2743]);
14571strings[2744] = str->add(strings[2744]);
14572strings[2745] = str->add(strings[2745]);
14573strings[2746] = str->add(strings[2746]);
14574strings[2747] = str->add(strings[2747]);
14575strings[2748] = str->add(strings[2748]);
14576strings[2749] = str->add(strings[2749]);
14577strings[2750] = str->add(strings[2750]);
14578strings[2751] = str->add(strings[2751]);
14579strings[2752] = str->add(strings[2752]);
14580strings[2753] = str->add(strings[2753]);
14581strings[2754] = str->add(strings[2754]);
14582strings[2755] = str->add(strings[2755]);
14583strings[2756] = str->add(strings[2756]);
14584strings[2757] = str->add(strings[2757]);
14585strings[2758] = str->add(strings[2758]);
14586strings[2759] = str->add(strings[2759]);
14587strings[2760] = str->add(strings[2760]);
14588strings[2761] = str->add(strings[2761]);
14589strings[2762] = str->add(strings[2762]);
14590strings[2763] = str->add(strings[2763]);
14591strings[2764] = str->add(strings[2764]);
14592strings[2765] = str->add(strings[2765]);
14593strings[2766] = str->add(strings[2766]);
14594strings[2767] = str->add(strings[2767]);
14595strings[2768] = str->add(strings[2768]);
14596strings[2580] = str->add(strings[2580]);
14597strings[1754] = str->add(strings[1754]);
14598strings[2769] = str->add(strings[2769]);
14599strings[2770] = str->add(strings[2770]);
14600strings[2619] = str->add(strings[2619]);
14601strings[2620] = str->add(strings[2620]);
14602strings[2621] = str->add(strings[2621]);
14603strings[2622] = str->add(strings[2622]);
14604strings[2771] = str->add(strings[2771]);
14605strings[2772] = str->add(strings[2772]);
14606strings[2773] = str->add(strings[2773]);
14607strings[2774] = str->add(strings[2774]);
14608strings[2775] = str->add(strings[2775]);
14609strings[2776] = str->add(strings[2776]);
14610strings[2777] = str->add(strings[2777]);
14611strings[2778] = str->add(strings[2778]);
14612strings[2779] = str->add(strings[2779]);
14613strings[2780] = str->add(strings[2780]);
14614strings[2781] = str->add(strings[2781]);
14615strings[2782] = str->add(strings[2782]);
14616strings[2783] = str->add(strings[2783]);
14617strings[2784] = str->add(strings[2784]);
14618strings[2785] = str->add(strings[2785]);
14619strings[2786] = str->add(strings[2786]);
14620strings[2787] = str->add(strings[2787]);
14621strings[2788] = str->add(strings[2788]);
14622strings[2789] = str->add(strings[2789]);
14623strings[2790] = str->add(strings[2790]);
14624strings[2791] = str->add(strings[2791]);
14625strings[2792] = str->add(strings[2792]);
14626strings[2793] = str->add(strings[2793]);
14627strings[2794] = str->add(strings[2794]);
14628strings[2795] = str->add(strings[2795]);
14629strings[2796] = str->add(strings[2796]);
14630strings[2797] = str->add(strings[2797]);
14631strings[2798] = str->add(strings[2798]);
14632strings[2799] = str->add(strings[2799]);
14633strings[2800] = str->add(strings[2800]);
14634strings[2801] = str->add(strings[2801]);
14635strings[2802] = str->add(strings[2802]);
14636strings[2803] = str->add(strings[2803]);
14637strings[2804] = str->add(strings[2804]);
14638strings[2805] = str->add(strings[2805]);
14639strings[2806] = str->add(strings[2806]);
14640strings[2807] = str->add(strings[2807]);
14641strings[2808] = str->add(strings[2808]);
14642strings[2809] = str->add(strings[2809]);
14643strings[2810] = str->add(strings[2810]);
14644strings[2811] = str->add(strings[2811]);
14645strings[2812] = str->add(strings[2812]);
14646strings[2813] = str->add(strings[2813]);
14647strings[2814] = str->add(strings[2814]);
14648strings[2815] = str->add(strings[2815]);
14649strings[2816] = str->add(strings[2816]);
14650strings[2817] = str->add(strings[2817]);
14651strings[2817] = str->add(strings[2817]);
14652strings[2818] = str->add(strings[2818]);
14653strings[2819] = str->add(strings[2819]);
14654strings[2820] = str->add(strings[2820]);
14655strings[2821] = str->add(strings[2821]);
14656strings[2822] = str->add(strings[2822]);
14657strings[2823] = str->add(strings[2823]);
14658strings[2824] = str->add(strings[2824]);
14659strings[2825] = str->add(strings[2825]);
14660strings[2826] = str->add(strings[2826]);
14661strings[2827] = str->add(strings[2827]);
14662strings[2828] = str->add(strings[2828]);
14663strings[2829] = str->add(strings[2829]);
14664strings[2830] = str->add(strings[2830]);
14665strings[2831] = str->add(strings[2831]);
14666strings[2832] = str->add(strings[2832]);
14667strings[2833] = str->add(strings[2833]);
14668strings[2834] = str->add(strings[2834]);
14669strings[2835] = str->add(strings[2835]);
14670strings[2836] = str->add(strings[2836]);
14671strings[2837] = str->add(strings[2837]);
14672strings[2838] = str->add(strings[2838]);
14673strings[2839] = str->add(strings[2839]);
14674strings[2840] = str->add(strings[2840]);
14675strings[2841] = str->add(strings[2841]);
14676strings[2842] = str->add(strings[2842]);
14677strings[2843] = str->add(strings[2843]);
14678strings[2844] = str->add(strings[2844]);
14679strings[2845] = str->add(strings[2845]);
14680strings[2846] = str->add(strings[2846]);
14681strings[2847] = str->add(strings[2847]);
14682strings[2609] = str->add(strings[2609]);
14683strings[2610] = str->add(strings[2610]);
14684strings[2611] = str->add(strings[2611]);
14685strings[2612] = str->add(strings[2612]);
14686strings[2630] = str->add(strings[2630]);
14687strings[2613] = str->add(strings[2613]);
14688strings[2631] = str->add(strings[2631]);
14689strings[2614] = str->add(strings[2614]);
14690strings[2615] = str->add(strings[2615]);
14691strings[2616] = str->add(strings[2616]);
14692strings[2617] = str->add(strings[2617]);
14693strings[2848] = str->add(strings[2848]);
14694strings[2849] = str->add(strings[2849]);
14695strings[2628] = str->add(strings[2628]);
14696strings[2629] = str->add(strings[2629]);
14697strings[2850] = str->add(strings[2850]);
14698strings[2851] = str->add(strings[2851]);
14699strings[2852] = str->add(strings[2852]);
14700strings[2853] = str->add(strings[2853]);
14701strings[2633] = str->add(strings[2633]);
14702strings[1945] = str->add(strings[1945]);
14703strings[2061] = str->add(strings[2061]);
14704strings[1960] = str->add(strings[1960]);
14705strings[2592] = str->add(strings[2592]);
14706strings[2593] = str->add(strings[2593]);
14707strings[2594] = str->add(strings[2594]);
14708strings[2589] = str->add(strings[2589]);
14709strings[2590] = str->add(strings[2590]);
14710strings[2591] = str->add(strings[2591]);
14711strings[2623] = str->add(strings[2623]);
14712strings[2627] = str->add(strings[2627]);
14713strings[2626] = str->add(strings[2626]);
14714strings[2625] = str->add(strings[2625]);
14715strings[2599] = str->add(strings[2599]);
14716strings[2635] = str->add(strings[2635]);
14717strings[2636] = str->add(strings[2636]);
14718strings[2637] = str->add(strings[2637]);
14719strings[2638] = str->add(strings[2638]);
14720strings[2624] = str->add(strings[2624]);
14721strings[2632] = str->add(strings[2632]);
14722strings[2854] = str->add(strings[2854]);
14723strings[2855] = str->add(strings[2855]);
14724strings[2856] = str->add(strings[2856]);
14725strings[2857] = str->add(strings[2857]);
14726strings[2598] = str->add(strings[2598]);
14727strings[2858] = str->add(strings[2858]);
14728strings[2859] = str->add(strings[2859]);
14729strings[2639] = str->add(strings[2639]);
14730str->del(strings[1839]);
14731str->del(strings[2090]);
14732str->del(strings[2640]);
14733str->del(strings[2574]);
14734str->del(strings[2575]);
14735str->del(strings[2576]);
14736str->del(strings[2577]);
14737str->del(strings[2578]);
14738str->del(strings[2579]);
14739str->del(strings[2641]);
14740str->del(strings[2642]);
14741str->del(strings[2643]);
14742str->del(strings[2644]);
14743str->del(strings[2645]);
14744str->del(strings[2646]);
14745str->del(strings[2647]);
14746str->del(strings[2648]);
14747str->del(strings[2649]);
14748str->del(strings[2650]);
14749str->del(strings[2651]);
14750str->del(strings[2652]);
14751str->del(strings[2653]);
14752str->del(strings[2654]);
14753str->del(strings[2655]);
14754str->del(strings[2656]);
14755str->del(strings[2657]);
14756str->del(strings[2658]);
14757str->del(strings[2659]);
14758str->del(strings[2660]);
14759str->del(strings[2661]);
14760str->del(strings[2112]);
14761str->del(strings[1935]);
14762str->del(strings[2662]);
14763str->del(strings[1929]);
14764str->del(strings[2663]);
14765str->del(strings[2067]);
14766str->del(strings[2069]);
14767str->del(strings[2664]);
14768str->del(strings[2665]);
14769str->del(strings[2581]);
14770str->del(strings[2582]);
14771str->del(strings[2583]);
14772str->del(strings[2634]);
14773str->del(strings[2587]);
14774str->del(strings[2588]);
14775str->del(strings[2584]);
14776str->del(strings[2585]);
14777str->del(strings[2586]);
14778str->del(strings[2127]);
14779str->del(strings[1963]);
14780str->del(strings[2595]);
14781str->del(strings[2604]);
14782str->del(strings[2603]);
14783str->del(strings[2081]);
14784str->del(strings[2666]);
14785str->del(strings[2083]);
14786str->del(strings[2667]);
14787str->del(strings[2668]);
14788str->del(strings[2669]);
14789str->del(strings[2670]);
14790str->del(strings[1957]);
14791str->del(strings[2596]);
14792str->del(strings[2597]);
14793str->del(strings[2605]);
14794str->del(strings[2606]);
14795str->del(strings[2607]);
14796str->del(strings[2608]);
14797str->del(strings[2600]);
14798str->del(strings[2601]);
14799str->del(strings[2602]);
14800str->del(strings[2671]);
14801str->del(strings[2672]);
14802str->del(strings[2673]);
14803str->del(strings[2674]);
14804str->del(strings[2675]);
14805str->del(strings[2676]);
14806str->del(strings[2677]);
14807str->del(strings[2678]);
14808str->del(strings[2679]);
14809str->del(strings[2680]);
14810str->del(strings[2681]);
14811str->del(strings[2682]);
14812str->del(strings[2683]);
14813str->del(strings[2684]);
14814str->del(strings[2685]);
14815str->del(strings[2686]);
14816str->del(strings[2687]);
14817str->del(strings[2688]);
14818str->del(strings[2689]);
14819str->del(strings[2690]);
14820str->del(strings[2691]);
14821str->del(strings[2692]);
14822str->del(strings[2693]);
14823str->del(strings[2694]);
14824str->del(strings[2695]);
14825str->del(strings[2696]);
14826str->del(strings[2697]);
14827str->del(strings[2698]);
14828str->del(strings[2699]);
14829str->del(strings[2700]);
14830str->del(strings[2701]);
14831str->del(strings[2702]);
14832str->del(strings[2703]);
14833str->del(strings[2704]);
14834str->del(strings[2705]);
14835str->del(strings[2706]);
14836str->del(strings[2707]);
14837str->del(strings[2708]);
14838str->del(strings[2709]);
14839str->del(strings[2710]);
14840str->del(strings[2711]);
14841str->del(strings[2712]);
14842str->del(strings[2713]);
14843str->del(strings[2714]);
14844str->del(strings[2715]);
14845str->del(strings[2716]);
14846str->del(strings[2717]);
14847str->del(strings[2718]);
14848str->del(strings[2719]);
14849str->del(strings[2720]);
14850str->del(strings[2721]);
14851str->del(strings[2722]);
14852str->del(strings[2723]);
14853str->del(strings[2724]);
14854str->del(strings[2725]);
14855str->del(strings[2726]);
14856str->del(strings[2727]);
14857str->del(strings[2728]);
14858str->del(strings[2729]);
14859str->del(strings[2730]);
14860str->del(strings[2731]);
14861str->del(strings[2732]);
14862str->del(strings[2733]);
14863str->del(strings[2734]);
14864str->del(strings[2735]);
14865str->del(strings[2736]);
14866str->del(strings[2737]);
14867str->del(strings[2738]);
14868str->del(strings[2739]);
14869str->del(strings[2740]);
14870str->del(strings[2741]);
14871str->del(strings[2742]);
14872str->del(strings[2743]);
14873str->del(strings[2744]);
14874str->del(strings[2745]);
14875str->del(strings[2746]);
14876str->del(strings[2747]);
14877str->del(strings[2748]);
14878str->del(strings[2749]);
14879str->del(strings[2750]);
14880str->del(strings[2751]);
14881str->del(strings[2752]);
14882str->del(strings[2753]);
14883str->del(strings[2754]);
14884str->del(strings[2755]);
14885str->del(strings[2756]);
14886str->del(strings[2757]);
14887str->del(strings[2758]);
14888str->del(strings[2759]);
14889str->del(strings[2760]);
14890str->del(strings[2761]);
14891str->del(strings[2762]);
14892str->del(strings[2763]);
14893str->del(strings[2764]);
14894str->del(strings[2765]);
14895str->del(strings[2766]);
14896str->del(strings[2767]);
14897str->del(strings[2768]);
14898str->del(strings[2580]);
14899str->del(strings[1754]);
14900str->del(strings[2769]);
14901str->del(strings[2770]);
14902str->del(strings[2619]);
14903str->del(strings[2620]);
14904str->del(strings[2621]);
14905str->del(strings[2622]);
14906str->del(strings[2771]);
14907str->del(strings[2772]);
14908str->del(strings[2773]);
14909str->del(strings[2774]);
14910str->del(strings[2775]);
14911str->del(strings[2776]);
14912str->del(strings[2777]);
14913str->del(strings[2778]);
14914str->del(strings[2779]);
14915str->del(strings[2780]);
14916str->del(strings[2781]);
14917str->del(strings[2782]);
14918str->del(strings[2783]);
14919str->del(strings[2784]);
14920str->del(strings[2785]);
14921str->del(strings[2786]);
14922str->del(strings[2787]);
14923str->del(strings[2788]);
14924str->del(strings[2789]);
14925str->del(strings[2790]);
14926str->del(strings[2791]);
14927str->del(strings[2792]);
14928str->del(strings[2793]);
14929str->del(strings[2794]);
14930str->del(strings[2795]);
14931str->del(strings[2796]);
14932str->del(strings[2797]);
14933str->del(strings[2798]);
14934str->del(strings[2799]);
14935str->del(strings[2800]);
14936str->del(strings[2801]);
14937str->del(strings[2802]);
14938str->del(strings[2803]);
14939str->del(strings[2804]);
14940str->del(strings[2805]);
14941str->del(strings[2806]);
14942str->del(strings[2807]);
14943str->del(strings[2808]);
14944str->del(strings[2809]);
14945str->del(strings[2810]);
14946str->del(strings[2811]);
14947str->del(strings[2812]);
14948str->del(strings[2813]);
14949str->del(strings[2814]);
14950str->del(strings[2815]);
14951str->del(strings[2816]);
14952str->del(strings[2817]);
14953str->del(strings[2817]);
14954str->del(strings[2818]);
14955str->del(strings[2819]);
14956str->del(strings[2820]);
14957str->del(strings[2821]);
14958str->del(strings[2822]);
14959str->del(strings[2823]);
14960str->del(strings[2824]);
14961str->del(strings[2825]);
14962str->del(strings[2826]);
14963str->del(strings[2827]);
14964str->del(strings[2828]);
14965str->del(strings[2829]);
14966str->del(strings[2830]);
14967str->del(strings[2831]);
14968str->del(strings[2832]);
14969str->del(strings[2833]);
14970str->del(strings[2834]);
14971str->del(strings[2835]);
14972str->del(strings[2836]);
14973str->del(strings[2837]);
14974str->del(strings[2838]);
14975str->del(strings[2839]);
14976str->del(strings[2840]);
14977str->del(strings[2841]);
14978str->del(strings[2842]);
14979str->del(strings[2843]);
14980str->del(strings[2844]);
14981str->del(strings[2845]);
14982str->del(strings[2846]);
14983str->del(strings[2847]);
14984str->del(strings[2609]);
14985str->del(strings[2610]);
14986str->del(strings[2611]);
14987str->del(strings[2612]);
14988str->del(strings[2630]);
14989str->del(strings[2613]);
14990str->del(strings[2631]);
14991str->del(strings[2614]);
14992str->del(strings[2615]);
14993str->del(strings[2616]);
14994str->del(strings[2617]);
14995str->del(strings[2848]);
14996str->del(strings[2849]);
14997str->del(strings[2628]);
14998str->del(strings[2629]);
14999str->del(strings[2850]);
15000str->del(strings[2851]);
15001str->del(strings[2852]);
15002str->del(strings[2853]);
15003str->del(strings[2633]);
15004str->del(strings[1945]);
15005str->del(strings[2061]);
15006str->del(strings[1960]);
15007str->del(strings[2592]);
15008str->del(strings[2593]);
15009str->del(strings[2594]);
15010str->del(strings[2589]);
15011str->del(strings[2590]);
15012str->del(strings[2591]);
15013str->del(strings[2623]);
15014str->del(strings[2627]);
15015str->del(strings[2626]);
15016str->del(strings[2625]);
15017str->del(strings[2599]);
15018str->del(strings[2635]);
15019str->del(strings[2636]);
15020str->del(strings[2637]);
15021str->del(strings[2638]);
15022str->del(strings[2624]);
15023str->del(strings[2632]);
15024str->del(strings[2854]);
15025str->del(strings[2855]);
15026str->del(strings[2856]);
15027str->del(strings[2857]);
15028str->del(strings[2598]);
15029str->del(strings[2858]);
15030str->del(strings[2859]);
15031str->del(strings[2639]);
15032strings[2795] = str->add(strings[2795]);
15033strings[469] = str->add(strings[469]);
15034strings[2795] = str->add(strings[2795]);
15035strings[2795] = str->add(strings[2795]);
15036strings[3057] = str->add(strings[3057]);
15037strings[469] = str->add(strings[469]);
15038strings[3059] = str->add("images/457");
15039strings[3060] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/457");
15040strings[469] = str->add(strings[469]);
15041strings[3059] = str->add(strings[3059]);
15042strings[1841] = str->add(strings[1841]);
15043strings[1841] = str->add(strings[1841]);
15044strings[469] = str->add(strings[469]);
15045strings[2784] = str->add(strings[2784]);
15046strings[469] = str->add(strings[469]);
15047strings[3057] = str->add(strings[3057]);
15048strings[3047] = str->add(strings[3047]);
15049strings[3058] = str->add(strings[3058]);
15050strings[469] = str->add(strings[469]);
15051strings[2795] = str->add(strings[2795]);
15052strings[3057] = str->add(strings[3057]);
15053strings[469] = str->add(strings[469]);
15054strings[3059] = str->add(strings[3059]);
15055strings[1841] = str->add(strings[1841]);
15056strings[1841] = str->add(strings[1841]);
15057strings[469] = str->add(strings[469]);
15058strings[2784] = str->add(strings[2784]);
15059strings[469] = str->add(strings[469]);
15060strings[3057] = str->add(strings[3057]);
15061strings[3048] = str->add(strings[3048]);
15062strings[3058] = str->add(strings[3058]);
15063strings[469] = str->add(strings[469]);
15064strings[2795] = str->add(strings[2795]);
15065strings[3057] = str->add(strings[3057]);
15066strings[469] = str->add(strings[469]);
15067strings[3059] = str->add(strings[3059]);
15068strings[1841] = str->add(strings[1841]);
15069strings[1841] = str->add(strings[1841]);
15070strings[469] = str->add(strings[469]);
15071strings[2784] = str->add(strings[2784]);
15072strings[469] = str->add(strings[469]);
15073strings[3057] = str->add(strings[3057]);
15074strings[3050] = str->add(strings[3050]);
15075strings[3058] = str->add(strings[3058]);
15076strings[64] = str->add(strings[64]);
15077strings[2790] = str->add(strings[2790]);
15078str->del(strings[64]);
15079str->del(strings[2790]);
15080strings[469] = str->add(strings[469]);
15081strings[2790] = str->add(strings[2790]);
15082strings[2790] = str->add(strings[2790]);
15083strings[3057] = str->add(strings[3057]);
15084strings[469] = str->add(strings[469]);
15085strings[3061] = str->add("images/451");
15086strings[3062] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/451");
15087strings[469] = str->add(strings[469]);
15088strings[3061] = str->add(strings[3061]);
15089strings[1841] = str->add(strings[1841]);
15090strings[1841] = str->add(strings[1841]);
15091strings[469] = str->add(strings[469]);
15092strings[2784] = str->add(strings[2784]);
15093strings[469] = str->add(strings[469]);
15094strings[3057] = str->add(strings[3057]);
15095strings[3039] = str->add(strings[3039]);
15096strings[3058] = str->add(strings[3058]);
15097strings[469] = str->add(strings[469]);
15098strings[2795] = str->add(strings[2795]);
15099strings[3057] = str->add(strings[3057]);
15100strings[469] = str->add(strings[469]);
15101strings[3059] = str->add(strings[3059]);
15102strings[1841] = str->add(strings[1841]);
15103strings[1841] = str->add(strings[1841]);
15104str->del(strings[3055]);
15105str->del(strings[3056]);
15106str->del(strings[3057]);
15107str->del(strings[3058]);
15108str->del(strings[3057]);
15109str->del(strings[1841]);
15110str->del(strings[1841]);
15111str->del(strings[3057]);
15112str->del(strings[3058]);
15113str->del(strings[3057]);
15114str->del(strings[1841]);
15115str->del(strings[1841]);
15116str->del(strings[3057]);
15117str->del(strings[3058]);
15118str->del(strings[3057]);
15119str->del(strings[1841]);
15120str->del(strings[1841]);
15121str->del(strings[3057]);
15122str->del(strings[3058]);
15123str->del(strings[3057]);
15124str->del(strings[1841]);
15125str->del(strings[1841]);
15126str->del(strings[3057]);
15127str->del(strings[3058]);
15128str->del(strings[3057]);
15129str->del(strings[1841]);
15130str->del(strings[1841]);
15131strings[3063] = str->add("e,action,mouse,move");
15132strings[3064] = str->add("e");
15133strings[3065] = str->add("e,state,unselected");
15134strings[3064] = str->add(strings[3064]);
15135strings[3065] = str->add(strings[3065]);
15136strings[3064] = str->add(strings[3064]);
15137strings[3065] = str->add(strings[3065]);
15138strings[3064] = str->add(strings[3064]);
15139strings[3065] = str->add(strings[3065]);
15140strings[3064] = str->add(strings[3064]);
15141strings[3065] = str->add(strings[3065]);
15142strings[3064] = str->add(strings[3064]);
15143strings[3065] = str->add(strings[3065]);
15144strings[3064] = str->add(strings[3064]);
15145strings[3063] = str->add(strings[3063]);
15146strings[3064] = str->add(strings[3064]);
15147strings[3063] = str->add(strings[3063]);
15148strings[3064] = str->add(strings[3064]);
15149str->del(strings[3063]);
15150str->del(strings[3064]);
15151strings[1932] = str->add(strings[1932]);
15152strings[3066] = str->add("sel");
15153strings[3067] = str->add("program,start");
15154strings[3068] = str->add("unsel");
15155str->del(strings[3065]);
15156str->del(strings[3064]);
15157str->del(strings[3065]);
15158str->del(strings[3064]);
15159strings[1932] = str->add(strings[1932]);
15160strings[3066] = str->add(strings[3066]);
15161strings[3067] = str->add(strings[3067]);
15162strings[3068] = str->add(strings[3068]);
15163str->del(strings[3065]);
15164str->del(strings[3064]);
15165strings[3067] = str->add(strings[3067]);
15166strings[3068] = str->add(strings[3068]);
15167strings[1932] = str->add(strings[1932]);
15168strings[3068] = str->add(strings[3068]);
15169str->del(strings[3065]);
15170str->del(strings[3064]);
15171str->del(strings[3065]);
15172str->del(strings[3064]);
15173str->del(strings[3065]);
15174str->del(strings[3064]);
15175str->del(strings[3063]);
15176str->del(strings[3064]);
15177str->del(strings[3063]);
15178str->del(strings[3064]);
15179str->del(strings[1932]);
15180str->del(strings[3066]);
15181str->del(strings[3067]);
15182str->del(strings[3068]);
15183str->del(strings[1932]);
15184str->del(strings[3066]);
15185str->del(strings[3067]);
15186str->del(strings[3068]);
15187str->del(strings[3067]);
15188str->del(strings[3068]);
15189str->del(strings[1932]);
15190str->del(strings[3068]);
15191str->del(strings[64]);
15192str->del(strings[3021]);
15193strings[64] = str->add(strings[64]);
15194strings[2913] = str->add(strings[2913]);
15195strings[469] = str->add(strings[469]);
15196strings[3042] = str->add(strings[3042]);
15197strings[3069] = str->add("resize");
15198str->del(strings[469]);
15199strings[379] = str->add(strings[379]);
15200strings[3049] = str->add(strings[3049]);
15201strings[3049] = str->add(strings[3049]);
15202str->del(strings[3049]);
15203strings[3070] = str->add("3817_001....");
15204str->del(strings[3070]);
15205strings[3071] = str->add("3817_001...");
15206strings[3071] = str->add(strings[3071]);
15207strings[3069] = str->add(strings[3069]);
15208strings[469] = str->add(strings[469]);
15209strings[3027] = str->add(strings[3027]);
15210strings[469] = str->add(strings[469]);
15211strings[3045] = str->add(strings[3045]);
15212str->del(strings[3071]);
15213strings[3049] = str->add(strings[3049]);
15214str->del(strings[3049]);
15215strings[3071] = str->add(strings[3071]);
15216strings[469] = str->add(strings[469]);
15217strings[3042] = str->add(strings[3042]);
15218strings[3069] = str->add(strings[3069]);
15219str->del(strings[469]);
15220strings[379] = str->add(strings[379]);
15221strings[3047] = str->add(strings[3047]);
15222strings[3047] = str->add(strings[3047]);
15223str->del(strings[3047]);
15224strings[3072] = str->add("3899_001....");
15225str->del(strings[3072]);
15226strings[3073] = str->add("3899_001...");
15227strings[3073] = str->add(strings[3073]);
15228strings[3069] = str->add(strings[3069]);
15229strings[469] = str->add(strings[469]);
15230strings[3027] = str->add(strings[3027]);
15231strings[469] = str->add(strings[469]);
15232strings[3045] = str->add(strings[3045]);
15233str->del(strings[3073]);
15234strings[3047] = str->add(strings[3047]);
15235str->del(strings[3047]);
15236strings[3073] = str->add(strings[3073]);
15237strings[469] = str->add(strings[469]);
15238strings[3042] = str->add(strings[3042]);
15239strings[3069] = str->add(strings[3069]);
15240str->del(strings[469]);
15241strings[379] = str->add(strings[379]);
15242strings[3048] = str->add(strings[3048]);
15243strings[3048] = str->add(strings[3048]);
15244str->del(strings[3048]);
15245strings[3074] = str->add("ACCORD E...");
15246strings[3074] = str->add(strings[3074]);
15247strings[3069] = str->add(strings[3069]);
15248strings[469] = str->add(strings[469]);
15249strings[3027] = str->add(strings[3027]);
15250strings[469] = str->add(strings[469]);
15251strings[3045] = str->add(strings[3045]);
15252str->del(strings[3074]);
15253strings[3048] = str->add(strings[3048]);
15254str->del(strings[3048]);
15255strings[3074] = str->add(strings[3074]);
15256strings[469] = str->add(strings[469]);
15257strings[3042] = str->add(strings[3042]);
15258strings[3069] = str->add(strings[3069]);
15259str->del(strings[469]);
15260strings[379] = str->add(strings[379]);
15261strings[3050] = str->add(strings[3050]);
15262strings[3050] = str->add(strings[3050]);
15263str->del(strings[3050]);
15264strings[3075] = str->add("NVIDIA-Lin...");
15265str->del(strings[3075]);
15266strings[3076] = str->add("NVIDIA-Li...");
15267strings[3076] = str->add(strings[3076]);
15268strings[3069] = str->add(strings[3069]);
15269strings[469] = str->add(strings[469]);
15270strings[3027] = str->add(strings[3027]);
15271strings[469] = str->add(strings[469]);
15272strings[3045] = str->add(strings[3045]);
15273str->del(strings[3076]);
15274strings[3050] = str->add(strings[3050]);
15275str->del(strings[3050]);
15276strings[3076] = str->add(strings[3076]);
15277strings[469] = str->add(strings[469]);
15278strings[3042] = str->add(strings[3042]);
15279strings[3069] = str->add(strings[3069]);
15280str->del(strings[469]);
15281strings[379] = str->add(strings[379]);
15282strings[3039] = str->add(strings[3039]);
15283strings[3039] = str->add(strings[3039]);
15284strings[3039] = str->add(strings[3039]);
15285strings[3069] = str->add(strings[3069]);
15286strings[469] = str->add(strings[469]);
15287strings[3027] = str->add(strings[3027]);
15288strings[469] = str->add(strings[469]);
15289strings[3045] = str->add(strings[3045]);
15290str->del(strings[3069]);
15291str->del(strings[3069]);
15292str->del(strings[3069]);
15293str->del(strings[3069]);
15294str->del(strings[3069]);
15295str->del(strings[3069]);
15296str->del(strings[3069]);
15297str->del(strings[3069]);
15298str->del(strings[3069]);
15299str->del(strings[3069]);
15300strings[3077] = str->add("e,action,mouse,move");
15301strings[3078] = str->add("e");
15302str->del(strings[3077]);
15303str->del(strings[3078]);
15304str->del(strings[7]);
15305str->del(strings[3033]);
15306strings[7] = str->add(strings[7]);
15307strings[2062] = str->add(strings[2062]);
15308strings[3079] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/54");
15309strings[7] = str->add(strings[7]);
15310strings[2062] = str->add(strings[2062]);
15311str->del(strings[469]);
15312str->del(strings[3042]);
15313str->del(strings[469]);
15314str->del(strings[3027]);
15315str->del(strings[469]);
15316str->del(strings[3045]);
15317str->del(strings[3050]);
15318str->del(strings[379]);
15319strings[3080] = str->add("e,action,mouse,move");
15320strings[3081] = str->add("e");
15321strings[3082] = str->add("e,state,selected");
15322strings[3081] = str->add(strings[3081]);
15323strings[3082] = str->add(strings[3082]);
15324strings[3081] = str->add(strings[3081]);
15325strings[3082] = str->add(strings[3082]);
15326strings[3081] = str->add(strings[3081]);
15327strings[3082] = str->add(strings[3082]);
15328strings[3081] = str->add(strings[3081]);
15329strings[3082] = str->add(strings[3082]);
15330strings[3081] = str->add(strings[3081]);
15331strings[3082] = str->add(strings[3082]);
15332strings[3081] = str->add(strings[3081]);
15333strings[2224] = str->add(strings[2224]);
15334strings[469] = str->add(strings[469]);
15335strings[2688] = str->add(strings[2688]);
15336strings[4] = str->add(strings[4]);
15337strings[469] = str->add(strings[469]);
15338strings[2685] = str->add(strings[2685]);
15339strings[1925] = str->add(strings[1925]);
15340strings[1926] = str->add(strings[1926]);
15341strings[3083] = str->add("icon");
15342strings[2494] = str->add(strings[2494]);
15343strings[469] = str->add(strings[469]);
15344strings[2711] = str->add(strings[2711]);
15345strings[2514] = str->add(strings[2514]);
15346strings[469] = str->add(strings[469]);
15347strings[2680] = str->add(strings[2680]);
15348strings[2536] = str->add(strings[2536]);
15349strings[469] = str->add(strings[469]);
15350strings[2713] = str->add(strings[2713]);
15351strings[3080] = str->add(strings[3080]);
15352strings[3081] = str->add(strings[3081]);
15353strings[3080] = str->add(strings[3080]);
15354strings[3081] = str->add(strings[3081]);
15355strings[3080] = str->add(strings[3080]);
15356strings[3081] = str->add(strings[3081]);
15357str->del(strings[3080]);
15358str->del(strings[3081]);
15359strings[3084] = str->add("program,start");
15360strings[3085] = str->add("sel");
15361str->del(strings[3082]);
15362str->del(strings[3081]);
15363str->del(strings[3082]);
15364str->del(strings[3081]);
15365strings[3084] = str->add(strings[3084]);
15366strings[3085] = str->add(strings[3085]);
15367str->del(strings[3082]);
15368str->del(strings[3081]);
15369strings[3084] = str->add(strings[3084]);
15370strings[3085] = str->add(strings[3085]);
15371strings[1932] = str->add(strings[1932]);
15372strings[3085] = str->add(strings[3085]);
15373str->del(strings[3082]);
15374str->del(strings[3081]);
15375str->del(strings[3082]);
15376str->del(strings[3081]);
15377str->del(strings[3082]);
15378str->del(strings[3081]);
15379str->del(strings[3080]);
15380str->del(strings[3081]);
15381str->del(strings[3080]);
15382str->del(strings[3081]);
15383str->del(strings[3080]);
15384str->del(strings[3081]);
15385str->del(strings[3084]);
15386str->del(strings[3085]);
15387str->del(strings[3084]);
15388str->del(strings[3085]);
15389str->del(strings[3084]);
15390str->del(strings[3085]);
15391str->del(strings[1932]);
15392str->del(strings[3085]);
15393strings[361] = str->add(strings[361]);
15394strings[362] = str->add(strings[362]);
15395strings[361] = str->add(strings[361]);
15396str->del(strings[361]);
15397strings[362] = str->add(strings[362]);
15398str->del(strings[362]);
15399strings[3086] = str->add("resize");
15400str->del(strings[3086]);
15401strings[64] = str->add(strings[64]);
15402strings[2581] = str->add(strings[2581]);
15403strings[64] = str->add(strings[64]);
15404strings[3087] = str->add("load");
15405strings[1841] = str->add(strings[1841]);
15406strings[64] = str->add(strings[64]);
15407strings[1949] = str->add(strings[1949]);
15408strings[64] = str->add(strings[64]);
15409strings[1880] = str->add(strings[1880]);
15410strings[64] = str->add(strings[64]);
15411strings[1876] = str->add(strings[1876]);
15412str->del(strings[64]);
15413strings[379] = str->add(strings[379]);
15414strings[1842] = str->add(strings[1842]);
15415strings[1842] = str->add(strings[1842]);
15416strings[64] = str->add(strings[64]);
15417strings[1874] = str->add(strings[1874]);
15418strings[64] = str->add(strings[64]);
15419strings[2583] = str->add(strings[2583]);
15420strings[3087] = str->add(strings[3087]);
15421strings[1841] = str->add(strings[1841]);
15422strings[64] = str->add(strings[64]);
15423strings[2584] = str->add(strings[2584]);
15424strings[3087] = str->add(strings[3087]);
15425strings[1841] = str->add(strings[1841]);
15426strings[469] = str->add(strings[469]);
15427strings[2688] = str->add(strings[2688]);
15428strings[3087] = str->add(strings[3087]);
15429strings[469] = str->add(strings[469]);
15430strings[2902] = str->add(strings[2902]);
15431strings[1841] = str->add(strings[1841]);
15432strings[3088] = str->add("resize");
15433strings[3088] = str->add(strings[3088]);
15434strings[64] = str->add(strings[64]);
15435strings[2585] = str->add(strings[2585]);
15436strings[64] = str->add(strings[64]);
15437strings[3087] = str->add(strings[3087]);
15438strings[2224] = str->add(strings[2224]);
15439strings[1841] = str->add(strings[1841]);
15440str->del(strings[64]);
15441strings[385] = str->add(strings[385]);
15442strings[2224] = str->add(strings[2224]);
15443strings[64] = str->add(strings[64]);
15444strings[2886] = str->add(strings[2886]);
15445strings[64] = str->add(strings[64]);
15446strings[2888] = str->add(strings[2888]);
15447strings[64] = str->add(strings[64]);
15448strings[2582] = str->add(strings[2582]);
15449strings[3087] = str->add(strings[3087]);
15450strings[1841] = str->add(strings[1841]);
15451strings[64] = str->add(strings[64]);
15452strings[2583] = str->add(strings[2583]);
15453strings[3087] = str->add(strings[3087]);
15454strings[1841] = str->add(strings[1841]);
15455strings[64] = str->add(strings[64]);
15456strings[2584] = str->add(strings[2584]);
15457strings[3087] = str->add(strings[3087]);
15458strings[1841] = str->add(strings[1841]);
15459strings[469] = str->add(strings[469]);
15460strings[2685] = str->add(strings[2685]);
15461strings[2685] = str->add(strings[2685]);
15462strings[3087] = str->add(strings[3087]);
15463strings[469] = str->add(strings[469]);
15464strings[3089] = str->add("images/321");
15465strings[3090] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/321");
15466strings[469] = str->add(strings[469]);
15467strings[3089] = str->add(strings[3089]);
15468strings[1841] = str->add(strings[1841]);
15469strings[3088] = str->add(strings[3088]);
15470strings[3088] = str->add(strings[3088]);
15471strings[64] = str->add(strings[64]);
15472strings[2585] = str->add(strings[2585]);
15473strings[64] = str->add(strings[64]);
15474strings[3087] = str->add(strings[3087]);
15475strings[4] = str->add(strings[4]);
15476strings[1841] = str->add(strings[1841]);
15477str->del(strings[64]);
15478strings[385] = str->add(strings[385]);
15479strings[4] = str->add(strings[4]);
15480strings[64] = str->add(strings[64]);
15481strings[2886] = str->add(strings[2886]);
15482strings[64] = str->add(strings[64]);
15483strings[2888] = str->add(strings[2888]);
15484strings[64] = str->add(strings[64]);
15485strings[2583] = str->add(strings[2583]);
15486strings[3087] = str->add(strings[3087]);
15487strings[1841] = str->add(strings[1841]);
15488strings[64] = str->add(strings[64]);
15489strings[2584] = str->add(strings[2584]);
15490strings[3087] = str->add(strings[3087]);
15491strings[1841] = str->add(strings[1841]);
15492strings[1926] = str->add(strings[1926]);
15493strings[3083] = str->add(strings[3083]);
15494strings[1926] = str->add(strings[1926]);
15495strings[3083] = str->add(strings[3083]);
15496strings[3087] = str->add(strings[3087]);
15497strings[1926] = str->add(strings[1926]);
15498strings[1552] = str->add(strings[1552]);
15499strings[3091] = str->add("/usr/devel/lib/enlightenment/modules/gadman/e-module-gadman.edj//://images/0");
15500strings[1926] = str->add(strings[1926]);
15501strings[1552] = str->add(strings[1552]);
15502strings[1841] = str->add(strings[1841]);
15503strings[3088] = str->add(strings[3088]);
15504strings[3088] = str->add(strings[3088]);
15505strings[64] = str->add(strings[64]);
15506strings[2585] = str->add(strings[2585]);
15507strings[64] = str->add(strings[64]);
15508strings[3087] = str->add(strings[3087]);
15509strings[1925] = str->add(strings[1925]);
15510strings[1841] = str->add(strings[1841]);
15511str->del(strings[64]);
15512strings[385] = str->add(strings[385]);
15513strings[1925] = str->add(strings[1925]);
15514strings[64] = str->add(strings[64]);
15515strings[2886] = str->add(strings[2886]);
15516strings[64] = str->add(strings[64]);
15517strings[2888] = str->add(strings[2888]);
15518strings[64] = str->add(strings[64]);
15519strings[2583] = str->add(strings[2583]);
15520strings[3087] = str->add(strings[3087]);
15521strings[1841] = str->add(strings[1841]);
15522strings[64] = str->add(strings[64]);
15523strings[2584] = str->add(strings[2584]);
15524strings[3087] = str->add(strings[3087]);
15525strings[1841] = str->add(strings[1841]);
15526strings[469] = str->add(strings[469]);
15527strings[2711] = str->add(strings[2711]);
15528strings[2711] = str->add(strings[2711]);
15529strings[3087] = str->add(strings[3087]);
15530strings[469] = str->add(strings[469]);
15531strings[3092] = str->add("images/335");
15532strings[3093] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/335");
15533strings[469] = str->add(strings[469]);
15534strings[3092] = str->add(strings[3092]);
15535strings[1841] = str->add(strings[1841]);
15536strings[3088] = str->add(strings[3088]);
15537strings[3088] = str->add(strings[3088]);
15538strings[64] = str->add(strings[64]);
15539strings[2585] = str->add(strings[2585]);
15540strings[64] = str->add(strings[64]);
15541strings[3087] = str->add(strings[3087]);
15542strings[2494] = str->add(strings[2494]);
15543strings[1841] = str->add(strings[1841]);
15544str->del(strings[64]);
15545strings[385] = str->add(strings[385]);
15546strings[2494] = str->add(strings[2494]);
15547strings[64] = str->add(strings[64]);
15548strings[2886] = str->add(strings[2886]);
15549strings[64] = str->add(strings[64]);
15550strings[2888] = str->add(strings[2888]);
15551strings[64] = str->add(strings[64]);
15552strings[2583] = str->add(strings[2583]);
15553strings[3087] = str->add(strings[3087]);
15554strings[1841] = str->add(strings[1841]);
15555strings[64] = str->add(strings[64]);
15556strings[2584] = str->add(strings[2584]);
15557strings[3087] = str->add(strings[3087]);
15558strings[1841] = str->add(strings[1841]);
15559strings[469] = str->add(strings[469]);
15560strings[2680] = str->add(strings[2680]);
15561strings[2680] = str->add(strings[2680]);
15562strings[3087] = str->add(strings[3087]);
15563strings[469] = str->add(strings[469]);
15564strings[3094] = str->add("images/317");
15565strings[3095] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/317");
15566strings[469] = str->add(strings[469]);
15567strings[3094] = str->add(strings[3094]);
15568strings[1841] = str->add(strings[1841]);
15569strings[3088] = str->add(strings[3088]);
15570strings[3088] = str->add(strings[3088]);
15571strings[64] = str->add(strings[64]);
15572strings[2585] = str->add(strings[2585]);
15573strings[64] = str->add(strings[64]);
15574strings[3087] = str->add(strings[3087]);
15575strings[2514] = str->add(strings[2514]);
15576strings[1841] = str->add(strings[1841]);
15577str->del(strings[64]);
15578strings[385] = str->add(strings[385]);
15579strings[2514] = str->add(strings[2514]);
15580strings[64] = str->add(strings[64]);
15581strings[2886] = str->add(strings[2886]);
15582strings[64] = str->add(strings[64]);
15583strings[2888] = str->add(strings[2888]);
15584strings[64] = str->add(strings[64]);
15585strings[2583] = str->add(strings[2583]);
15586strings[3087] = str->add(strings[3087]);
15587strings[1841] = str->add(strings[1841]);
15588strings[64] = str->add(strings[64]);
15589strings[2584] = str->add(strings[2584]);
15590strings[3087] = str->add(strings[3087]);
15591strings[1841] = str->add(strings[1841]);
15592strings[469] = str->add(strings[469]);
15593strings[2713] = str->add(strings[2713]);
15594strings[2713] = str->add(strings[2713]);
15595strings[3087] = str->add(strings[3087]);
15596strings[469] = str->add(strings[469]);
15597strings[3096] = str->add("images/330");
15598strings[3097] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/330");
15599strings[469] = str->add(strings[469]);
15600strings[3096] = str->add(strings[3096]);
15601strings[1841] = str->add(strings[1841]);
15602strings[3088] = str->add(strings[3088]);
15603strings[3088] = str->add(strings[3088]);
15604strings[64] = str->add(strings[64]);
15605strings[2585] = str->add(strings[2585]);
15606strings[64] = str->add(strings[64]);
15607strings[3087] = str->add(strings[3087]);
15608strings[2536] = str->add(strings[2536]);
15609strings[1841] = str->add(strings[1841]);
15610str->del(strings[64]);
15611strings[385] = str->add(strings[385]);
15612strings[2536] = str->add(strings[2536]);
15613strings[64] = str->add(strings[64]);
15614strings[2886] = str->add(strings[2886]);
15615strings[64] = str->add(strings[64]);
15616strings[2888] = str->add(strings[2888]);
15617strings[3088] = str->add(strings[3088]);
15618strings[3088] = str->add(strings[3088]);
15619strings[3088] = str->add(strings[3088]);
15620strings[3088] = str->add(strings[3088]);
15621strings[3088] = str->add(strings[3088]);
15622strings[3088] = str->add(strings[3088]);
15623strings[3088] = str->add(strings[3088]);
15624strings[3088] = str->add(strings[3088]);
15625strings[3088] = str->add(strings[3088]);
15626strings[3088] = str->add(strings[3088]);
15627strings[3088] = str->add(strings[3088]);
15628strings[3088] = str->add(strings[3088]);
15629strings[3088] = str->add(strings[3088]);
15630strings[3088] = str->add(strings[3088]);
15631strings[3088] = str->add(strings[3088]);
15632strings[3088] = str->add(strings[3088]);
15633strings[3088] = str->add(strings[3088]);
15634strings[3088] = str->add(strings[3088]);
15635strings[3088] = str->add(strings[3088]);
15636strings[3088] = str->add(strings[3088]);
15637strings[1933] = str->add(strings[1933]);
15638str->del(strings[1933]);
15639str->del(strings[64]);
15640str->del(strings[2583]);
15641strings[1933] = str->add(strings[1933]);
15642str->del(strings[1933]);
15643str->del(strings[64]);
15644str->del(strings[2584]);
15645strings[1933] = str->add(strings[1933]);
15646str->del(strings[1933]);
15647str->del(strings[469]);
15648str->del(strings[2708]);
15649strings[1933] = str->add(strings[1933]);
15650str->del(strings[1933]);
15651str->del(strings[3001]);
15652str->del(strings[3001]);
15653str->del(strings[3001]);
15654str->del(strings[64]);
15655str->del(strings[2585]);
15656strings[1933] = str->add(strings[1933]);
15657str->del(strings[1933]);
15658str->del(strings[64]);
15659str->del(strings[2582]);
15660strings[1933] = str->add(strings[1933]);
15661str->del(strings[1933]);
15662str->del(strings[64]);
15663str->del(strings[2583]);
15664strings[1933] = str->add(strings[1933]);
15665str->del(strings[1933]);
15666str->del(strings[64]);
15667str->del(strings[2584]);
15668strings[1933] = str->add(strings[1933]);
15669str->del(strings[1933]);
15670str->del(strings[469]);
15671str->del(strings[2677]);
15672strings[1933] = str->add(strings[1933]);
15673str->del(strings[1933]);
15674str->del(strings[1726]);
15675str->del(strings[1726]);
15676str->del(strings[1726]);
15677str->del(strings[64]);
15678str->del(strings[2585]);
15679strings[1933] = str->add(strings[1933]);
15680str->del(strings[1933]);
15681str->del(strings[64]);
15682str->del(strings[2583]);
15683strings[1933] = str->add(strings[1933]);
15684str->del(strings[1933]);
15685str->del(strings[64]);
15686str->del(strings[2584]);
15687strings[1933] = str->add(strings[1933]);
15688str->del(strings[1933]);
15689str->del(strings[469]);
15690str->del(strings[2678]);
15691strings[1933] = str->add(strings[1933]);
15692str->del(strings[1933]);
15693str->del(strings[3002]);
15694str->del(strings[3002]);
15695str->del(strings[3002]);
15696str->del(strings[64]);
15697str->del(strings[2585]);
15698strings[1933] = str->add(strings[1933]);
15699str->del(strings[1933]);
15700str->del(strings[64]);
15701str->del(strings[2583]);
15702strings[1933] = str->add(strings[1933]);
15703str->del(strings[1933]);
15704str->del(strings[64]);
15705str->del(strings[2584]);
15706strings[1933] = str->add(strings[1933]);
15707str->del(strings[1933]);
15708str->del(strings[469]);
15709str->del(strings[2676]);
15710strings[1933] = str->add(strings[1933]);
15711str->del(strings[1933]);
15712str->del(strings[1724]);
15713str->del(strings[1724]);
15714str->del(strings[1724]);
15715str->del(strings[64]);
15716str->del(strings[2585]);
15717strings[1933] = str->add(strings[1933]);
15718str->del(strings[1933]);
15719str->del(strings[64]);
15720str->del(strings[2583]);
15721strings[1933] = str->add(strings[1933]);
15722str->del(strings[1933]);
15723str->del(strings[64]);
15724str->del(strings[2584]);
15725strings[1933] = str->add(strings[1933]);
15726str->del(strings[1933]);
15727str->del(strings[469]);
15728str->del(strings[2675]);
15729strings[1933] = str->add(strings[1933]);
15730str->del(strings[1933]);
15731str->del(strings[1722]);
15732str->del(strings[1722]);
15733str->del(strings[1722]);
15734str->del(strings[64]);
15735str->del(strings[2585]);
15736strings[1933] = str->add(strings[1933]);
15737str->del(strings[1933]);
15738str->del(strings[64]);
15739str->del(strings[2582]);
15740strings[1933] = str->add(strings[1933]);
15741str->del(strings[1933]);
15742str->del(strings[64]);
15743str->del(strings[2583]);
15744strings[1933] = str->add(strings[1933]);
15745str->del(strings[1933]);
15746str->del(strings[64]);
15747str->del(strings[2584]);
15748strings[1933] = str->add(strings[1933]);
15749str->del(strings[1933]);
15750str->del(strings[469]);
15751str->del(strings[2674]);
15752strings[1933] = str->add(strings[1933]);
15753str->del(strings[1933]);
15754str->del(strings[3003]);
15755str->del(strings[3003]);
15756str->del(strings[3003]);
15757str->del(strings[64]);
15758str->del(strings[2585]);
15759strings[1933] = str->add(strings[1933]);
15760str->del(strings[1933]);
15761str->del(strings[1842]);
15762str->del(strings[1842]);
15763str->del(strings[64]);
15764str->del(strings[2581]);
15765str->del(strings[64]);
15766str->del(strings[2886]);
15767str->del(strings[64]);
15768str->del(strings[2888]);
15769str->del(strings[469]);
15770str->del(strings[3008]);
15771str->del(strings[3001]);
15772str->del(strings[385]);
15773str->del(strings[64]);
15774str->del(strings[2915]);
15775str->del(strings[64]);
15776str->del(strings[2886]);
15777str->del(strings[64]);
15778str->del(strings[2888]);
15779str->del(strings[469]);
15780str->del(strings[3011]);
15781str->del(strings[1726]);
15782str->del(strings[385]);
15783str->del(strings[64]);
15784str->del(strings[2886]);
15785str->del(strings[64]);
15786str->del(strings[2888]);
15787str->del(strings[469]);
15788str->del(strings[3013]);
15789str->del(strings[3002]);
15790str->del(strings[385]);
15791str->del(strings[64]);
15792str->del(strings[2886]);
15793str->del(strings[64]);
15794str->del(strings[2888]);
15795str->del(strings[469]);
15796str->del(strings[3015]);
15797str->del(strings[1724]);
15798str->del(strings[385]);
15799str->del(strings[64]);
15800str->del(strings[2886]);
15801str->del(strings[64]);
15802str->del(strings[2888]);
15803str->del(strings[469]);
15804str->del(strings[3017]);
15805str->del(strings[1722]);
15806str->del(strings[385]);
15807str->del(strings[64]);
15808str->del(strings[2915]);
15809str->del(strings[64]);
15810str->del(strings[2886]);
15811str->del(strings[64]);
15812str->del(strings[2888]);
15813str->del(strings[469]);
15814str->del(strings[3019]);
15815str->del(strings[3003]);
15816str->del(strings[385]);
15817str->del(strings[64]);
15818str->del(strings[1949]);
15819str->del(strings[64]);
15820str->del(strings[1880]);
15821str->del(strings[64]);
15822str->del(strings[1876]);
15823str->del(strings[379]);
15824str->del(strings[64]);
15825str->del(strings[1874]);
15826str->del(strings[361]);
15827str->del(strings[362]);
15828str->del(strings[1842]);
15829strings[1842] = str->add(strings[1842]);
15830str->del(strings[1842]);
15831strings[1842] = str->add(strings[1842]);
15832strings[3088] = str->add(strings[3088]);
15833strings[2224] = str->add(strings[2224]);
15834strings[2224] = str->add(strings[2224]);
15835strings[64] = str->add(strings[64]);
15836strings[2915] = str->add(strings[2915]);
15837strings[3088] = str->add(strings[3088]);
15838strings[4] = str->add(strings[4]);
15839strings[4] = str->add(strings[4]);
15840strings[3088] = str->add(strings[3088]);
15841strings[1925] = str->add(strings[1925]);
15842strings[1925] = str->add(strings[1925]);
15843strings[3088] = str->add(strings[3088]);
15844strings[2494] = str->add(strings[2494]);
15845strings[2494] = str->add(strings[2494]);
15846strings[3088] = str->add(strings[3088]);
15847strings[2514] = str->add(strings[2514]);
15848strings[2514] = str->add(strings[2514]);
15849strings[3088] = str->add(strings[3088]);
15850strings[2536] = str->add(strings[2536]);
15851strings[2536] = str->add(strings[2536]);
15852str->del(strings[64]);
15853str->del(strings[2913]);
15854strings[64] = str->add(strings[64]);
15855strings[3021] = str->add(strings[3021]);
15856str->del(strings[3087]);
15857str->del(strings[1841]);
15858str->del(strings[3087]);
15859str->del(strings[1841]);
15860str->del(strings[3087]);
15861str->del(strings[1841]);
15862str->del(strings[3087]);
15863str->del(strings[1841]);
15864str->del(strings[3088]);
15865str->del(strings[3088]);
15866str->del(strings[3087]);
15867str->del(strings[1841]);
15868str->del(strings[3087]);
15869str->del(strings[1841]);
15870str->del(strings[3087]);
15871str->del(strings[1841]);
15872str->del(strings[3087]);
15873str->del(strings[1841]);
15874str->del(strings[3087]);
15875str->del(strings[1841]);
15876str->del(strings[3088]);
15877str->del(strings[3088]);
15878str->del(strings[3087]);
15879str->del(strings[1841]);
15880str->del(strings[3087]);
15881str->del(strings[1841]);
15882str->del(strings[3087]);
15883str->del(strings[1841]);
15884str->del(strings[3087]);
15885str->del(strings[1841]);
15886str->del(strings[3088]);
15887str->del(strings[3088]);
15888str->del(strings[3087]);
15889str->del(strings[1841]);
15890str->del(strings[3087]);
15891str->del(strings[1841]);
15892str->del(strings[3087]);
15893str->del(strings[1841]);
15894str->del(strings[3087]);
15895str->del(strings[1841]);
15896str->del(strings[3088]);
15897str->del(strings[3088]);
15898str->del(strings[3087]);
15899str->del(strings[1841]);
15900str->del(strings[3087]);
15901str->del(strings[1841]);
15902str->del(strings[3087]);
15903str->del(strings[1841]);
15904str->del(strings[3087]);
15905str->del(strings[1841]);
15906str->del(strings[3088]);
15907str->del(strings[3088]);
15908str->del(strings[3087]);
15909str->del(strings[1841]);
15910str->del(strings[3087]);
15911str->del(strings[1841]);
15912str->del(strings[3087]);
15913str->del(strings[1841]);
15914str->del(strings[3087]);
15915str->del(strings[1841]);
15916str->del(strings[3088]);
15917str->del(strings[3088]);
15918str->del(strings[3087]);
15919str->del(strings[1841]);
15920str->del(strings[3088]);
15921str->del(strings[3088]);
15922str->del(strings[3088]);
15923str->del(strings[3088]);
15924str->del(strings[3088]);
15925str->del(strings[3088]);
15926str->del(strings[3088]);
15927str->del(strings[3088]);
15928str->del(strings[3088]);
15929str->del(strings[3088]);
15930str->del(strings[3088]);
15931str->del(strings[3088]);
15932str->del(strings[3088]);
15933str->del(strings[3088]);
15934str->del(strings[3088]);
15935str->del(strings[3088]);
15936str->del(strings[3088]);
15937str->del(strings[3088]);
15938str->del(strings[3088]);
15939str->del(strings[3088]);
15940str->del(strings[3088]);
15941str->del(strings[3088]);
15942str->del(strings[3088]);
15943str->del(strings[3088]);
15944str->del(strings[3088]);
15945str->del(strings[3088]);
15946strings[3098] = str->add("e,action,mouse,move");
15947strings[3099] = str->add("e");
15948strings[3098] = str->add(strings[3098]);
15949strings[3099] = str->add(strings[3099]);
15950strings[3098] = str->add(strings[3098]);
15951strings[3099] = str->add(strings[3099]);
15952strings[3098] = str->add(strings[3098]);
15953strings[3099] = str->add(strings[3099]);
15954strings[3098] = str->add(strings[3098]);
15955strings[3099] = str->add(strings[3099]);
15956str->del(strings[3098]);
15957str->del(strings[3099]);
15958str->del(strings[3098]);
15959str->del(strings[3099]);
15960str->del(strings[3098]);
15961str->del(strings[3099]);
15962str->del(strings[3098]);
15963str->del(strings[3099]);
15964str->del(strings[3098]);
15965str->del(strings[3099]);
15966str->del(strings[7]);
15967str->del(strings[2062]);
15968strings[7] = str->add(strings[7]);
15969strings[3100] = str->add("images/55");
15970strings[3101] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/55");
15971strings[7] = str->add(strings[7]);
15972strings[3100] = str->add(strings[3100]);
15973strings[3102] = str->add("e,action,mouse,move");
15974strings[3103] = str->add("e");
15975str->del(strings[3102]);
15976str->del(strings[3103]);
15977strings[3104] = str->add("e,action,mouse,move");
15978strings[3105] = str->add("e");
15979strings[3104] = str->add(strings[3104]);
15980strings[3105] = str->add(strings[3105]);
15981str->del(strings[3104]);
15982str->del(strings[3105]);
15983str->del(strings[3104]);
15984str->del(strings[3105]);
15985strings[1932] = str->add(strings[1932]);
15986strings[3106] = str->add("unsel");
15987str->del(strings[1932]);
15988str->del(strings[3106]);
15989strings[3107] = str->add("e,action,mouse,move");
15990strings[3108] = str->add("e");
15991strings[3107] = str->add(strings[3107]);
15992strings[3108] = str->add(strings[3108]);
15993str->del(strings[3107]);
15994str->del(strings[3108]);
15995str->del(strings[3107]);
15996str->del(strings[3108]);
15997strings[3109] = str->add("e,action,mouse,move");
15998strings[3110] = str->add("e");
15999strings[3109] = str->add(strings[3109]);
16000strings[3110] = str->add(strings[3110]);
16001str->del(strings[3109]);
16002str->del(strings[3110]);
16003str->del(strings[3109]);
16004str->del(strings[3110]);
16005str->del(strings[7]);
16006str->del(strings[3100]);
16007strings[7] = str->add(strings[7]);
16008strings[3111] = str->add("images/56");
16009strings[3112] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/56");
16010strings[7] = str->add(strings[7]);
16011strings[3111] = str->add(strings[3111]);
16012strings[3113] = str->add("e,action,mouse,move");
16013strings[3114] = str->add("e");
16014strings[3115] = str->add("e,state,unselected");
16015strings[3114] = str->add(strings[3114]);
16016strings[3115] = str->add(strings[3115]);
16017strings[3114] = str->add(strings[3114]);
16018strings[3115] = str->add(strings[3115]);
16019strings[3114] = str->add(strings[3114]);
16020strings[3115] = str->add(strings[3115]);
16021strings[3114] = str->add(strings[3114]);
16022strings[3115] = str->add(strings[3115]);
16023strings[3114] = str->add(strings[3114]);
16024strings[3115] = str->add(strings[3115]);
16025strings[3114] = str->add(strings[3114]);
16026strings[3113] = str->add(strings[3113]);
16027strings[3114] = str->add(strings[3114]);
16028str->del(strings[3113]);
16029str->del(strings[3114]);
16030strings[1932] = str->add(strings[1932]);
16031strings[3116] = str->add("sel");
16032strings[3117] = str->add("program,start");
16033strings[3118] = str->add("unsel");
16034str->del(strings[3115]);
16035str->del(strings[3114]);
16036str->del(strings[3115]);
16037str->del(strings[3114]);
16038strings[1932] = str->add(strings[1932]);
16039strings[3116] = str->add(strings[3116]);
16040strings[3117] = str->add(strings[3117]);
16041strings[3118] = str->add(strings[3118]);
16042str->del(strings[3115]);
16043str->del(strings[3114]);
16044strings[3117] = str->add(strings[3117]);
16045strings[3118] = str->add(strings[3118]);
16046strings[1932] = str->add(strings[1932]);
16047strings[3118] = str->add(strings[3118]);
16048str->del(strings[3115]);
16049str->del(strings[3114]);
16050str->del(strings[3115]);
16051str->del(strings[3114]);
16052str->del(strings[3115]);
16053str->del(strings[3114]);
16054str->del(strings[3113]);
16055str->del(strings[3114]);
16056str->del(strings[1932]);
16057str->del(strings[3116]);
16058str->del(strings[3117]);
16059str->del(strings[3118]);
16060str->del(strings[1932]);
16061str->del(strings[3116]);
16062str->del(strings[3117]);
16063str->del(strings[3118]);
16064str->del(strings[3117]);
16065str->del(strings[3118]);
16066str->del(strings[1932]);
16067str->del(strings[3118]);
16068str->del(strings[64]);
16069str->del(strings[3021]);
16070strings[64] = str->add(strings[64]);
16071strings[2913] = str->add(strings[2913]);
16072strings[3119] = str->add("e,action,mouse,move");
16073strings[3120] = str->add("e");
16074strings[3119] = str->add(strings[3119]);
16075strings[3120] = str->add(strings[3120]);
16076strings[3121] = str->add("e,state,selected");
16077strings[3120] = str->add(strings[3120]);
16078strings[3121] = str->add(strings[3121]);
16079strings[3120] = str->add(strings[3120]);
16080strings[3121] = str->add(strings[3121]);
16081strings[3120] = str->add(strings[3120]);
16082strings[3121] = str->add(strings[3121]);
16083strings[3120] = str->add(strings[3120]);
16084strings[3121] = str->add(strings[3121]);
16085strings[3120] = str->add(strings[3120]);
16086strings[3121] = str->add(strings[3121]);
16087strings[3120] = str->add(strings[3120]);
16088str->del(strings[3119]);
16089str->del(strings[3120]);
16090str->del(strings[3119]);
16091str->del(strings[3120]);
16092strings[3122] = str->add("program,start");
16093strings[3123] = str->add("sel");
16094str->del(strings[3121]);
16095str->del(strings[3120]);
16096str->del(strings[3121]);
16097str->del(strings[3120]);
16098strings[3122] = str->add(strings[3122]);
16099strings[3123] = str->add(strings[3123]);
16100str->del(strings[3121]);
16101str->del(strings[3120]);
16102strings[3122] = str->add(strings[3122]);
16103strings[3123] = str->add(strings[3123]);
16104strings[1932] = str->add(strings[1932]);
16105strings[3123] = str->add(strings[3123]);
16106str->del(strings[3121]);
16107str->del(strings[3120]);
16108strings[3122] = str->add(strings[3122]);
16109strings[3124] = str->add("e_in");
16110str->del(strings[3121]);
16111str->del(strings[3120]);
16112str->del(strings[3121]);
16113str->del(strings[3120]);
16114str->del(strings[3122]);
16115str->del(strings[3123]);
16116str->del(strings[3122]);
16117str->del(strings[3123]);
16118str->del(strings[3122]);
16119str->del(strings[3123]);
16120str->del(strings[1932]);
16121str->del(strings[3123]);
16122str->del(strings[3122]);
16123str->del(strings[3124]);
16124str->del(strings[64]);
16125str->del(strings[2913]);
16126strings[64] = str->add(strings[64]);
16127strings[3021] = str->add(strings[3021]);
16128strings[3125] = str->add("e,action,mouse,move");
16129strings[3126] = str->add("e");
16130str->del(strings[3125]);
16131str->del(strings[3126]);
16132strings[361] = str->add(strings[361]);
16133strings[362] = str->add(strings[362]);
16134strings[361] = str->add(strings[361]);
16135str->del(strings[361]);
16136strings[362] = str->add(strings[362]);
16137str->del(strings[362]);
16138strings[3127] = str->add("resize");
16139str->del(strings[3127]);
16140strings[64] = str->add(strings[64]);
16141strings[2581] = str->add(strings[2581]);
16142strings[64] = str->add(strings[64]);
16143strings[3128] = str->add("load");
16144strings[1841] = str->add(strings[1841]);
16145strings[64] = str->add(strings[64]);
16146strings[1949] = str->add(strings[1949]);
16147strings[64] = str->add(strings[64]);
16148strings[1880] = str->add(strings[1880]);
16149strings[64] = str->add(strings[64]);
16150strings[1876] = str->add(strings[1876]);
16151str->del(strings[64]);
16152strings[379] = str->add(strings[379]);
16153strings[1842] = str->add(strings[1842]);
16154strings[1842] = str->add(strings[1842]);
16155strings[64] = str->add(strings[64]);
16156strings[1874] = str->add(strings[1874]);
16157strings[64] = str->add(strings[64]);
16158strings[2583] = str->add(strings[2583]);
16159strings[3128] = str->add(strings[3128]);
16160strings[1841] = str->add(strings[1841]);
16161strings[64] = str->add(strings[64]);
16162strings[2584] = str->add(strings[2584]);
16163strings[3128] = str->add(strings[3128]);
16164strings[1841] = str->add(strings[1841]);
16165strings[469] = str->add(strings[469]);
16166strings[2671] = str->add(strings[2671]);
16167strings[3128] = str->add(strings[3128]);
16168strings[469] = str->add(strings[469]);
16169strings[2898] = str->add(strings[2898]);
16170strings[469] = str->add(strings[469]);
16171strings[2900] = str->add(strings[2900]);
16172strings[1841] = str->add(strings[1841]);
16173strings[3129] = str->add("resize");
16174strings[3129] = str->add(strings[3129]);
16175strings[64] = str->add(strings[64]);
16176strings[2585] = str->add(strings[2585]);
16177strings[64] = str->add(strings[64]);
16178strings[3128] = str->add(strings[3128]);
16179strings[2862] = str->add(strings[2862]);
16180strings[1841] = str->add(strings[1841]);
16181str->del(strings[64]);
16182strings[385] = str->add(strings[385]);
16183strings[2862] = str->add(strings[2862]);
16184strings[64] = str->add(strings[64]);
16185strings[2886] = str->add(strings[2886]);
16186strings[64] = str->add(strings[64]);
16187strings[2888] = str->add(strings[2888]);
16188strings[64] = str->add(strings[64]);
16189strings[2583] = str->add(strings[2583]);
16190strings[3128] = str->add(strings[3128]);
16191strings[1841] = str->add(strings[1841]);
16192strings[64] = str->add(strings[64]);
16193strings[2584] = str->add(strings[2584]);
16194strings[3128] = str->add(strings[3128]);
16195strings[1841] = str->add(strings[1841]);
16196strings[469] = str->add(strings[469]);
16197strings[2680] = str->add(strings[2680]);
16198strings[3128] = str->add(strings[3128]);
16199strings[469] = str->add(strings[469]);
16200strings[3094] = str->add(strings[3094]);
16201strings[1841] = str->add(strings[1841]);
16202strings[3129] = str->add(strings[3129]);
16203strings[3129] = str->add(strings[3129]);
16204strings[64] = str->add(strings[64]);
16205strings[2585] = str->add(strings[2585]);
16206strings[64] = str->add(strings[64]);
16207strings[3128] = str->add(strings[3128]);
16208strings[2514] = str->add(strings[2514]);
16209strings[1841] = str->add(strings[1841]);
16210str->del(strings[64]);
16211strings[385] = str->add(strings[385]);
16212strings[2514] = str->add(strings[2514]);
16213strings[64] = str->add(strings[64]);
16214strings[2886] = str->add(strings[2886]);
16215strings[64] = str->add(strings[64]);
16216strings[2888] = str->add(strings[2888]);
16217strings[64] = str->add(strings[64]);
16218strings[2582] = str->add(strings[2582]);
16219strings[3128] = str->add(strings[3128]);
16220strings[1841] = str->add(strings[1841]);
16221strings[64] = str->add(strings[64]);
16222strings[2583] = str->add(strings[2583]);
16223strings[3128] = str->add(strings[3128]);
16224strings[1841] = str->add(strings[1841]);
16225strings[64] = str->add(strings[64]);
16226strings[2584] = str->add(strings[2584]);
16227strings[3128] = str->add(strings[3128]);
16228strings[1841] = str->add(strings[1841]);
16229strings[469] = str->add(strings[469]);
16230strings[2672] = str->add(strings[2672]);
16231strings[2672] = str->add(strings[2672]);
16232strings[3128] = str->add(strings[3128]);
16233strings[469] = str->add(strings[469]);
16234strings[3130] = str->add("images/383");
16235strings[3131] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/383");
16236strings[469] = str->add(strings[469]);
16237strings[3130] = str->add(strings[3130]);
16238strings[1841] = str->add(strings[1841]);
16239strings[3129] = str->add(strings[3129]);
16240strings[3129] = str->add(strings[3129]);
16241strings[64] = str->add(strings[64]);
16242strings[2585] = str->add(strings[2585]);
16243strings[64] = str->add(strings[64]);
16244strings[3128] = str->add(strings[3128]);
16245strings[1713] = str->add(strings[1713]);
16246strings[1841] = str->add(strings[1841]);
16247str->del(strings[64]);
16248strings[385] = str->add(strings[385]);
16249strings[1713] = str->add(strings[1713]);
16250strings[64] = str->add(strings[64]);
16251strings[2886] = str->add(strings[2886]);
16252strings[64] = str->add(strings[64]);
16253strings[2888] = str->add(strings[2888]);
16254strings[64] = str->add(strings[64]);
16255strings[2583] = str->add(strings[2583]);
16256strings[3128] = str->add(strings[3128]);
16257strings[1841] = str->add(strings[1841]);
16258strings[64] = str->add(strings[64]);
16259strings[2584] = str->add(strings[2584]);
16260strings[3128] = str->add(strings[3128]);
16261strings[1841] = str->add(strings[1841]);
16262strings[469] = str->add(strings[469]);
16263strings[2673] = str->add(strings[2673]);
16264strings[2673] = str->add(strings[2673]);
16265strings[3128] = str->add(strings[3128]);
16266strings[469] = str->add(strings[469]);
16267strings[3132] = str->add("images/382");
16268strings[3133] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/382");
16269strings[469] = str->add(strings[469]);
16270strings[3132] = str->add(strings[3132]);
16271strings[1841] = str->add(strings[1841]);
16272strings[3129] = str->add(strings[3129]);
16273strings[3129] = str->add(strings[3129]);
16274strings[64] = str->add(strings[64]);
16275strings[2585] = str->add(strings[2585]);
16276strings[64] = str->add(strings[64]);
16277strings[3128] = str->add(strings[3128]);
16278strings[1714] = str->add(strings[1714]);
16279strings[1841] = str->add(strings[1841]);
16280str->del(strings[64]);
16281strings[385] = str->add(strings[385]);
16282strings[1714] = str->add(strings[1714]);
16283strings[64] = str->add(strings[64]);
16284strings[2886] = str->add(strings[2886]);
16285strings[64] = str->add(strings[64]);
16286strings[2888] = str->add(strings[2888]);
16287strings[3129] = str->add(strings[3129]);
16288strings[3129] = str->add(strings[3129]);
16289strings[3129] = str->add(strings[3129]);
16290strings[3129] = str->add(strings[3129]);
16291strings[3129] = str->add(strings[3129]);
16292strings[3129] = str->add(strings[3129]);
16293strings[3129] = str->add(strings[3129]);
16294strings[3129] = str->add(strings[3129]);
16295strings[3129] = str->add(strings[3129]);
16296strings[3129] = str->add(strings[3129]);
16297strings[3129] = str->add(strings[3129]);
16298strings[3129] = str->add(strings[3129]);
16299strings[3129] = str->add(strings[3129]);
16300strings[3129] = str->add(strings[3129]);
16301strings[1933] = str->add(strings[1933]);
16302str->del(strings[1933]);
16303str->del(strings[64]);
16304str->del(strings[2583]);
16305strings[1933] = str->add(strings[1933]);
16306str->del(strings[1933]);
16307str->del(strings[64]);
16308str->del(strings[2584]);
16309strings[1933] = str->add(strings[1933]);
16310str->del(strings[1933]);
16311str->del(strings[469]);
16312str->del(strings[2688]);
16313strings[1933] = str->add(strings[1933]);
16314str->del(strings[1933]);
16315str->del(strings[2224]);
16316str->del(strings[2224]);
16317str->del(strings[2224]);
16318str->del(strings[64]);
16319str->del(strings[2585]);
16320strings[1933] = str->add(strings[1933]);
16321str->del(strings[1933]);
16322str->del(strings[64]);
16323str->del(strings[2582]);
16324strings[1933] = str->add(strings[1933]);
16325str->del(strings[1933]);
16326str->del(strings[64]);
16327str->del(strings[2583]);
16328strings[1933] = str->add(strings[1933]);
16329str->del(strings[1933]);
16330str->del(strings[64]);
16331str->del(strings[2584]);
16332strings[1933] = str->add(strings[1933]);
16333str->del(strings[1933]);
16334str->del(strings[469]);
16335str->del(strings[2685]);
16336strings[1933] = str->add(strings[1933]);
16337str->del(strings[1933]);
16338str->del(strings[4]);
16339str->del(strings[4]);
16340str->del(strings[4]);
16341str->del(strings[64]);
16342str->del(strings[2585]);
16343strings[1933] = str->add(strings[1933]);
16344str->del(strings[1933]);
16345str->del(strings[64]);
16346str->del(strings[2583]);
16347strings[1933] = str->add(strings[1933]);
16348str->del(strings[1933]);
16349str->del(strings[64]);
16350str->del(strings[2584]);
16351strings[1933] = str->add(strings[1933]);
16352str->del(strings[1933]);
16353str->del(strings[1926]);
16354str->del(strings[3083]);
16355strings[1933] = str->add(strings[1933]);
16356str->del(strings[1933]);
16357str->del(strings[1925]);
16358str->del(strings[1925]);
16359str->del(strings[1925]);
16360str->del(strings[64]);
16361str->del(strings[2585]);
16362strings[1933] = str->add(strings[1933]);
16363str->del(strings[1933]);
16364str->del(strings[64]);
16365str->del(strings[2583]);
16366strings[1933] = str->add(strings[1933]);
16367str->del(strings[1933]);
16368str->del(strings[64]);
16369str->del(strings[2584]);
16370strings[1933] = str->add(strings[1933]);
16371str->del(strings[1933]);
16372str->del(strings[469]);
16373str->del(strings[2711]);
16374strings[1933] = str->add(strings[1933]);
16375str->del(strings[1933]);
16376str->del(strings[2494]);
16377str->del(strings[2494]);
16378str->del(strings[2494]);
16379str->del(strings[64]);
16380str->del(strings[2585]);
16381strings[1933] = str->add(strings[1933]);
16382str->del(strings[1933]);
16383str->del(strings[64]);
16384str->del(strings[2583]);
16385strings[1933] = str->add(strings[1933]);
16386str->del(strings[1933]);
16387str->del(strings[64]);
16388str->del(strings[2584]);
16389strings[1933] = str->add(strings[1933]);
16390str->del(strings[1933]);
16391str->del(strings[469]);
16392str->del(strings[2680]);
16393strings[1933] = str->add(strings[1933]);
16394str->del(strings[1933]);
16395str->del(strings[2514]);
16396str->del(strings[2514]);
16397str->del(strings[2514]);
16398str->del(strings[64]);
16399str->del(strings[2585]);
16400strings[1933] = str->add(strings[1933]);
16401str->del(strings[1933]);
16402str->del(strings[64]);
16403str->del(strings[2583]);
16404strings[1933] = str->add(strings[1933]);
16405str->del(strings[1933]);
16406str->del(strings[64]);
16407str->del(strings[2584]);
16408strings[1933] = str->add(strings[1933]);
16409str->del(strings[1933]);
16410str->del(strings[469]);
16411str->del(strings[2713]);
16412strings[1933] = str->add(strings[1933]);
16413str->del(strings[1933]);
16414str->del(strings[2536]);
16415str->del(strings[2536]);
16416str->del(strings[2536]);
16417str->del(strings[64]);
16418str->del(strings[2585]);
16419strings[1933] = str->add(strings[1933]);
16420str->del(strings[1933]);
16421str->del(strings[1842]);
16422str->del(strings[1842]);
16423str->del(strings[64]);
16424str->del(strings[2581]);
16425str->del(strings[64]);
16426str->del(strings[2886]);
16427str->del(strings[64]);
16428str->del(strings[2888]);
16429str->del(strings[469]);
16430str->del(strings[2902]);
16431str->del(strings[2224]);
16432str->del(strings[385]);
16433str->del(strings[64]);
16434str->del(strings[2915]);
16435str->del(strings[64]);
16436str->del(strings[2886]);
16437str->del(strings[64]);
16438str->del(strings[2888]);
16439str->del(strings[469]);
16440str->del(strings[3089]);
16441str->del(strings[4]);
16442str->del(strings[385]);
16443str->del(strings[64]);
16444str->del(strings[2886]);
16445str->del(strings[64]);
16446str->del(strings[2888]);
16447str->del(strings[1926]);
16448str->del(strings[1552]);
16449str->del(strings[1925]);
16450str->del(strings[385]);
16451str->del(strings[64]);
16452str->del(strings[2886]);
16453str->del(strings[64]);
16454str->del(strings[2888]);
16455str->del(strings[469]);
16456str->del(strings[3092]);
16457str->del(strings[2494]);
16458str->del(strings[385]);
16459str->del(strings[64]);
16460str->del(strings[2886]);
16461str->del(strings[64]);
16462str->del(strings[2888]);
16463str->del(strings[469]);
16464str->del(strings[3094]);
16465str->del(strings[2514]);
16466str->del(strings[385]);
16467str->del(strings[64]);
16468str->del(strings[2886]);
16469str->del(strings[64]);
16470str->del(strings[2888]);
16471str->del(strings[469]);
16472str->del(strings[3096]);
16473str->del(strings[2536]);
16474str->del(strings[385]);
16475str->del(strings[64]);
16476str->del(strings[1949]);
16477str->del(strings[64]);
16478str->del(strings[1880]);
16479str->del(strings[64]);
16480str->del(strings[1876]);
16481str->del(strings[379]);
16482str->del(strings[64]);
16483str->del(strings[1874]);
16484str->del(strings[361]);
16485str->del(strings[362]);
16486str->del(strings[1842]);
16487strings[1842] = str->add(strings[1842]);
16488str->del(strings[1842]);
16489strings[1842] = str->add(strings[1842]);
16490strings[3129] = str->add(strings[3129]);
16491strings[2862] = str->add(strings[2862]);
16492strings[2862] = str->add(strings[2862]);
16493strings[3129] = str->add(strings[3129]);
16494strings[2514] = str->add(strings[2514]);
16495strings[2514] = str->add(strings[2514]);
16496strings[64] = str->add(strings[64]);
16497strings[2915] = str->add(strings[2915]);
16498strings[3129] = str->add(strings[3129]);
16499strings[1713] = str->add(strings[1713]);
16500strings[1713] = str->add(strings[1713]);
16501strings[3129] = str->add(strings[3129]);
16502strings[1714] = str->add(strings[1714]);
16503strings[1714] = str->add(strings[1714]);
16504str->del(strings[3128]);
16505str->del(strings[1841]);
16506str->del(strings[3128]);
16507str->del(strings[1841]);
16508str->del(strings[3128]);
16509str->del(strings[1841]);
16510str->del(strings[3128]);
16511str->del(strings[1841]);
16512str->del(strings[3129]);
16513str->del(strings[3129]);
16514str->del(strings[3128]);
16515str->del(strings[1841]);
16516str->del(strings[3128]);
16517str->del(strings[1841]);
16518str->del(strings[3128]);
16519str->del(strings[1841]);
16520str->del(strings[3128]);
16521str->del(strings[1841]);
16522str->del(strings[3129]);
16523str->del(strings[3129]);
16524str->del(strings[3128]);
16525str->del(strings[1841]);
16526str->del(strings[3128]);
16527str->del(strings[1841]);
16528str->del(strings[3128]);
16529str->del(strings[1841]);
16530str->del(strings[3128]);
16531str->del(strings[1841]);
16532str->del(strings[3128]);
16533str->del(strings[1841]);
16534str->del(strings[3129]);
16535str->del(strings[3129]);
16536str->del(strings[3128]);
16537str->del(strings[1841]);
16538str->del(strings[3128]);
16539str->del(strings[1841]);
16540str->del(strings[3128]);
16541str->del(strings[1841]);
16542str->del(strings[3128]);
16543str->del(strings[1841]);
16544str->del(strings[3129]);
16545str->del(strings[3129]);
16546str->del(strings[3128]);
16547str->del(strings[1841]);
16548str->del(strings[3129]);
16549str->del(strings[3129]);
16550str->del(strings[3129]);
16551str->del(strings[3129]);
16552str->del(strings[3129]);
16553str->del(strings[3129]);
16554str->del(strings[3129]);
16555str->del(strings[3129]);
16556str->del(strings[3129]);
16557str->del(strings[3129]);
16558str->del(strings[3129]);
16559str->del(strings[3129]);
16560str->del(strings[3129]);
16561str->del(strings[3129]);
16562str->del(strings[3129]);
16563str->del(strings[3129]);
16564str->del(strings[3129]);
16565str->del(strings[3129]);
16566strings[3134] = str->add("e,action,mouse,move");
16567strings[3135] = str->add("e");
16568strings[3134] = str->add(strings[3134]);
16569strings[3135] = str->add(strings[3135]);
16570strings[3134] = str->add(strings[3134]);
16571strings[3135] = str->add(strings[3135]);
16572strings[3134] = str->add(strings[3134]);
16573strings[3135] = str->add(strings[3135]);
16574str->del(strings[3134]);
16575str->del(strings[3135]);
16576str->del(strings[3134]);
16577str->del(strings[3135]);
16578str->del(strings[3134]);
16579str->del(strings[3135]);
16580str->del(strings[3134]);
16581str->del(strings[3135]);
16582str->del(strings[7]);
16583str->del(strings[3111]);
16584strings[7] = str->add(strings[7]);
16585strings[3136] = str->add("images/57");
16586strings[3137] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/57");
16587strings[7] = str->add(strings[7]);
16588strings[3136] = str->add(strings[3136]);
16589strings[3138] = str->add("e,action,mouse,move");
16590strings[3139] = str->add("e");
16591str->del(strings[3138]);
16592str->del(strings[3139]);
16593strings[3140] = str->add("e,action,mouse,move");
16594strings[3141] = str->add("e");
16595strings[3140] = str->add(strings[3140]);
16596strings[3141] = str->add(strings[3141]);
16597str->del(strings[3140]);
16598str->del(strings[3141]);
16599str->del(strings[3140]);
16600str->del(strings[3141]);
16601strings[3142] = str->add("e,action,mouse,move");
16602strings[3143] = str->add("e");
16603str->del(strings[3142]);
16604str->del(strings[3143]);
16605strings[3144] = str->add("e,action,mouse,move");
16606strings[3145] = str->add("e");
16607strings[3146] = str->add("e,state,unselected");
16608strings[3145] = str->add(strings[3145]);
16609strings[3146] = str->add(strings[3146]);
16610strings[3145] = str->add(strings[3145]);
16611strings[3146] = str->add(strings[3146]);
16612strings[3145] = str->add(strings[3145]);
16613strings[3146] = str->add(strings[3146]);
16614strings[3145] = str->add(strings[3145]);
16615strings[3146] = str->add(strings[3146]);
16616strings[3145] = str->add(strings[3145]);
16617strings[3146] = str->add(strings[3146]);
16618strings[3145] = str->add(strings[3145]);
16619str->del(strings[3144]);
16620str->del(strings[3145]);
16621strings[1932] = str->add(strings[1932]);
16622strings[3147] = str->add("sel");
16623strings[3148] = str->add("program,start");
16624strings[3149] = str->add("unsel");
16625str->del(strings[3146]);
16626str->del(strings[3145]);
16627str->del(strings[3146]);
16628str->del(strings[3145]);
16629strings[1932] = str->add(strings[1932]);
16630strings[3147] = str->add(strings[3147]);
16631strings[3148] = str->add(strings[3148]);
16632strings[3149] = str->add(strings[3149]);
16633str->del(strings[3146]);
16634str->del(strings[3145]);
16635strings[3148] = str->add(strings[3148]);
16636strings[3149] = str->add(strings[3149]);
16637strings[1932] = str->add(strings[1932]);
16638strings[3149] = str->add(strings[3149]);
16639str->del(strings[3146]);
16640str->del(strings[3145]);
16641strings[1932] = str->add(strings[1932]);
16642strings[3150] = str->add("e_in");
16643strings[3148] = str->add(strings[3148]);
16644strings[3151] = str->add("e_out");
16645str->del(strings[3146]);
16646str->del(strings[3145]);
16647str->del(strings[3146]);
16648str->del(strings[3145]);
16649str->del(strings[1932]);
16650str->del(strings[3147]);
16651str->del(strings[3148]);
16652str->del(strings[3149]);
16653str->del(strings[1932]);
16654str->del(strings[3147]);
16655str->del(strings[3148]);
16656str->del(strings[3149]);
16657str->del(strings[3148]);
16658str->del(strings[3149]);
16659str->del(strings[1932]);
16660str->del(strings[3149]);
16661str->del(strings[1932]);
16662str->del(strings[3150]);
16663str->del(strings[3148]);
16664str->del(strings[3151]);
16665str->del(strings[64]);
16666str->del(strings[3021]);
16667strings[64] = str->add(strings[64]);
16668strings[2913] = str->add(strings[2913]);
16669strings[3152] = str->add("e,action,mouse,move");
16670strings[3153] = str->add("e");
16671strings[3154] = str->add("e,state,selected");
16672strings[3153] = str->add(strings[3153]);
16673strings[3154] = str->add(strings[3154]);
16674strings[3153] = str->add(strings[3153]);
16675strings[3154] = str->add(strings[3154]);
16676strings[3153] = str->add(strings[3153]);
16677strings[3154] = str->add(strings[3154]);
16678strings[3153] = str->add(strings[3153]);
16679strings[3154] = str->add(strings[3154]);
16680strings[3153] = str->add(strings[3153]);
16681strings[3154] = str->add(strings[3154]);
16682strings[3153] = str->add(strings[3153]);
16683strings[3152] = str->add(strings[3152]);
16684strings[3153] = str->add(strings[3153]);
16685strings[3155] = str->add("(No Windows)");
16686strings[1731] = str->add(strings[1731]);
16687strings[469] = str->add(strings[469]);
16688strings[2682] = str->add(strings[2682]);
16689strings[3156] = str->add("Lost Windows");
16690strings[469] = str->add(strings[469]);
16691strings[2683] = str->add(strings[2683]);
16692str->del(strings[3152]);
16693str->del(strings[3153]);
16694strings[3157] = str->add("program,start");
16695strings[3158] = str->add("sel");
16696str->del(strings[3154]);
16697str->del(strings[3153]);
16698str->del(strings[3154]);
16699str->del(strings[3153]);
16700strings[3157] = str->add(strings[3157]);
16701strings[3158] = str->add(strings[3158]);
16702str->del(strings[3154]);
16703str->del(strings[3153]);
16704strings[3157] = str->add(strings[3157]);
16705strings[3158] = str->add(strings[3158]);
16706strings[1932] = str->add(strings[1932]);
16707strings[3158] = str->add(strings[3158]);
16708str->del(strings[3154]);
16709str->del(strings[3153]);
16710str->del(strings[3154]);
16711str->del(strings[3153]);
16712str->del(strings[3154]);
16713str->del(strings[3153]);
16714str->del(strings[3152]);
16715str->del(strings[3153]);
16716str->del(strings[3157]);
16717str->del(strings[3158]);
16718str->del(strings[3157]);
16719str->del(strings[3158]);
16720str->del(strings[3157]);
16721str->del(strings[3158]);
16722str->del(strings[1932]);
16723str->del(strings[3158]);
16724strings[361] = str->add(strings[361]);
16725strings[362] = str->add(strings[362]);
16726strings[361] = str->add(strings[361]);
16727str->del(strings[361]);
16728strings[362] = str->add(strings[362]);
16729str->del(strings[362]);
16730strings[3159] = str->add("resize");
16731str->del(strings[3159]);
16732strings[64] = str->add(strings[64]);
16733strings[2581] = str->add(strings[2581]);
16734strings[64] = str->add(strings[64]);
16735strings[3160] = str->add("load");
16736strings[1841] = str->add(strings[1841]);
16737strings[64] = str->add(strings[64]);
16738strings[1949] = str->add(strings[1949]);
16739strings[64] = str->add(strings[64]);
16740strings[1880] = str->add(strings[1880]);
16741strings[64] = str->add(strings[64]);
16742strings[1876] = str->add(strings[1876]);
16743str->del(strings[64]);
16744strings[379] = str->add(strings[379]);
16745strings[1842] = str->add(strings[1842]);
16746strings[1842] = str->add(strings[1842]);
16747strings[64] = str->add(strings[64]);
16748strings[1874] = str->add(strings[1874]);
16749strings[64] = str->add(strings[64]);
16750strings[2583] = str->add(strings[2583]);
16751strings[3160] = str->add(strings[3160]);
16752strings[1841] = str->add(strings[1841]);
16753strings[64] = str->add(strings[64]);
16754strings[2585] = str->add(strings[2585]);
16755strings[64] = str->add(strings[64]);
16756strings[3160] = str->add(strings[3160]);
16757strings[3155] = str->add(strings[3155]);
16758strings[1841] = str->add(strings[1841]);
16759str->del(strings[64]);
16760strings[385] = str->add(strings[385]);
16761strings[3155] = str->add(strings[3155]);
16762strings[64] = str->add(strings[64]);
16763strings[2886] = str->add(strings[2886]);
16764strings[64] = str->add(strings[64]);
16765strings[2888] = str->add(strings[2888]);
16766strings[64] = str->add(strings[64]);
16767strings[2582] = str->add(strings[2582]);
16768strings[3160] = str->add(strings[3160]);
16769strings[1841] = str->add(strings[1841]);
16770strings[64] = str->add(strings[64]);
16771strings[2583] = str->add(strings[2583]);
16772strings[3160] = str->add(strings[3160]);
16773strings[1841] = str->add(strings[1841]);
16774strings[64] = str->add(strings[64]);
16775strings[2584] = str->add(strings[2584]);
16776strings[3160] = str->add(strings[3160]);
16777strings[1841] = str->add(strings[1841]);
16778strings[469] = str->add(strings[469]);
16779strings[2682] = str->add(strings[2682]);
16780strings[3160] = str->add(strings[3160]);
16781strings[469] = str->add(strings[469]);
16782strings[2896] = str->add(strings[2896]);
16783strings[1841] = str->add(strings[1841]);
16784strings[3161] = str->add("resize");
16785strings[3161] = str->add(strings[3161]);
16786strings[64] = str->add(strings[64]);
16787strings[2585] = str->add(strings[2585]);
16788strings[64] = str->add(strings[64]);
16789strings[3160] = str->add(strings[3160]);
16790strings[1731] = str->add(strings[1731]);
16791strings[1841] = str->add(strings[1841]);
16792str->del(strings[64]);
16793strings[385] = str->add(strings[385]);
16794strings[1731] = str->add(strings[1731]);
16795strings[64] = str->add(strings[64]);
16796strings[2886] = str->add(strings[2886]);
16797strings[64] = str->add(strings[64]);
16798strings[2888] = str->add(strings[2888]);
16799strings[64] = str->add(strings[64]);
16800strings[2582] = str->add(strings[2582]);
16801strings[3160] = str->add(strings[3160]);
16802strings[1841] = str->add(strings[1841]);
16803strings[64] = str->add(strings[64]);
16804strings[2634] = str->add(strings[2634]);
16805strings[3160] = str->add(strings[3160]);
16806strings[1841] = str->add(strings[1841]);
16807strings[64] = str->add(strings[64]);
16808strings[2584] = str->add(strings[2584]);
16809strings[3160] = str->add(strings[3160]);
16810strings[1841] = str->add(strings[1841]);
16811strings[469] = str->add(strings[469]);
16812strings[2683] = str->add(strings[2683]);
16813strings[2683] = str->add(strings[2683]);
16814strings[3160] = str->add(strings[3160]);
16815strings[469] = str->add(strings[469]);
16816strings[3162] = str->add("images/320");
16817strings[3163] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/320");
16818strings[469] = str->add(strings[469]);
16819strings[3162] = str->add(strings[3162]);
16820strings[1841] = str->add(strings[1841]);
16821strings[3161] = str->add(strings[3161]);
16822strings[3161] = str->add(strings[3161]);
16823strings[64] = str->add(strings[64]);
16824strings[2585] = str->add(strings[2585]);
16825strings[64] = str->add(strings[64]);
16826strings[3160] = str->add(strings[3160]);
16827strings[3156] = str->add(strings[3156]);
16828strings[1841] = str->add(strings[1841]);
16829str->del(strings[64]);
16830strings[385] = str->add(strings[385]);
16831strings[3156] = str->add(strings[3156]);
16832strings[64] = str->add(strings[64]);
16833strings[2586] = str->add(strings[2586]);
16834strings[3160] = str->add(strings[3160]);
16835strings[1841] = str->add(strings[1841]);
16836strings[64] = str->add(strings[64]);
16837strings[2886] = str->add(strings[2886]);
16838strings[64] = str->add(strings[64]);
16839strings[2888] = str->add(strings[2888]);
16840strings[3161] = str->add(strings[3161]);
16841strings[3161] = str->add(strings[3161]);
16842strings[3161] = str->add(strings[3161]);
16843strings[3161] = str->add(strings[3161]);
16844strings[3161] = str->add(strings[3161]);
16845strings[3161] = str->add(strings[3161]);
16846strings[3161] = str->add(strings[3161]);
16847strings[3161] = str->add(strings[3161]);
16848strings[3161] = str->add(strings[3161]);
16849strings[3161] = str->add(strings[3161]);
16850strings[3161] = str->add(strings[3161]);
16851strings[3161] = str->add(strings[3161]);
16852strings[1933] = str->add(strings[1933]);
16853str->del(strings[1933]);
16854str->del(strings[64]);
16855str->del(strings[2583]);
16856strings[1933] = str->add(strings[1933]);
16857str->del(strings[1933]);
16858str->del(strings[64]);
16859str->del(strings[2584]);
16860strings[1933] = str->add(strings[1933]);
16861str->del(strings[1933]);
16862str->del(strings[469]);
16863str->del(strings[2671]);
16864strings[1933] = str->add(strings[1933]);
16865str->del(strings[1933]);
16866str->del(strings[2862]);
16867str->del(strings[2862]);
16868str->del(strings[2862]);
16869str->del(strings[64]);
16870str->del(strings[2585]);
16871strings[1933] = str->add(strings[1933]);
16872str->del(strings[1933]);
16873str->del(strings[64]);
16874str->del(strings[2583]);
16875strings[1933] = str->add(strings[1933]);
16876str->del(strings[1933]);
16877str->del(strings[64]);
16878str->del(strings[2584]);
16879strings[1933] = str->add(strings[1933]);
16880str->del(strings[1933]);
16881str->del(strings[469]);
16882str->del(strings[2680]);
16883strings[1933] = str->add(strings[1933]);
16884str->del(strings[1933]);
16885str->del(strings[2514]);
16886str->del(strings[2514]);
16887str->del(strings[2514]);
16888str->del(strings[64]);
16889str->del(strings[2585]);
16890strings[1933] = str->add(strings[1933]);
16891str->del(strings[1933]);
16892str->del(strings[64]);
16893str->del(strings[2582]);
16894strings[1933] = str->add(strings[1933]);
16895str->del(strings[1933]);
16896str->del(strings[64]);
16897str->del(strings[2583]);
16898strings[1933] = str->add(strings[1933]);
16899str->del(strings[1933]);
16900str->del(strings[64]);
16901str->del(strings[2584]);
16902strings[1933] = str->add(strings[1933]);
16903str->del(strings[1933]);
16904str->del(strings[469]);
16905str->del(strings[2672]);
16906strings[1933] = str->add(strings[1933]);
16907str->del(strings[1933]);
16908str->del(strings[1713]);
16909str->del(strings[1713]);
16910str->del(strings[1713]);
16911str->del(strings[64]);
16912str->del(strings[2585]);
16913strings[1933] = str->add(strings[1933]);
16914str->del(strings[1933]);
16915str->del(strings[64]);
16916str->del(strings[2583]);
16917strings[1933] = str->add(strings[1933]);
16918str->del(strings[1933]);
16919str->del(strings[64]);
16920str->del(strings[2584]);
16921strings[1933] = str->add(strings[1933]);
16922str->del(strings[1933]);
16923str->del(strings[469]);
16924str->del(strings[2673]);
16925strings[1933] = str->add(strings[1933]);
16926str->del(strings[1933]);
16927str->del(strings[1714]);
16928str->del(strings[1714]);
16929str->del(strings[1714]);
16930str->del(strings[64]);
16931str->del(strings[2585]);
16932strings[1933] = str->add(strings[1933]);
16933str->del(strings[1933]);
16934str->del(strings[1842]);
16935str->del(strings[1842]);
16936str->del(strings[64]);
16937str->del(strings[2581]);
16938str->del(strings[64]);
16939str->del(strings[2886]);
16940str->del(strings[64]);
16941str->del(strings[2888]);
16942str->del(strings[469]);
16943str->del(strings[2898]);
16944str->del(strings[469]);
16945str->del(strings[2900]);
16946str->del(strings[2862]);
16947str->del(strings[385]);
16948str->del(strings[64]);
16949str->del(strings[2886]);
16950str->del(strings[64]);
16951str->del(strings[2888]);
16952str->del(strings[469]);
16953str->del(strings[3094]);
16954str->del(strings[2514]);
16955str->del(strings[385]);
16956str->del(strings[64]);
16957str->del(strings[2915]);
16958str->del(strings[64]);
16959str->del(strings[2886]);
16960str->del(strings[64]);
16961str->del(strings[2888]);
16962str->del(strings[469]);
16963str->del(strings[3130]);
16964str->del(strings[1713]);
16965str->del(strings[385]);
16966str->del(strings[64]);
16967str->del(strings[2886]);
16968str->del(strings[64]);
16969str->del(strings[2888]);
16970str->del(strings[469]);
16971str->del(strings[3132]);
16972str->del(strings[1714]);
16973str->del(strings[385]);
16974str->del(strings[64]);
16975str->del(strings[1949]);
16976str->del(strings[64]);
16977str->del(strings[1880]);
16978str->del(strings[64]);
16979str->del(strings[1876]);
16980str->del(strings[379]);
16981str->del(strings[64]);
16982str->del(strings[1874]);
16983str->del(strings[361]);
16984str->del(strings[362]);
16985str->del(strings[1842]);
16986strings[1842] = str->add(strings[1842]);
16987str->del(strings[1842]);
16988strings[1842] = str->add(strings[1842]);
16989strings[3155] = str->add(strings[3155]);
16990strings[3155] = str->add(strings[3155]);
16991strings[64] = str->add(strings[64]);
16992strings[2915] = str->add(strings[2915]);
16993strings[3161] = str->add(strings[3161]);
16994strings[1731] = str->add(strings[1731]);
16995strings[1731] = str->add(strings[1731]);
16996strings[64] = str->add(strings[64]);
16997strings[2915] = str->add(strings[2915]);
16998strings[3161] = str->add(strings[3161]);
16999strings[3156] = str->add(strings[3156]);
17000strings[3156] = str->add(strings[3156]);
17001strings[64] = str->add(strings[64]);
17002strings[2913] = str->add(strings[2913]);
17003str->del(strings[64]);
17004str->del(strings[2913]);
17005strings[64] = str->add(strings[64]);
17006strings[3021] = str->add(strings[3021]);
17007strings[1932] = str->add(strings[1932]);
17008strings[3164] = str->add("unsel");
17009str->del(strings[3160]);
17010str->del(strings[1841]);
17011str->del(strings[3160]);
17012str->del(strings[1841]);
17013str->del(strings[3160]);
17014str->del(strings[1841]);
17015str->del(strings[3160]);
17016str->del(strings[1841]);
17017str->del(strings[3160]);
17018str->del(strings[1841]);
17019str->del(strings[3160]);
17020str->del(strings[1841]);
17021str->del(strings[3160]);
17022str->del(strings[1841]);
17023str->del(strings[3161]);
17024str->del(strings[3161]);
17025str->del(strings[3160]);
17026str->del(strings[1841]);
17027str->del(strings[3160]);
17028str->del(strings[1841]);
17029str->del(strings[3160]);
17030str->del(strings[1841]);
17031str->del(strings[3160]);
17032str->del(strings[1841]);
17033str->del(strings[3160]);
17034str->del(strings[1841]);
17035str->del(strings[3161]);
17036str->del(strings[3161]);
17037str->del(strings[3160]);
17038str->del(strings[1841]);
17039str->del(strings[3160]);
17040str->del(strings[1841]);
17041str->del(strings[3161]);
17042str->del(strings[3161]);
17043str->del(strings[3161]);
17044str->del(strings[3161]);
17045str->del(strings[3161]);
17046str->del(strings[3161]);
17047str->del(strings[3161]);
17048str->del(strings[3161]);
17049str->del(strings[3161]);
17050str->del(strings[3161]);
17051str->del(strings[3161]);
17052str->del(strings[3161]);
17053str->del(strings[3161]);
17054str->del(strings[3161]);
17055str->del(strings[1932]);
17056str->del(strings[3164]);
17057strings[3165] = str->add("e,action,mouse,move");
17058strings[3166] = str->add("e");
17059str->del(strings[3165]);
17060str->del(strings[3166]);
17061str->del(strings[7]);
17062str->del(strings[3136]);
17063strings[7] = str->add(strings[7]);
17064strings[3167] = str->add("images/58");
17065strings[3168] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/58");
17066strings[7] = str->add(strings[7]);
17067strings[3167] = str->add(strings[3167]);
17068strings[3169] = str->add("e,action,mouse,move");
17069strings[3170] = str->add("e");
17070str->del(strings[3169]);
17071str->del(strings[3170]);
17072strings[3171] = str->add("e,action,mouse,move");
17073strings[3172] = str->add("e");
17074str->del(strings[3171]);
17075str->del(strings[3172]);
17076strings[3173] = str->add("e,action,mouse,move");
17077strings[3174] = str->add("e");
17078str->del(strings[3173]);
17079str->del(strings[3174]);
17080strings[3175] = str->add("e,action,mouse,move");
17081strings[3176] = str->add("e");
17082str->del(strings[3175]);
17083str->del(strings[3176]);
17084strings[1932] = str->add(strings[1932]);
17085strings[3177] = str->add("unsel");
17086str->del(strings[1932]);
17087str->del(strings[3177]);
17088strings[3178] = str->add("e,action,mouse,move");
17089strings[3179] = str->add("e");
17090strings[3180] = str->add("e,state,unselected");
17091strings[3179] = str->add(strings[3179]);
17092strings[3180] = str->add(strings[3180]);
17093strings[3179] = str->add(strings[3179]);
17094strings[3180] = str->add(strings[3180]);
17095strings[3179] = str->add(strings[3179]);
17096strings[3180] = str->add(strings[3180]);
17097strings[3179] = str->add(strings[3179]);
17098strings[3180] = str->add(strings[3180]);
17099strings[3179] = str->add(strings[3179]);
17100strings[3180] = str->add(strings[3180]);
17101strings[3179] = str->add(strings[3179]);
17102strings[3181] = str->add("e,state,selected");
17103strings[3179] = str->add(strings[3179]);
17104strings[3181] = str->add(strings[3181]);
17105strings[3179] = str->add(strings[3179]);
17106strings[3181] = str->add(strings[3181]);
17107strings[3179] = str->add(strings[3179]);
17108strings[3181] = str->add(strings[3181]);
17109strings[3179] = str->add(strings[3179]);
17110strings[3181] = str->add(strings[3181]);
17111strings[3179] = str->add(strings[3179]);
17112strings[3181] = str->add(strings[3181]);
17113strings[3179] = str->add(strings[3179]);
17114str->del(strings[3178]);
17115str->del(strings[3179]);
17116strings[1932] = str->add(strings[1932]);
17117strings[3182] = str->add("sel");
17118strings[3183] = str->add("program,start");
17119strings[3184] = str->add("unsel");
17120str->del(strings[3180]);
17121str->del(strings[3179]);
17122str->del(strings[3180]);
17123str->del(strings[3179]);
17124strings[1932] = str->add(strings[1932]);
17125strings[3182] = str->add(strings[3182]);
17126strings[3183] = str->add(strings[3183]);
17127strings[3184] = str->add(strings[3184]);
17128str->del(strings[3180]);
17129str->del(strings[3179]);
17130strings[3183] = str->add(strings[3183]);
17131strings[3184] = str->add(strings[3184]);
17132strings[1932] = str->add(strings[1932]);
17133strings[3184] = str->add(strings[3184]);
17134str->del(strings[3180]);
17135str->del(strings[3179]);
17136str->del(strings[3180]);
17137str->del(strings[3179]);
17138str->del(strings[3180]);
17139str->del(strings[3179]);
17140strings[3183] = str->add(strings[3183]);
17141strings[3182] = str->add(strings[3182]);
17142str->del(strings[3181]);
17143str->del(strings[3179]);
17144str->del(strings[3181]);
17145str->del(strings[3179]);
17146strings[3183] = str->add(strings[3183]);
17147strings[3182] = str->add(strings[3182]);
17148str->del(strings[3181]);
17149str->del(strings[3179]);
17150strings[3183] = str->add(strings[3183]);
17151strings[3182] = str->add(strings[3182]);
17152strings[1932] = str->add(strings[1932]);
17153strings[3182] = str->add(strings[3182]);
17154str->del(strings[3181]);
17155str->del(strings[3179]);
17156str->del(strings[3181]);
17157str->del(strings[3179]);
17158str->del(strings[3181]);
17159str->del(strings[3179]);
17160str->del(strings[1932]);
17161str->del(strings[3182]);
17162str->del(strings[3183]);
17163str->del(strings[3184]);
17164str->del(strings[1932]);
17165str->del(strings[3182]);
17166str->del(strings[3183]);
17167str->del(strings[3184]);
17168str->del(strings[3183]);
17169str->del(strings[3184]);
17170str->del(strings[1932]);
17171str->del(strings[3184]);
17172str->del(strings[3183]);
17173str->del(strings[3182]);
17174str->del(strings[3183]);
17175str->del(strings[3182]);
17176str->del(strings[3183]);
17177str->del(strings[3182]);
17178str->del(strings[1932]);
17179str->del(strings[3182]);
17180strings[3185] = str->add("e,action,mouse,move");
17181strings[3186] = str->add("e");
17182str->del(strings[3185]);
17183str->del(strings[3186]);
17184strings[361] = str->add(strings[361]);
17185strings[362] = str->add(strings[362]);
17186strings[361] = str->add(strings[361]);
17187str->del(strings[361]);
17188strings[362] = str->add(strings[362]);
17189str->del(strings[362]);
17190strings[3187] = str->add("resize");
17191str->del(strings[3187]);
17192strings[64] = str->add(strings[64]);
17193strings[2581] = str->add(strings[2581]);
17194strings[64] = str->add(strings[64]);
17195strings[3188] = str->add("load");
17196strings[1841] = str->add(strings[1841]);
17197strings[64] = str->add(strings[64]);
17198strings[1949] = str->add(strings[1949]);
17199strings[64] = str->add(strings[64]);
17200strings[1880] = str->add(strings[1880]);
17201strings[64] = str->add(strings[64]);
17202strings[1876] = str->add(strings[1876]);
17203str->del(strings[64]);
17204strings[379] = str->add(strings[379]);
17205strings[1842] = str->add(strings[1842]);
17206strings[1842] = str->add(strings[1842]);
17207strings[64] = str->add(strings[64]);
17208strings[1874] = str->add(strings[1874]);
17209strings[64] = str->add(strings[64]);
17210strings[2634] = str->add(strings[2634]);
17211strings[3188] = str->add(strings[3188]);
17212strings[1841] = str->add(strings[1841]);
17213strings[64] = str->add(strings[64]);
17214strings[2584] = str->add(strings[2584]);
17215strings[3188] = str->add(strings[3188]);
17216strings[1841] = str->add(strings[1841]);
17217strings[469] = str->add(strings[469]);
17218strings[2687] = str->add(strings[2687]);
17219strings[3188] = str->add(strings[3188]);
17220strings[469] = str->add(strings[469]);
17221strings[2894] = str->add(strings[2894]);
17222strings[1841] = str->add(strings[1841]);
17223strings[3189] = str->add("resize");
17224strings[3189] = str->add(strings[3189]);
17225strings[64] = str->add(strings[64]);
17226strings[2585] = str->add(strings[2585]);
17227strings[64] = str->add(strings[64]);
17228strings[3188] = str->add(strings[3188]);
17229strings[2860] = str->add(strings[2860]);
17230strings[1841] = str->add(strings[1841]);
17231str->del(strings[64]);
17232strings[385] = str->add(strings[385]);
17233strings[2860] = str->add(strings[2860]);
17234strings[64] = str->add(strings[64]);
17235strings[2586] = str->add(strings[2586]);
17236strings[3188] = str->add(strings[3188]);
17237strings[1841] = str->add(strings[1841]);
17238strings[64] = str->add(strings[64]);
17239strings[2886] = str->add(strings[2886]);
17240strings[64] = str->add(strings[64]);
17241strings[2888] = str->add(strings[2888]);
17242strings[64] = str->add(strings[64]);
17243strings[2634] = str->add(strings[2634]);
17244strings[3188] = str->add(strings[3188]);
17245strings[1841] = str->add(strings[1841]);
17246strings[64] = str->add(strings[64]);
17247strings[2584] = str->add(strings[2584]);
17248strings[3188] = str->add(strings[3188]);
17249strings[1841] = str->add(strings[1841]);
17250strings[469] = str->add(strings[469]);
17251strings[2711] = str->add(strings[2711]);
17252strings[3188] = str->add(strings[3188]);
17253strings[469] = str->add(strings[469]);
17254strings[3092] = str->add(strings[3092]);
17255strings[1841] = str->add(strings[1841]);
17256strings[3189] = str->add(strings[3189]);
17257strings[3189] = str->add(strings[3189]);
17258strings[64] = str->add(strings[64]);
17259strings[2585] = str->add(strings[2585]);
17260strings[64] = str->add(strings[64]);
17261strings[3188] = str->add(strings[3188]);
17262strings[2494] = str->add(strings[2494]);
17263strings[1841] = str->add(strings[1841]);
17264str->del(strings[64]);
17265strings[385] = str->add(strings[385]);
17266strings[2494] = str->add(strings[2494]);
17267strings[64] = str->add(strings[64]);
17268strings[2586] = str->add(strings[2586]);
17269strings[3188] = str->add(strings[3188]);
17270strings[1841] = str->add(strings[1841]);
17271strings[64] = str->add(strings[64]);
17272strings[2886] = str->add(strings[2886]);
17273strings[64] = str->add(strings[64]);
17274strings[2888] = str->add(strings[2888]);
17275strings[64] = str->add(strings[64]);
17276strings[2582] = str->add(strings[2582]);
17277strings[3188] = str->add(strings[3188]);
17278strings[1841] = str->add(strings[1841]);
17279strings[64] = str->add(strings[64]);
17280strings[2583] = str->add(strings[2583]);
17281strings[3188] = str->add(strings[3188]);
17282strings[1841] = str->add(strings[1841]);
17283strings[64] = str->add(strings[64]);
17284strings[2585] = str->add(strings[2585]);
17285strings[64] = str->add(strings[64]);
17286strings[3188] = str->add(strings[3188]);
17287strings[2861] = str->add(strings[2861]);
17288strings[1841] = str->add(strings[1841]);
17289str->del(strings[64]);
17290strings[385] = str->add(strings[385]);
17291strings[2861] = str->add(strings[2861]);
17292strings[64] = str->add(strings[64]);
17293strings[2886] = str->add(strings[2886]);
17294strings[64] = str->add(strings[64]);
17295strings[2888] = str->add(strings[2888]);
17296strings[3189] = str->add(strings[3189]);
17297strings[3189] = str->add(strings[3189]);
17298strings[3189] = str->add(strings[3189]);
17299strings[3189] = str->add(strings[3189]);
17300strings[3189] = str->add(strings[3189]);
17301strings[3189] = str->add(strings[3189]);
17302strings[3189] = str->add(strings[3189]);
17303strings[3189] = str->add(strings[3189]);
17304strings[3189] = str->add(strings[3189]);
17305strings[3189] = str->add(strings[3189]);
17306strings[3189] = str->add(strings[3189]);
17307strings[3189] = str->add(strings[3189]);
17308strings[1933] = str->add(strings[1933]);
17309str->del(strings[1933]);
17310str->del(strings[64]);
17311str->del(strings[2583]);
17312strings[1933] = str->add(strings[1933]);
17313str->del(strings[1933]);
17314str->del(strings[3155]);
17315str->del(strings[3155]);
17316str->del(strings[3155]);
17317str->del(strings[64]);
17318str->del(strings[2585]);
17319strings[1933] = str->add(strings[1933]);
17320str->del(strings[1933]);
17321str->del(strings[64]);
17322str->del(strings[2582]);
17323strings[1933] = str->add(strings[1933]);
17324str->del(strings[1933]);
17325str->del(strings[64]);
17326str->del(strings[2583]);
17327strings[1933] = str->add(strings[1933]);
17328str->del(strings[1933]);
17329str->del(strings[64]);
17330str->del(strings[2584]);
17331strings[1933] = str->add(strings[1933]);
17332str->del(strings[1933]);
17333str->del(strings[469]);
17334str->del(strings[2682]);
17335strings[1933] = str->add(strings[1933]);
17336str->del(strings[1933]);
17337str->del(strings[1731]);
17338str->del(strings[1731]);
17339str->del(strings[1731]);
17340str->del(strings[64]);
17341str->del(strings[2585]);
17342strings[1933] = str->add(strings[1933]);
17343str->del(strings[1933]);
17344str->del(strings[64]);
17345str->del(strings[2582]);
17346strings[1933] = str->add(strings[1933]);
17347str->del(strings[1933]);
17348str->del(strings[64]);
17349str->del(strings[2634]);
17350strings[1933] = str->add(strings[1933]);
17351str->del(strings[1933]);
17352str->del(strings[64]);
17353str->del(strings[2584]);
17354strings[1933] = str->add(strings[1933]);
17355str->del(strings[1933]);
17356str->del(strings[469]);
17357str->del(strings[2683]);
17358strings[1933] = str->add(strings[1933]);
17359str->del(strings[1933]);
17360str->del(strings[3156]);
17361str->del(strings[3156]);
17362str->del(strings[3156]);
17363str->del(strings[64]);
17364str->del(strings[2585]);
17365strings[1933] = str->add(strings[1933]);
17366str->del(strings[1933]);
17367str->del(strings[64]);
17368str->del(strings[2586]);
17369strings[1933] = str->add(strings[1933]);
17370str->del(strings[1933]);
17371str->del(strings[1842]);
17372str->del(strings[1842]);
17373str->del(strings[64]);
17374str->del(strings[2581]);
17375str->del(strings[64]);
17376str->del(strings[2886]);
17377str->del(strings[64]);
17378str->del(strings[2888]);
17379str->del(strings[3155]);
17380str->del(strings[385]);
17381str->del(strings[64]);
17382str->del(strings[2915]);
17383str->del(strings[64]);
17384str->del(strings[2886]);
17385str->del(strings[64]);
17386str->del(strings[2888]);
17387str->del(strings[469]);
17388str->del(strings[2896]);
17389str->del(strings[1731]);
17390str->del(strings[385]);
17391str->del(strings[64]);
17392str->del(strings[2915]);
17393str->del(strings[64]);
17394str->del(strings[2886]);
17395str->del(strings[64]);
17396str->del(strings[2888]);
17397str->del(strings[469]);
17398str->del(strings[3162]);
17399str->del(strings[3156]);
17400str->del(strings[385]);
17401str->del(strings[64]);
17402str->del(strings[2913]);
17403str->del(strings[64]);
17404str->del(strings[1949]);
17405str->del(strings[64]);
17406str->del(strings[1880]);
17407str->del(strings[64]);
17408str->del(strings[1876]);
17409str->del(strings[379]);
17410str->del(strings[64]);
17411str->del(strings[1874]);
17412str->del(strings[361]);
17413str->del(strings[362]);
17414str->del(strings[1842]);
17415strings[1842] = str->add(strings[1842]);
17416str->del(strings[1842]);
17417strings[1842] = str->add(strings[1842]);
17418strings[3189] = str->add(strings[3189]);
17419strings[2860] = str->add(strings[2860]);
17420strings[2860] = str->add(strings[2860]);
17421strings[64] = str->add(strings[64]);
17422strings[2913] = str->add(strings[2913]);
17423strings[3189] = str->add(strings[3189]);
17424strings[2494] = str->add(strings[2494]);
17425strings[2494] = str->add(strings[2494]);
17426strings[64] = str->add(strings[64]);
17427strings[2913] = str->add(strings[2913]);
17428strings[64] = str->add(strings[64]);
17429strings[2915] = str->add(strings[2915]);
17430strings[2861] = str->add(strings[2861]);
17431strings[2861] = str->add(strings[2861]);
17432str->del(strings[64]);
17433str->del(strings[3021]);
17434strings[64] = str->add(strings[64]);
17435strings[2913] = str->add(strings[2913]);
17436str->del(strings[64]);
17437str->del(strings[2913]);
17438strings[64] = str->add(strings[64]);
17439strings[3021] = str->add(strings[3021]);
17440str->del(strings[3188]);
17441str->del(strings[1841]);
17442str->del(strings[3188]);
17443str->del(strings[1841]);
17444str->del(strings[3188]);
17445str->del(strings[1841]);
17446str->del(strings[3188]);
17447str->del(strings[1841]);
17448str->del(strings[3189]);
17449str->del(strings[3189]);
17450str->del(strings[3188]);
17451str->del(strings[1841]);
17452str->del(strings[3188]);
17453str->del(strings[1841]);
17454str->del(strings[3188]);
17455str->del(strings[1841]);
17456str->del(strings[3188]);
17457str->del(strings[1841]);
17458str->del(strings[3188]);
17459str->del(strings[1841]);
17460str->del(strings[3189]);
17461str->del(strings[3189]);
17462str->del(strings[3188]);
17463str->del(strings[1841]);
17464str->del(strings[3188]);
17465str->del(strings[1841]);
17466str->del(strings[3188]);
17467str->del(strings[1841]);
17468str->del(strings[3188]);
17469str->del(strings[1841]);
17470str->del(strings[3188]);
17471str->del(strings[1841]);
17472str->del(strings[3189]);
17473str->del(strings[3189]);
17474str->del(strings[3189]);
17475str->del(strings[3189]);
17476str->del(strings[3189]);
17477str->del(strings[3189]);
17478str->del(strings[3189]);
17479str->del(strings[3189]);
17480str->del(strings[3189]);
17481str->del(strings[3189]);
17482str->del(strings[3189]);
17483str->del(strings[3189]);
17484str->del(strings[3189]);
17485str->del(strings[3189]);
17486str->del(strings[7]);
17487str->del(strings[3167]);
17488strings[7] = str->add(strings[7]);
17489strings[3190] = str->add("images/59");
17490strings[3191] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/59");
17491strings[7] = str->add(strings[7]);
17492strings[3190] = str->add(strings[3190]);
17493strings[3192] = str->add("e,action,mouse,move");
17494strings[3193] = str->add("e");
17495strings[3192] = str->add(strings[3192]);
17496strings[3193] = str->add(strings[3193]);
17497str->del(strings[3192]);
17498str->del(strings[3193]);
17499str->del(strings[3192]);
17500str->del(strings[3193]);
17501strings[3194] = str->add("e,action,mouse,move");
17502strings[3195] = str->add("e");
17503str->del(strings[3194]);
17504str->del(strings[3195]);
17505strings[1932] = str->add(strings[1932]);
17506strings[1847] = str->add(strings[1847]);
17507strings[3196] = str->add("program,start");
17508strings[1848] = str->add(strings[1848]);
17509strings[1932] = str->add(strings[1932]);
17510strings[1848] = str->add(strings[1848]);
17511strings[3196] = str->add(strings[3196]);
17512strings[1847] = str->add(strings[1847]);
17513strings[1932] = str->add(strings[1932]);
17514strings[3197] = str->add("unsel");
17515str->del(strings[1932]);
17516str->del(strings[1847]);
17517str->del(strings[3196]);
17518str->del(strings[1848]);
17519str->del(strings[1932]);
17520str->del(strings[1848]);
17521str->del(strings[3196]);
17522str->del(strings[1847]);
17523str->del(strings[1932]);
17524str->del(strings[3197]);
17525strings[3198] = str->add("e,action,mouse,move");
17526strings[3199] = str->add("e");
17527str->del(strings[3198]);
17528str->del(strings[3199]);
17529strings[3200] = str->add("e,action,mouse,move");
17530strings[3201] = str->add("e");
17531strings[3200] = str->add(strings[3200]);
17532strings[3201] = str->add(strings[3201]);
17533strings[3202] = str->add("e,state,unselected");
17534strings[3201] = str->add(strings[3201]);
17535strings[3202] = str->add(strings[3202]);
17536strings[3201] = str->add(strings[3201]);
17537strings[3202] = str->add(strings[3202]);
17538strings[3201] = str->add(strings[3201]);
17539strings[3202] = str->add(strings[3202]);
17540strings[3201] = str->add(strings[3201]);
17541strings[3202] = str->add(strings[3202]);
17542strings[3201] = str->add(strings[3201]);
17543strings[3202] = str->add(strings[3202]);
17544strings[3201] = str->add(strings[3201]);
17545str->del(strings[3200]);
17546str->del(strings[3201]);
17547str->del(strings[3200]);
17548str->del(strings[3201]);
17549strings[1932] = str->add(strings[1932]);
17550strings[3203] = str->add("sel");
17551strings[3204] = str->add("program,start");
17552strings[3205] = str->add("unsel");
17553str->del(strings[3202]);
17554str->del(strings[3201]);
17555str->del(strings[3202]);
17556str->del(strings[3201]);
17557strings[1932] = str->add(strings[1932]);
17558strings[3203] = str->add(strings[3203]);
17559strings[3204] = str->add(strings[3204]);
17560strings[3205] = str->add(strings[3205]);
17561str->del(strings[3202]);
17562str->del(strings[3201]);
17563strings[3204] = str->add(strings[3204]);
17564strings[3205] = str->add(strings[3205]);
17565strings[1932] = str->add(strings[1932]);
17566strings[3205] = str->add(strings[3205]);
17567str->del(strings[3202]);
17568str->del(strings[3201]);
17569str->del(strings[3202]);
17570str->del(strings[3201]);
17571str->del(strings[3202]);
17572str->del(strings[3201]);
17573str->del(strings[1932]);
17574str->del(strings[3203]);
17575str->del(strings[3204]);
17576str->del(strings[3205]);
17577str->del(strings[1932]);
17578str->del(strings[3203]);
17579str->del(strings[3204]);
17580str->del(strings[3205]);
17581str->del(strings[3204]);
17582str->del(strings[3205]);
17583str->del(strings[1932]);
17584str->del(strings[3205]);
17585str->del(strings[64]);
17586str->del(strings[3021]);
17587strings[64] = str->add(strings[64]);
17588strings[2913] = str->add(strings[2913]);
17589strings[3206] = str->add("e,action,mouse,move");
17590strings[3207] = str->add("e");
17591strings[3208] = str->add("e,state,selected");
17592strings[3207] = str->add(strings[3207]);
17593strings[3208] = str->add(strings[3208]);
17594strings[3207] = str->add(strings[3207]);
17595strings[3208] = str->add(strings[3208]);
17596strings[3207] = str->add(strings[3207]);
17597strings[3208] = str->add(strings[3208]);
17598strings[3207] = str->add(strings[3207]);
17599strings[3208] = str->add(strings[3208]);
17600strings[3207] = str->add(strings[3207]);
17601strings[3206] = str->add(strings[3206]);
17602strings[3207] = str->add(strings[3207]);
17603str->del(strings[3206]);
17604str->del(strings[3207]);
17605strings[3209] = str->add("program,start");
17606strings[3210] = str->add("sel");
17607str->del(strings[3208]);
17608str->del(strings[3207]);
17609str->del(strings[3208]);
17610str->del(strings[3207]);
17611strings[3209] = str->add(strings[3209]);
17612strings[3210] = str->add(strings[3210]);
17613str->del(strings[3208]);
17614str->del(strings[3207]);
17615str->del(strings[3208]);
17616str->del(strings[3207]);
17617str->del(strings[3208]);
17618str->del(strings[3207]);
17619str->del(strings[3206]);
17620str->del(strings[3207]);
17621str->del(strings[3209]);
17622str->del(strings[3210]);
17623str->del(strings[3209]);
17624str->del(strings[3210]);
17625strings[1933] = str->add(strings[1933]);
17626str->del(strings[1933]);
17627str->del(strings[64]);
17628str->del(strings[2634]);
17629strings[1933] = str->add(strings[1933]);
17630str->del(strings[1933]);
17631str->del(strings[64]);
17632str->del(strings[2584]);
17633strings[1933] = str->add(strings[1933]);
17634str->del(strings[1933]);
17635str->del(strings[469]);
17636str->del(strings[2687]);
17637strings[1933] = str->add(strings[1933]);
17638str->del(strings[1933]);
17639str->del(strings[2860]);
17640str->del(strings[2860]);
17641str->del(strings[2860]);
17642str->del(strings[64]);
17643str->del(strings[2585]);
17644strings[1933] = str->add(strings[1933]);
17645str->del(strings[1933]);
17646str->del(strings[64]);
17647str->del(strings[2586]);
17648strings[1933] = str->add(strings[1933]);
17649str->del(strings[1933]);
17650str->del(strings[64]);
17651str->del(strings[2634]);
17652strings[1933] = str->add(strings[1933]);
17653str->del(strings[1933]);
17654str->del(strings[64]);
17655str->del(strings[2584]);
17656strings[1933] = str->add(strings[1933]);
17657str->del(strings[1933]);
17658str->del(strings[469]);
17659str->del(strings[2711]);
17660strings[1933] = str->add(strings[1933]);
17661str->del(strings[1933]);
17662str->del(strings[2494]);
17663str->del(strings[2494]);
17664str->del(strings[2494]);
17665str->del(strings[64]);
17666str->del(strings[2585]);
17667strings[1933] = str->add(strings[1933]);
17668str->del(strings[1933]);
17669str->del(strings[64]);
17670str->del(strings[2586]);
17671strings[1933] = str->add(strings[1933]);
17672str->del(strings[1933]);
17673str->del(strings[64]);
17674str->del(strings[2582]);
17675strings[1933] = str->add(strings[1933]);
17676str->del(strings[1933]);
17677str->del(strings[64]);
17678str->del(strings[2583]);
17679strings[1933] = str->add(strings[1933]);
17680str->del(strings[1933]);
17681str->del(strings[2861]);
17682str->del(strings[2861]);
17683str->del(strings[2861]);
17684str->del(strings[64]);
17685str->del(strings[2585]);
17686strings[1933] = str->add(strings[1933]);
17687str->del(strings[1933]);
17688str->del(strings[1842]);
17689str->del(strings[1842]);
17690str->del(strings[64]);
17691str->del(strings[2581]);
17692str->del(strings[64]);
17693str->del(strings[2886]);
17694str->del(strings[64]);
17695str->del(strings[2888]);
17696str->del(strings[469]);
17697str->del(strings[2894]);
17698str->del(strings[2860]);
17699str->del(strings[385]);
17700str->del(strings[64]);
17701str->del(strings[2913]);
17702str->del(strings[64]);
17703str->del(strings[2886]);
17704str->del(strings[64]);
17705str->del(strings[2888]);
17706str->del(strings[469]);
17707str->del(strings[3092]);
17708str->del(strings[2494]);
17709str->del(strings[385]);
17710str->del(strings[64]);
17711str->del(strings[2913]);
17712str->del(strings[64]);
17713str->del(strings[2915]);
17714str->del(strings[64]);
17715str->del(strings[2886]);
17716str->del(strings[64]);
17717str->del(strings[2888]);
17718str->del(strings[2861]);
17719str->del(strings[385]);
17720str->del(strings[64]);
17721str->del(strings[1949]);
17722str->del(strings[64]);
17723str->del(strings[1880]);
17724str->del(strings[64]);
17725str->del(strings[1876]);
17726str->del(strings[379]);
17727str->del(strings[64]);
17728str->del(strings[1874]);
17729str->del(strings[361]);
17730str->del(strings[362]);
17731strings[3211] = str->add("e,action,mouse,move");
17732strings[3212] = str->add("e");
17733str->del(strings[3211]);
17734str->del(strings[3212]);
17735str->del(strings[7]);
17736str->del(strings[3190]);
17737strings[7] = str->add(strings[7]);
17738strings[2148] = str->add(strings[2148]);
17739strings[3213] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/60");
17740strings[7] = str->add(strings[7]);
17741strings[2148] = str->add(strings[2148]);
17742strings[3214] = str->add("e,action,mouse,move");
17743strings[3215] = str->add("e");
17744str->del(strings[3214]);
17745str->del(strings[3215]);
17746strings[3216] = str->add("e,action,mouse,move");
17747strings[3217] = str->add("e");
17748strings[3218] = str->add("e,state,unselected");
17749strings[3217] = str->add(strings[3217]);
17750strings[3218] = str->add(strings[3218]);
17751strings[3217] = str->add(strings[3217]);
17752strings[3218] = str->add(strings[3218]);
17753strings[3217] = str->add(strings[3217]);
17754strings[3218] = str->add(strings[3218]);
17755strings[3217] = str->add(strings[3217]);
17756strings[3218] = str->add(strings[3218]);
17757strings[3217] = str->add(strings[3217]);
17758strings[3219] = str->add("e,state,selected");
17759strings[3217] = str->add(strings[3217]);
17760strings[3219] = str->add(strings[3219]);
17761strings[3217] = str->add(strings[3217]);
17762strings[3219] = str->add(strings[3219]);
17763strings[3217] = str->add(strings[3217]);
17764strings[3219] = str->add(strings[3219]);
17765strings[3217] = str->add(strings[3217]);
17766strings[3219] = str->add(strings[3219]);
17767strings[3217] = str->add(strings[3217]);
17768strings[3219] = str->add(strings[3219]);
17769strings[3217] = str->add(strings[3217]);
17770strings[3216] = str->add(strings[3216]);
17771strings[3217] = str->add(strings[3217]);
17772strings[3220] = str->add("Accessories");
17773strings[3221] = str->add("Development");
17774strings[3222] = str->add("Games");
17775strings[3223] = str->add("Graphics");
17776strings[3224] = str->add("/usr/share/icons/Tango/24x24/categories/package_graphics.png");
17777strings[3225] = str->add("Internet");
17778strings[3226] = str->add("Multimedia");
17779strings[3227] = str->add("Office");
17780strings[3228] = str->add("Other");
17781strings[1721] = str->add(strings[1721]);
17782strings[3229] = str->add("System Settings");
17783str->del(strings[3216]);
17784str->del(strings[3217]);
17785strings[1932] = str->add(strings[1932]);
17786strings[3230] = str->add("sel");
17787strings[3231] = str->add("program,start");
17788strings[3232] = str->add("unsel");
17789str->del(strings[3218]);
17790str->del(strings[3217]);
17791str->del(strings[3218]);
17792str->del(strings[3217]);
17793strings[1932] = str->add(strings[1932]);
17794strings[3230] = str->add(strings[3230]);
17795strings[3231] = str->add(strings[3231]);
17796strings[3232] = str->add(strings[3232]);
17797str->del(strings[3218]);
17798str->del(strings[3217]);
17799str->del(strings[3218]);
17800str->del(strings[3217]);
17801str->del(strings[3218]);
17802str->del(strings[3217]);
17803strings[3231] = str->add(strings[3231]);
17804strings[3230] = str->add(strings[3230]);
17805str->del(strings[3219]);
17806str->del(strings[3217]);
17807str->del(strings[3219]);
17808str->del(strings[3217]);
17809strings[3231] = str->add(strings[3231]);
17810strings[3230] = str->add(strings[3230]);
17811str->del(strings[3219]);
17812str->del(strings[3217]);
17813strings[3231] = str->add(strings[3231]);
17814strings[3230] = str->add(strings[3230]);
17815strings[1932] = str->add(strings[1932]);
17816strings[3230] = str->add(strings[3230]);
17817str->del(strings[3219]);
17818str->del(strings[3217]);
17819str->del(strings[3219]);
17820str->del(strings[3217]);
17821str->del(strings[3219]);
17822str->del(strings[3217]);
17823str->del(strings[3216]);
17824str->del(strings[3217]);
17825str->del(strings[1932]);
17826str->del(strings[3230]);
17827str->del(strings[3231]);
17828str->del(strings[3232]);
17829str->del(strings[1932]);
17830str->del(strings[3230]);
17831str->del(strings[3231]);
17832str->del(strings[3232]);
17833str->del(strings[3231]);
17834str->del(strings[3230]);
17835str->del(strings[3231]);
17836str->del(strings[3230]);
17837str->del(strings[3231]);
17838str->del(strings[3230]);
17839str->del(strings[1932]);
17840str->del(strings[3230]);
17841strings[3233] = str->add("e,action,mouse,move");
17842strings[3234] = str->add("e");
17843strings[3233] = str->add(strings[3233]);
17844strings[3234] = str->add(strings[3234]);
17845strings[3233] = str->add(strings[3233]);
17846strings[3234] = str->add(strings[3234]);
17847strings[3233] = str->add(strings[3233]);
17848strings[3234] = str->add(strings[3234]);
17849strings[3233] = str->add(strings[3233]);
17850strings[3234] = str->add(strings[3234]);
17851strings[3233] = str->add(strings[3233]);
17852strings[3234] = str->add(strings[3234]);
17853strings[3233] = str->add(strings[3233]);
17854strings[3234] = str->add(strings[3234]);
17855strings[3233] = str->add(strings[3233]);
17856strings[3234] = str->add(strings[3234]);
17857strings[3235] = str->add("e,state,unselected");
17858strings[3234] = str->add(strings[3234]);
17859strings[3235] = str->add(strings[3235]);
17860strings[3234] = str->add(strings[3234]);
17861strings[3235] = str->add(strings[3235]);
17862strings[3234] = str->add(strings[3234]);
17863strings[3235] = str->add(strings[3235]);
17864strings[3234] = str->add(strings[3234]);
17865strings[3235] = str->add(strings[3235]);
17866strings[3234] = str->add(strings[3234]);
17867strings[3235] = str->add(strings[3235]);
17868strings[3234] = str->add(strings[3234]);
17869strings[3236] = str->add("e,state,selected");
17870strings[3234] = str->add(strings[3234]);
17871strings[3236] = str->add(strings[3236]);
17872strings[3234] = str->add(strings[3234]);
17873strings[3236] = str->add(strings[3236]);
17874strings[3234] = str->add(strings[3234]);
17875strings[3236] = str->add(strings[3236]);
17876strings[3234] = str->add(strings[3234]);
17877strings[3236] = str->add(strings[3236]);
17878strings[3234] = str->add(strings[3234]);
17879strings[3236] = str->add(strings[3236]);
17880strings[3234] = str->add(strings[3234]);
17881strings[3237] = str->add("Firefox (Web Browser)");
17882strings[2074] = str->add(strings[2074]);
17883strings[3238] = str->add("XMMS (Music Player)");
17884strings[2077] = str->add(strings[2077]);
17885strings[3239] = str->add("XTerm (Terminal)");
17886strings[2070] = str->add(strings[2070]);
17887strings[3233] = str->add(strings[3233]);
17888strings[3234] = str->add(strings[3234]);
17889strings[3233] = str->add(strings[3233]);
17890strings[3234] = str->add(strings[3234]);
17891strings[3233] = str->add(strings[3233]);
17892strings[3234] = str->add(strings[3234]);
17893strings[3233] = str->add(strings[3233]);
17894strings[3234] = str->add(strings[3234]);
17895strings[3233] = str->add(strings[3233]);
17896strings[3234] = str->add(strings[3234]);
17897strings[3233] = str->add(strings[3233]);
17898strings[3234] = str->add(strings[3234]);
17899strings[3233] = str->add(strings[3233]);
17900strings[3234] = str->add(strings[3234]);
17901strings[3233] = str->add(strings[3233]);
17902strings[3234] = str->add(strings[3234]);
17903strings[3233] = str->add(strings[3233]);
17904strings[3234] = str->add(strings[3234]);
17905strings[3235] = str->add(strings[3235]);
17906strings[3234] = str->add(strings[3234]);
17907strings[3235] = str->add(strings[3235]);
17908strings[3234] = str->add(strings[3234]);
17909strings[3235] = str->add(strings[3235]);
17910strings[3234] = str->add(strings[3234]);
17911strings[3235] = str->add(strings[3235]);
17912strings[3234] = str->add(strings[3234]);
17913strings[3235] = str->add(strings[3235]);
17914strings[3234] = str->add(strings[3234]);
17915strings[3235] = str->add(strings[3235]);
17916strings[3234] = str->add(strings[3234]);
17917strings[3233] = str->add(strings[3233]);
17918strings[3234] = str->add(strings[3234]);
17919strings[3233] = str->add(strings[3233]);
17920strings[3234] = str->add(strings[3234]);
17921strings[3233] = str->add(strings[3233]);
17922strings[3234] = str->add(strings[3234]);
17923strings[3233] = str->add(strings[3233]);
17924strings[3234] = str->add(strings[3234]);
17925strings[3233] = str->add(strings[3233]);
17926strings[3234] = str->add(strings[3234]);
17927strings[3233] = str->add(strings[3233]);
17928strings[3234] = str->add(strings[3234]);
17929strings[3233] = str->add(strings[3233]);
17930strings[3234] = str->add(strings[3234]);
17931strings[3233] = str->add(strings[3233]);
17932strings[3234] = str->add(strings[3234]);
17933strings[3233] = str->add(strings[3233]);
17934strings[3234] = str->add(strings[3234]);
17935strings[3233] = str->add(strings[3233]);
17936strings[3234] = str->add(strings[3234]);
17937strings[3233] = str->add(strings[3233]);
17938strings[3234] = str->add(strings[3234]);
17939strings[3233] = str->add(strings[3233]);
17940strings[3234] = str->add(strings[3234]);
17941strings[3233] = str->add(strings[3233]);
17942strings[3234] = str->add(strings[3234]);
17943strings[3233] = str->add(strings[3233]);
17944strings[3234] = str->add(strings[3234]);
17945strings[3233] = str->add(strings[3233]);
17946strings[3234] = str->add(strings[3234]);
17947strings[3233] = str->add(strings[3233]);
17948strings[3234] = str->add(strings[3234]);
17949strings[3233] = str->add(strings[3233]);
17950strings[3234] = str->add(strings[3234]);
17951strings[3233] = str->add(strings[3233]);
17952strings[3234] = str->add(strings[3234]);
17953strings[3233] = str->add(strings[3233]);
17954strings[3234] = str->add(strings[3234]);
17955strings[3233] = str->add(strings[3233]);
17956strings[3234] = str->add(strings[3234]);
17957strings[3233] = str->add(strings[3233]);
17958strings[3234] = str->add(strings[3234]);
17959strings[3233] = str->add(strings[3233]);
17960strings[3234] = str->add(strings[3234]);
17961strings[3233] = str->add(strings[3233]);
17962strings[3234] = str->add(strings[3234]);
17963strings[3233] = str->add(strings[3233]);
17964strings[3234] = str->add(strings[3234]);
17965strings[3233] = str->add(strings[3233]);
17966strings[3234] = str->add(strings[3234]);
17967strings[3233] = str->add(strings[3233]);
17968strings[3234] = str->add(strings[3234]);
17969strings[3233] = str->add(strings[3233]);
17970strings[3234] = str->add(strings[3234]);
17971strings[3233] = str->add(strings[3233]);
17972strings[3234] = str->add(strings[3234]);
17973strings[3233] = str->add(strings[3233]);
17974strings[3234] = str->add(strings[3234]);
17975strings[3236] = str->add(strings[3236]);
17976strings[3234] = str->add(strings[3234]);
17977strings[3236] = str->add(strings[3236]);
17978strings[3234] = str->add(strings[3234]);
17979strings[3236] = str->add(strings[3236]);
17980strings[3234] = str->add(strings[3234]);
17981strings[3236] = str->add(strings[3236]);
17982strings[3234] = str->add(strings[3234]);
17983strings[3236] = str->add(strings[3236]);
17984strings[3234] = str->add(strings[3234]);
17985strings[3236] = str->add(strings[3236]);
17986strings[3234] = str->add(strings[3234]);
17987strings[3233] = str->add(strings[3233]);
17988strings[3234] = str->add(strings[3234]);
17989strings[3233] = str->add(strings[3233]);
17990strings[3234] = str->add(strings[3234]);
17991strings[3233] = str->add(strings[3233]);
17992strings[3234] = str->add(strings[3234]);
17993strings[3233] = str->add(strings[3233]);
17994strings[3234] = str->add(strings[3234]);
17995strings[3233] = str->add(strings[3233]);
17996strings[3234] = str->add(strings[3234]);
17997strings[3233] = str->add(strings[3233]);
17998strings[3234] = str->add(strings[3234]);
17999strings[3233] = str->add(strings[3233]);
18000strings[3234] = str->add(strings[3234]);
18001strings[3233] = str->add(strings[3233]);
18002strings[3234] = str->add(strings[3234]);
18003strings[3233] = str->add(strings[3233]);
18004strings[3234] = str->add(strings[3234]);
18005strings[3233] = str->add(strings[3233]);
18006strings[3234] = str->add(strings[3234]);
18007str->del(strings[3233]);
18008str->del(strings[3234]);
18009str->del(strings[3233]);
18010str->del(strings[3234]);
18011str->del(strings[3233]);
18012str->del(strings[3234]);
18013str->del(strings[3233]);
18014str->del(strings[3234]);
18015str->del(strings[3233]);
18016str->del(strings[3234]);
18017str->del(strings[3233]);
18018str->del(strings[3234]);
18019str->del(strings[3233]);
18020str->del(strings[3234]);
18021str->del(strings[3233]);
18022str->del(strings[3234]);
18023strings[1932] = str->add(strings[1932]);
18024strings[3240] = str->add("sel");
18025strings[3241] = str->add("program,start");
18026strings[3242] = str->add("unsel");
18027str->del(strings[3235]);
18028str->del(strings[3234]);
18029str->del(strings[3235]);
18030str->del(strings[3234]);
18031strings[1932] = str->add(strings[1932]);
18032strings[3240] = str->add(strings[3240]);
18033strings[3241] = str->add(strings[3241]);
18034strings[3242] = str->add(strings[3242]);
18035str->del(strings[3235]);
18036str->del(strings[3234]);
18037strings[3241] = str->add(strings[3241]);
18038strings[3242] = str->add(strings[3242]);
18039strings[1932] = str->add(strings[1932]);
18040strings[3242] = str->add(strings[3242]);
18041str->del(strings[3235]);
18042str->del(strings[3234]);
18043str->del(strings[3235]);
18044str->del(strings[3234]);
18045str->del(strings[3235]);
18046str->del(strings[3234]);
18047strings[3241] = str->add(strings[3241]);
18048strings[3240] = str->add(strings[3240]);
18049str->del(strings[3236]);
18050str->del(strings[3234]);
18051str->del(strings[3236]);
18052str->del(strings[3234]);
18053strings[3241] = str->add(strings[3241]);
18054strings[3240] = str->add(strings[3240]);
18055str->del(strings[3236]);
18056str->del(strings[3234]);
18057strings[3241] = str->add(strings[3241]);
18058strings[3240] = str->add(strings[3240]);
18059strings[1932] = str->add(strings[1932]);
18060strings[3240] = str->add(strings[3240]);
18061str->del(strings[3236]);
18062str->del(strings[3234]);
18063str->del(strings[3236]);
18064str->del(strings[3234]);
18065str->del(strings[3236]);
18066str->del(strings[3234]);
18067str->del(strings[3233]);
18068str->del(strings[3234]);
18069str->del(strings[3233]);
18070str->del(strings[3234]);
18071str->del(strings[3233]);
18072str->del(strings[3234]);
18073str->del(strings[3233]);
18074str->del(strings[3234]);
18075str->del(strings[3233]);
18076str->del(strings[3234]);
18077str->del(strings[3233]);
18078str->del(strings[3234]);
18079str->del(strings[3233]);
18080str->del(strings[3234]);
18081str->del(strings[3233]);
18082str->del(strings[3234]);
18083str->del(strings[3233]);
18084str->del(strings[3234]);
18085strings[1932] = str->add(strings[1932]);
18086strings[3240] = str->add(strings[3240]);
18087strings[3241] = str->add(strings[3241]);
18088strings[3242] = str->add(strings[3242]);
18089str->del(strings[3235]);
18090str->del(strings[3234]);
18091str->del(strings[3235]);
18092str->del(strings[3234]);
18093strings[1932] = str->add(strings[1932]);
18094strings[3240] = str->add(strings[3240]);
18095strings[3241] = str->add(strings[3241]);
18096strings[3242] = str->add(strings[3242]);
18097str->del(strings[3235]);
18098str->del(strings[3234]);
18099strings[3241] = str->add(strings[3241]);
18100strings[3242] = str->add(strings[3242]);
18101strings[1932] = str->add(strings[1932]);
18102strings[3242] = str->add(strings[3242]);
18103str->del(strings[3235]);
18104str->del(strings[3234]);
18105str->del(strings[3235]);
18106str->del(strings[3234]);
18107str->del(strings[3235]);
18108str->del(strings[3234]);
18109str->del(strings[3233]);
18110str->del(strings[3234]);
18111str->del(strings[3233]);
18112str->del(strings[3234]);
18113str->del(strings[3233]);
18114str->del(strings[3234]);
18115str->del(strings[3233]);
18116str->del(strings[3234]);
18117str->del(strings[3233]);
18118str->del(strings[3234]);
18119str->del(strings[3233]);
18120str->del(strings[3234]);
18121str->del(strings[3233]);
18122str->del(strings[3234]);
18123str->del(strings[3233]);
18124str->del(strings[3234]);
18125str->del(strings[3233]);
18126str->del(strings[3234]);
18127str->del(strings[3233]);
18128str->del(strings[3234]);
18129str->del(strings[3233]);
18130str->del(strings[3234]);
18131str->del(strings[3233]);
18132str->del(strings[3234]);
18133str->del(strings[3233]);
18134str->del(strings[3234]);
18135str->del(strings[3233]);
18136str->del(strings[3234]);
18137str->del(strings[3233]);
18138str->del(strings[3234]);
18139str->del(strings[3233]);
18140str->del(strings[3234]);
18141str->del(strings[3233]);
18142str->del(strings[3234]);
18143str->del(strings[3233]);
18144str->del(strings[3234]);
18145str->del(strings[3233]);
18146str->del(strings[3234]);
18147str->del(strings[3233]);
18148str->del(strings[3234]);
18149str->del(strings[3233]);
18150str->del(strings[3234]);
18151str->del(strings[3233]);
18152str->del(strings[3234]);
18153str->del(strings[3233]);
18154str->del(strings[3234]);
18155str->del(strings[3233]);
18156str->del(strings[3234]);
18157str->del(strings[3233]);
18158str->del(strings[3234]);
18159str->del(strings[3233]);
18160str->del(strings[3234]);
18161str->del(strings[3233]);
18162str->del(strings[3234]);
18163str->del(strings[3233]);
18164str->del(strings[3234]);
18165str->del(strings[3233]);
18166str->del(strings[3234]);
18167strings[1932] = str->add(strings[1932]);
18168strings[3242] = str->add(strings[3242]);
18169strings[3241] = str->add(strings[3241]);
18170strings[3240] = str->add(strings[3240]);
18171str->del(strings[3236]);
18172str->del(strings[3234]);
18173str->del(strings[3236]);
18174str->del(strings[3234]);
18175strings[1932] = str->add(strings[1932]);
18176strings[3242] = str->add(strings[3242]);
18177strings[3241] = str->add(strings[3241]);
18178strings[3240] = str->add(strings[3240]);
18179str->del(strings[3236]);
18180str->del(strings[3234]);
18181strings[3241] = str->add(strings[3241]);
18182strings[3240] = str->add(strings[3240]);
18183strings[1932] = str->add(strings[1932]);
18184strings[3240] = str->add(strings[3240]);
18185str->del(strings[3236]);
18186str->del(strings[3234]);
18187str->del(strings[3236]);
18188str->del(strings[3234]);
18189str->del(strings[3236]);
18190str->del(strings[3234]);
18191str->del(strings[3233]);
18192str->del(strings[3234]);
18193str->del(strings[3233]);
18194str->del(strings[3234]);
18195str->del(strings[3233]);
18196str->del(strings[3234]);
18197str->del(strings[3233]);
18198str->del(strings[3234]);
18199str->del(strings[3233]);
18200str->del(strings[3234]);
18201str->del(strings[3233]);
18202str->del(strings[3234]);
18203str->del(strings[3233]);
18204str->del(strings[3234]);
18205str->del(strings[3233]);
18206str->del(strings[3234]);
18207str->del(strings[3233]);
18208str->del(strings[3234]);
18209str->del(strings[3233]);
18210str->del(strings[3234]);
18211str->del(strings[1932]);
18212str->del(strings[3240]);
18213str->del(strings[3241]);
18214str->del(strings[3242]);
18215str->del(strings[1932]);
18216str->del(strings[3240]);
18217str->del(strings[3241]);
18218str->del(strings[3242]);
18219str->del(strings[3241]);
18220str->del(strings[3242]);
18221str->del(strings[1932]);
18222str->del(strings[3242]);
18223str->del(strings[3241]);
18224str->del(strings[3240]);
18225str->del(strings[3241]);
18226str->del(strings[3240]);
18227str->del(strings[3241]);
18228str->del(strings[3240]);
18229str->del(strings[1932]);
18230str->del(strings[3240]);
18231str->del(strings[1932]);
18232str->del(strings[3240]);
18233str->del(strings[3241]);
18234str->del(strings[3242]);
18235str->del(strings[1932]);
18236str->del(strings[3240]);
18237str->del(strings[3241]);
18238str->del(strings[3242]);
18239str->del(strings[3241]);
18240str->del(strings[3242]);
18241str->del(strings[1932]);
18242str->del(strings[3242]);
18243str->del(strings[1932]);
18244str->del(strings[3242]);
18245str->del(strings[3241]);
18246str->del(strings[3240]);
18247str->del(strings[1932]);
18248str->del(strings[3242]);
18249str->del(strings[3241]);
18250str->del(strings[3240]);
18251str->del(strings[3241]);
18252str->del(strings[3240]);
18253str->del(strings[1932]);
18254str->del(strings[3240]);
18255strings[361] = str->add(strings[361]);
18256strings[362] = str->add(strings[362]);
18257strings[361] = str->add(strings[361]);
18258str->del(strings[361]);
18259strings[362] = str->add(strings[362]);
18260str->del(strings[362]);
18261strings[3243] = str->add("resize");
18262str->del(strings[3243]);
18263strings[64] = str->add(strings[64]);
18264strings[2581] = str->add(strings[2581]);
18265strings[64] = str->add(strings[64]);
18266strings[3244] = str->add("load");
18267strings[1841] = str->add(strings[1841]);
18268strings[64] = str->add(strings[64]);
18269strings[1949] = str->add(strings[1949]);
18270strings[64] = str->add(strings[64]);
18271strings[1880] = str->add(strings[1880]);
18272strings[64] = str->add(strings[64]);
18273strings[1876] = str->add(strings[1876]);
18274str->del(strings[64]);
18275strings[379] = str->add(strings[379]);
18276strings[1842] = str->add(strings[1842]);
18277strings[1842] = str->add(strings[1842]);
18278strings[64] = str->add(strings[64]);
18279strings[1874] = str->add(strings[1874]);
18280strings[64] = str->add(strings[64]);
18281strings[2634] = str->add(strings[2634]);
18282strings[3244] = str->add(strings[3244]);
18283strings[1841] = str->add(strings[1841]);
18284strings[64] = str->add(strings[64]);
18285strings[2585] = str->add(strings[2585]);
18286strings[64] = str->add(strings[64]);
18287strings[3244] = str->add(strings[3244]);
18288strings[3220] = str->add(strings[3220]);
18289strings[1841] = str->add(strings[1841]);
18290str->del(strings[64]);
18291strings[385] = str->add(strings[385]);
18292strings[3220] = str->add(strings[3220]);
18293strings[64] = str->add(strings[64]);
18294strings[2586] = str->add(strings[2586]);
18295strings[3244] = str->add(strings[3244]);
18296strings[1841] = str->add(strings[1841]);
18297strings[64] = str->add(strings[64]);
18298strings[2886] = str->add(strings[2886]);
18299strings[64] = str->add(strings[64]);
18300strings[2888] = str->add(strings[2888]);
18301strings[64] = str->add(strings[64]);
18302strings[2634] = str->add(strings[2634]);
18303strings[3244] = str->add(strings[3244]);
18304strings[1841] = str->add(strings[1841]);
18305strings[64] = str->add(strings[64]);
18306strings[2585] = str->add(strings[2585]);
18307strings[64] = str->add(strings[64]);
18308strings[3244] = str->add(strings[3244]);
18309strings[3221] = str->add(strings[3221]);
18310strings[1841] = str->add(strings[1841]);
18311str->del(strings[64]);
18312strings[385] = str->add(strings[385]);
18313strings[3221] = str->add(strings[3221]);
18314strings[64] = str->add(strings[64]);
18315strings[2586] = str->add(strings[2586]);
18316strings[3244] = str->add(strings[3244]);
18317strings[1841] = str->add(strings[1841]);
18318strings[64] = str->add(strings[64]);
18319strings[2886] = str->add(strings[2886]);
18320strings[64] = str->add(strings[64]);
18321strings[2888] = str->add(strings[2888]);
18322strings[64] = str->add(strings[64]);
18323strings[2634] = str->add(strings[2634]);
18324strings[3244] = str->add(strings[3244]);
18325strings[1841] = str->add(strings[1841]);
18326strings[64] = str->add(strings[64]);
18327strings[2585] = str->add(strings[2585]);
18328strings[64] = str->add(strings[64]);
18329strings[3244] = str->add(strings[3244]);
18330strings[3222] = str->add(strings[3222]);
18331strings[1841] = str->add(strings[1841]);
18332str->del(strings[64]);
18333strings[385] = str->add(strings[385]);
18334strings[3222] = str->add(strings[3222]);
18335strings[64] = str->add(strings[64]);
18336strings[2586] = str->add(strings[2586]);
18337strings[3244] = str->add(strings[3244]);
18338strings[1841] = str->add(strings[1841]);
18339strings[64] = str->add(strings[64]);
18340strings[2886] = str->add(strings[2886]);
18341strings[64] = str->add(strings[64]);
18342strings[2888] = str->add(strings[2888]);
18343strings[64] = str->add(strings[64]);
18344strings[2634] = str->add(strings[2634]);
18345strings[3244] = str->add(strings[3244]);
18346strings[1841] = str->add(strings[1841]);
18347strings[64] = str->add(strings[64]);
18348strings[2584] = str->add(strings[2584]);
18349strings[3244] = str->add(strings[3244]);
18350strings[1841] = str->add(strings[1841]);
18351strings[3224] = str->add(strings[3224]);
18352strings[3245] = str->add("/usr/share/icons/Tango/24x24/categories/package_graphics.png//://(nil)//@/0/0.00000/64x64");
18353strings[3224] = str->add(strings[3224]);
18354strings[64] = str->add(strings[64]);
18355strings[2585] = str->add(strings[2585]);
18356strings[64] = str->add(strings[64]);
18357strings[3244] = str->add(strings[3244]);
18358strings[3223] = str->add(strings[3223]);
18359strings[1841] = str->add(strings[1841]);
18360str->del(strings[64]);
18361strings[385] = str->add(strings[385]);
18362strings[3223] = str->add(strings[3223]);
18363strings[64] = str->add(strings[64]);
18364strings[2586] = str->add(strings[2586]);
18365strings[3244] = str->add(strings[3244]);
18366strings[1841] = str->add(strings[1841]);
18367strings[64] = str->add(strings[64]);
18368strings[2886] = str->add(strings[2886]);
18369strings[64] = str->add(strings[64]);
18370strings[2888] = str->add(strings[2888]);
18371strings[64] = str->add(strings[64]);
18372strings[2634] = str->add(strings[2634]);
18373strings[3244] = str->add(strings[3244]);
18374strings[1841] = str->add(strings[1841]);
18375strings[64] = str->add(strings[64]);
18376strings[2585] = str->add(strings[2585]);
18377strings[64] = str->add(strings[64]);
18378strings[3244] = str->add(strings[3244]);
18379strings[3225] = str->add(strings[3225]);
18380strings[1841] = str->add(strings[1841]);
18381str->del(strings[64]);
18382strings[385] = str->add(strings[385]);
18383strings[3225] = str->add(strings[3225]);
18384strings[64] = str->add(strings[64]);
18385strings[2586] = str->add(strings[2586]);
18386strings[3244] = str->add(strings[3244]);
18387strings[1841] = str->add(strings[1841]);
18388strings[64] = str->add(strings[64]);
18389strings[2886] = str->add(strings[2886]);
18390strings[64] = str->add(strings[64]);
18391strings[2888] = str->add(strings[2888]);
18392strings[64] = str->add(strings[64]);
18393strings[2634] = str->add(strings[2634]);
18394strings[3244] = str->add(strings[3244]);
18395strings[1841] = str->add(strings[1841]);
18396strings[64] = str->add(strings[64]);
18397strings[2585] = str->add(strings[2585]);
18398strings[64] = str->add(strings[64]);
18399strings[3244] = str->add(strings[3244]);
18400strings[3226] = str->add(strings[3226]);
18401strings[1841] = str->add(strings[1841]);
18402str->del(strings[64]);
18403strings[385] = str->add(strings[385]);
18404strings[3226] = str->add(strings[3226]);
18405strings[64] = str->add(strings[64]);
18406strings[2586] = str->add(strings[2586]);
18407strings[3244] = str->add(strings[3244]);
18408strings[1841] = str->add(strings[1841]);
18409strings[64] = str->add(strings[64]);
18410strings[2886] = str->add(strings[2886]);
18411strings[64] = str->add(strings[64]);
18412strings[2888] = str->add(strings[2888]);
18413strings[64] = str->add(strings[64]);
18414strings[2634] = str->add(strings[2634]);
18415strings[3244] = str->add(strings[3244]);
18416strings[1841] = str->add(strings[1841]);
18417strings[64] = str->add(strings[64]);
18418strings[2585] = str->add(strings[2585]);
18419strings[64] = str->add(strings[64]);
18420strings[3244] = str->add(strings[3244]);
18421strings[3227] = str->add(strings[3227]);
18422strings[1841] = str->add(strings[1841]);
18423str->del(strings[64]);
18424strings[385] = str->add(strings[385]);
18425strings[3227] = str->add(strings[3227]);
18426strings[64] = str->add(strings[64]);
18427strings[2586] = str->add(strings[2586]);
18428strings[3244] = str->add(strings[3244]);
18429strings[1841] = str->add(strings[1841]);
18430strings[64] = str->add(strings[64]);
18431strings[2886] = str->add(strings[2886]);
18432strings[64] = str->add(strings[64]);
18433strings[2888] = str->add(strings[2888]);
18434strings[64] = str->add(strings[64]);
18435strings[2634] = str->add(strings[2634]);
18436strings[3244] = str->add(strings[3244]);
18437strings[1841] = str->add(strings[1841]);
18438strings[64] = str->add(strings[64]);
18439strings[2585] = str->add(strings[2585]);
18440strings[64] = str->add(strings[64]);
18441strings[3244] = str->add(strings[3244]);
18442strings[3228] = str->add(strings[3228]);
18443strings[1841] = str->add(strings[1841]);
18444str->del(strings[64]);
18445strings[385] = str->add(strings[385]);
18446strings[3228] = str->add(strings[3228]);
18447strings[64] = str->add(strings[64]);
18448strings[2586] = str->add(strings[2586]);
18449strings[3244] = str->add(strings[3244]);
18450strings[1841] = str->add(strings[1841]);
18451strings[64] = str->add(strings[64]);
18452strings[2886] = str->add(strings[2886]);
18453strings[64] = str->add(strings[64]);
18454strings[2888] = str->add(strings[2888]);
18455strings[64] = str->add(strings[64]);
18456strings[2634] = str->add(strings[2634]);
18457strings[3244] = str->add(strings[3244]);
18458strings[1841] = str->add(strings[1841]);
18459strings[64] = str->add(strings[64]);
18460strings[2585] = str->add(strings[2585]);
18461strings[64] = str->add(strings[64]);
18462strings[3244] = str->add(strings[3244]);
18463strings[1721] = str->add(strings[1721]);
18464strings[1841] = str->add(strings[1841]);
18465str->del(strings[64]);
18466strings[385] = str->add(strings[385]);
18467strings[1721] = str->add(strings[1721]);
18468strings[64] = str->add(strings[64]);
18469strings[2586] = str->add(strings[2586]);
18470strings[3244] = str->add(strings[3244]);
18471strings[1841] = str->add(strings[1841]);
18472strings[64] = str->add(strings[64]);
18473strings[2886] = str->add(strings[2886]);
18474strings[64] = str->add(strings[64]);
18475strings[2888] = str->add(strings[2888]);
18476strings[64] = str->add(strings[64]);
18477strings[2634] = str->add(strings[2634]);
18478strings[3244] = str->add(strings[3244]);
18479strings[1841] = str->add(strings[1841]);
18480strings[64] = str->add(strings[64]);
18481strings[2585] = str->add(strings[2585]);
18482strings[64] = str->add(strings[64]);
18483strings[3244] = str->add(strings[3244]);
18484strings[3229] = str->add(strings[3229]);
18485strings[1841] = str->add(strings[1841]);
18486str->del(strings[64]);
18487strings[385] = str->add(strings[385]);
18488strings[3229] = str->add(strings[3229]);
18489strings[64] = str->add(strings[64]);
18490strings[2586] = str->add(strings[2586]);
18491strings[3244] = str->add(strings[3244]);
18492strings[1841] = str->add(strings[1841]);
18493strings[64] = str->add(strings[64]);
18494strings[2886] = str->add(strings[2886]);
18495strings[64] = str->add(strings[64]);
18496strings[2888] = str->add(strings[2888]);
18497strings[3246] = str->add("resize");
18498strings[3246] = str->add(strings[3246]);
18499strings[3246] = str->add(strings[3246]);
18500strings[3246] = str->add(strings[3246]);
18501strings[3246] = str->add(strings[3246]);
18502strings[3246] = str->add(strings[3246]);
18503strings[3246] = str->add(strings[3246]);
18504strings[3246] = str->add(strings[3246]);
18505strings[3246] = str->add(strings[3246]);
18506strings[3246] = str->add(strings[3246]);
18507strings[3246] = str->add(strings[3246]);
18508strings[3246] = str->add(strings[3246]);
18509strings[3246] = str->add(strings[3246]);
18510strings[3246] = str->add(strings[3246]);
18511strings[3246] = str->add(strings[3246]);
18512strings[3246] = str->add(strings[3246]);
18513strings[3246] = str->add(strings[3246]);
18514strings[3246] = str->add(strings[3246]);
18515strings[3246] = str->add(strings[3246]);
18516strings[3246] = str->add(strings[3246]);
18517strings[3246] = str->add(strings[3246]);
18518strings[3246] = str->add(strings[3246]);
18519strings[3246] = str->add(strings[3246]);
18520strings[3246] = str->add(strings[3246]);
18521strings[3246] = str->add(strings[3246]);
18522strings[3246] = str->add(strings[3246]);
18523strings[3246] = str->add(strings[3246]);
18524strings[3246] = str->add(strings[3246]);
18525strings[3246] = str->add(strings[3246]);
18526strings[3246] = str->add(strings[3246]);
18527strings[3246] = str->add(strings[3246]);
18528strings[3246] = str->add(strings[3246]);
18529strings[361] = str->add(strings[361]);
18530strings[362] = str->add(strings[362]);
18531strings[361] = str->add(strings[361]);
18532str->del(strings[361]);
18533strings[362] = str->add(strings[362]);
18534str->del(strings[362]);
18535strings[3246] = str->add(strings[3246]);
18536str->del(strings[3246]);
18537strings[64] = str->add(strings[64]);
18538strings[2581] = str->add(strings[2581]);
18539strings[64] = str->add(strings[64]);
18540strings[3244] = str->add(strings[3244]);
18541strings[1841] = str->add(strings[1841]);
18542strings[64] = str->add(strings[64]);
18543strings[1949] = str->add(strings[1949]);
18544strings[64] = str->add(strings[64]);
18545strings[1880] = str->add(strings[1880]);
18546strings[64] = str->add(strings[64]);
18547strings[1876] = str->add(strings[1876]);
18548str->del(strings[64]);
18549strings[379] = str->add(strings[379]);
18550strings[1842] = str->add(strings[1842]);
18551strings[1842] = str->add(strings[1842]);
18552strings[64] = str->add(strings[64]);
18553strings[1874] = str->add(strings[1874]);
18554strings[64] = str->add(strings[64]);
18555strings[2583] = str->add(strings[2583]);
18556strings[3244] = str->add(strings[3244]);
18557strings[1841] = str->add(strings[1841]);
18558strings[64] = str->add(strings[64]);
18559strings[2584] = str->add(strings[2584]);
18560strings[3244] = str->add(strings[3244]);
18561strings[1841] = str->add(strings[1841]);
18562strings[2074] = str->add(strings[2074]);
18563strings[64] = str->add(strings[64]);
18564strings[2585] = str->add(strings[2585]);
18565strings[64] = str->add(strings[64]);
18566strings[3244] = str->add(strings[3244]);
18567strings[3237] = str->add(strings[3237]);
18568strings[1841] = str->add(strings[1841]);
18569str->del(strings[64]);
18570strings[385] = str->add(strings[385]);
18571strings[3237] = str->add(strings[3237]);
18572strings[64] = str->add(strings[64]);
18573strings[2886] = str->add(strings[2886]);
18574strings[64] = str->add(strings[64]);
18575strings[2888] = str->add(strings[2888]);
18576strings[64] = str->add(strings[64]);
18577strings[2583] = str->add(strings[2583]);
18578strings[3244] = str->add(strings[3244]);
18579strings[1841] = str->add(strings[1841]);
18580strings[64] = str->add(strings[64]);
18581strings[2584] = str->add(strings[2584]);
18582strings[3244] = str->add(strings[3244]);
18583strings[1841] = str->add(strings[1841]);
18584strings[2077] = str->add(strings[2077]);
18585strings[64] = str->add(strings[64]);
18586strings[2585] = str->add(strings[2585]);
18587strings[64] = str->add(strings[64]);
18588strings[3244] = str->add(strings[3244]);
18589strings[3238] = str->add(strings[3238]);
18590strings[1841] = str->add(strings[1841]);
18591str->del(strings[64]);
18592strings[385] = str->add(strings[385]);
18593strings[3238] = str->add(strings[3238]);
18594strings[64] = str->add(strings[64]);
18595strings[2886] = str->add(strings[2886]);
18596strings[64] = str->add(strings[64]);
18597strings[2888] = str->add(strings[2888]);
18598strings[64] = str->add(strings[64]);
18599strings[2583] = str->add(strings[2583]);
18600strings[3244] = str->add(strings[3244]);
18601strings[1841] = str->add(strings[1841]);
18602strings[64] = str->add(strings[64]);
18603strings[2584] = str->add(strings[2584]);
18604strings[3244] = str->add(strings[3244]);
18605strings[1841] = str->add(strings[1841]);
18606strings[2070] = str->add(strings[2070]);
18607strings[64] = str->add(strings[64]);
18608strings[2585] = str->add(strings[2585]);
18609strings[64] = str->add(strings[64]);
18610strings[3244] = str->add(strings[3244]);
18611strings[3239] = str->add(strings[3239]);
18612strings[1841] = str->add(strings[1841]);
18613str->del(strings[64]);
18614strings[385] = str->add(strings[385]);
18615strings[3239] = str->add(strings[3239]);
18616strings[64] = str->add(strings[64]);
18617strings[2886] = str->add(strings[2886]);
18618strings[64] = str->add(strings[64]);
18619strings[2888] = str->add(strings[2888]);
18620strings[3246] = str->add(strings[3246]);
18621strings[3246] = str->add(strings[3246]);
18622strings[3246] = str->add(strings[3246]);
18623strings[3246] = str->add(strings[3246]);
18624strings[3246] = str->add(strings[3246]);
18625strings[3246] = str->add(strings[3246]);
18626strings[3246] = str->add(strings[3246]);
18627strings[3246] = str->add(strings[3246]);
18628strings[3246] = str->add(strings[3246]);
18629strings[3246] = str->add(strings[3246]);
18630strings[1933] = str->add(strings[1933]);
18631str->del(strings[3244]);
18632str->del(strings[1841]);
18633str->del(strings[3246]);
18634str->del(strings[1933]);
18635str->del(strings[64]);
18636str->del(strings[2634]);
18637strings[1933] = str->add(strings[1933]);
18638str->del(strings[3244]);
18639str->del(strings[1841]);
18640str->del(strings[3246]);
18641str->del(strings[1933]);
18642str->del(strings[3220]);
18643str->del(strings[64]);
18644str->del(strings[2585]);
18645strings[1933] = str->add(strings[1933]);
18646str->del(strings[3244]);
18647str->del(strings[1841]);
18648str->del(strings[3246]);
18649str->del(strings[1933]);
18650str->del(strings[64]);
18651str->del(strings[2586]);
18652strings[1933] = str->add(strings[1933]);
18653str->del(strings[3244]);
18654str->del(strings[1841]);
18655str->del(strings[3246]);
18656str->del(strings[1933]);
18657str->del(strings[64]);
18658str->del(strings[2634]);
18659strings[1933] = str->add(strings[1933]);
18660str->del(strings[3244]);
18661str->del(strings[1841]);
18662str->del(strings[3246]);
18663str->del(strings[1933]);
18664str->del(strings[3221]);
18665str->del(strings[64]);
18666str->del(strings[2585]);
18667strings[1933] = str->add(strings[1933]);
18668str->del(strings[3244]);
18669str->del(strings[1841]);
18670str->del(strings[3246]);
18671str->del(strings[1933]);
18672str->del(strings[64]);
18673str->del(strings[2586]);
18674strings[1933] = str->add(strings[1933]);
18675str->del(strings[3244]);
18676str->del(strings[1841]);
18677str->del(strings[3246]);
18678str->del(strings[1933]);
18679str->del(strings[64]);
18680str->del(strings[2634]);
18681strings[1933] = str->add(strings[1933]);
18682str->del(strings[3244]);
18683str->del(strings[1841]);
18684str->del(strings[3246]);
18685str->del(strings[1933]);
18686str->del(strings[3222]);
18687str->del(strings[64]);
18688str->del(strings[2585]);
18689strings[1933] = str->add(strings[1933]);
18690str->del(strings[3244]);
18691str->del(strings[1841]);
18692str->del(strings[3246]);
18693str->del(strings[1933]);
18694str->del(strings[64]);
18695str->del(strings[2586]);
18696strings[1933] = str->add(strings[1933]);
18697str->del(strings[3244]);
18698str->del(strings[1841]);
18699str->del(strings[3246]);
18700str->del(strings[1933]);
18701str->del(strings[64]);
18702str->del(strings[2634]);
18703strings[1933] = str->add(strings[1933]);
18704str->del(strings[3244]);
18705str->del(strings[1841]);
18706str->del(strings[3246]);
18707str->del(strings[1933]);
18708str->del(strings[64]);
18709str->del(strings[2584]);
18710strings[1933] = str->add(strings[1933]);
18711str->del(strings[3244]);
18712str->del(strings[1841]);
18713str->del(strings[3246]);
18714str->del(strings[1933]);
18715str->del(strings[3223]);
18716str->del(strings[64]);
18717str->del(strings[2585]);
18718strings[1933] = str->add(strings[1933]);
18719str->del(strings[3244]);
18720str->del(strings[1841]);
18721str->del(strings[3246]);
18722str->del(strings[1933]);
18723str->del(strings[64]);
18724str->del(strings[2586]);
18725strings[1933] = str->add(strings[1933]);
18726str->del(strings[3244]);
18727str->del(strings[1841]);
18728str->del(strings[3246]);
18729str->del(strings[1933]);
18730str->del(strings[64]);
18731str->del(strings[2634]);
18732strings[1933] = str->add(strings[1933]);
18733str->del(strings[3244]);
18734str->del(strings[1841]);
18735str->del(strings[3246]);
18736str->del(strings[1933]);
18737str->del(strings[3225]);
18738str->del(strings[64]);
18739str->del(strings[2585]);
18740strings[1933] = str->add(strings[1933]);
18741str->del(strings[3244]);
18742str->del(strings[1841]);
18743str->del(strings[3246]);
18744str->del(strings[1933]);
18745str->del(strings[64]);
18746str->del(strings[2586]);
18747strings[1933] = str->add(strings[1933]);
18748str->del(strings[3244]);
18749str->del(strings[1841]);
18750str->del(strings[3246]);
18751str->del(strings[1933]);
18752str->del(strings[64]);
18753str->del(strings[2634]);
18754strings[1933] = str->add(strings[1933]);
18755str->del(strings[3244]);
18756str->del(strings[1841]);
18757str->del(strings[3246]);
18758str->del(strings[1933]);
18759str->del(strings[3226]);
18760str->del(strings[64]);
18761str->del(strings[2585]);
18762strings[1933] = str->add(strings[1933]);
18763str->del(strings[3244]);
18764str->del(strings[1841]);
18765str->del(strings[3246]);
18766str->del(strings[1933]);
18767str->del(strings[64]);
18768str->del(strings[2586]);
18769strings[1933] = str->add(strings[1933]);
18770str->del(strings[3244]);
18771str->del(strings[1841]);
18772str->del(strings[3246]);
18773str->del(strings[1933]);
18774str->del(strings[64]);
18775str->del(strings[2634]);
18776strings[1933] = str->add(strings[1933]);
18777str->del(strings[3244]);
18778str->del(strings[1841]);
18779str->del(strings[3246]);
18780str->del(strings[1933]);
18781str->del(strings[3227]);
18782str->del(strings[64]);
18783str->del(strings[2585]);
18784strings[1933] = str->add(strings[1933]);
18785str->del(strings[3244]);
18786str->del(strings[1841]);
18787str->del(strings[3246]);
18788str->del(strings[1933]);
18789str->del(strings[64]);
18790str->del(strings[2586]);
18791strings[1933] = str->add(strings[1933]);
18792str->del(strings[3244]);
18793str->del(strings[1841]);
18794str->del(strings[3246]);
18795str->del(strings[1933]);
18796str->del(strings[64]);
18797str->del(strings[2634]);
18798strings[1933] = str->add(strings[1933]);
18799str->del(strings[3244]);
18800str->del(strings[1841]);
18801str->del(strings[3246]);
18802str->del(strings[1933]);
18803str->del(strings[3228]);
18804str->del(strings[64]);
18805str->del(strings[2585]);
18806strings[1933] = str->add(strings[1933]);
18807str->del(strings[3244]);
18808str->del(strings[1841]);
18809str->del(strings[3246]);
18810str->del(strings[1933]);
18811str->del(strings[64]);
18812str->del(strings[2586]);
18813strings[1933] = str->add(strings[1933]);
18814str->del(strings[3244]);
18815str->del(strings[1841]);
18816str->del(strings[3246]);
18817str->del(strings[1933]);
18818str->del(strings[64]);
18819str->del(strings[2634]);
18820strings[1933] = str->add(strings[1933]);
18821str->del(strings[3244]);
18822str->del(strings[1841]);
18823str->del(strings[3246]);
18824str->del(strings[1933]);
18825str->del(strings[1721]);
18826str->del(strings[64]);
18827str->del(strings[2585]);
18828strings[1933] = str->add(strings[1933]);
18829str->del(strings[3244]);
18830str->del(strings[1841]);
18831str->del(strings[3246]);
18832str->del(strings[1933]);
18833str->del(strings[64]);
18834str->del(strings[2586]);
18835strings[1933] = str->add(strings[1933]);
18836str->del(strings[3244]);
18837str->del(strings[1841]);
18838str->del(strings[3246]);
18839str->del(strings[1933]);
18840str->del(strings[64]);
18841str->del(strings[2634]);
18842strings[1933] = str->add(strings[1933]);
18843str->del(strings[3244]);
18844str->del(strings[1841]);
18845str->del(strings[3246]);
18846str->del(strings[1933]);
18847str->del(strings[3229]);
18848str->del(strings[64]);
18849str->del(strings[2585]);
18850strings[1933] = str->add(strings[1933]);
18851str->del(strings[3244]);
18852str->del(strings[1841]);
18853str->del(strings[3246]);
18854str->del(strings[1933]);
18855str->del(strings[64]);
18856str->del(strings[2586]);
18857strings[1933] = str->add(strings[1933]);
18858str->del(strings[3244]);
18859str->del(strings[1841]);
18860str->del(strings[3246]);
18861str->del(strings[1933]);
18862str->del(strings[1842]);
18863str->del(strings[1842]);
18864str->del(strings[64]);
18865str->del(strings[2581]);
18866str->del(strings[64]);
18867str->del(strings[2886]);
18868str->del(strings[64]);
18869str->del(strings[2888]);
18870str->del(strings[3220]);
18871str->del(strings[385]);
18872str->del(strings[64]);
18873str->del(strings[2886]);
18874str->del(strings[64]);
18875str->del(strings[2888]);
18876str->del(strings[3221]);
18877str->del(strings[385]);
18878str->del(strings[64]);
18879str->del(strings[2886]);
18880str->del(strings[64]);
18881str->del(strings[2888]);
18882str->del(strings[3222]);
18883str->del(strings[385]);
18884str->del(strings[64]);
18885str->del(strings[2886]);
18886str->del(strings[64]);
18887str->del(strings[2888]);
18888str->del(strings[3224]);
18889str->del(strings[3223]);
18890str->del(strings[385]);
18891str->del(strings[64]);
18892str->del(strings[2886]);
18893str->del(strings[64]);
18894str->del(strings[2888]);
18895str->del(strings[3225]);
18896str->del(strings[385]);
18897str->del(strings[64]);
18898str->del(strings[2886]);
18899str->del(strings[64]);
18900str->del(strings[2888]);
18901str->del(strings[3226]);
18902str->del(strings[385]);
18903str->del(strings[64]);
18904str->del(strings[2886]);
18905str->del(strings[64]);
18906str->del(strings[2888]);
18907str->del(strings[3227]);
18908str->del(strings[385]);
18909str->del(strings[64]);
18910str->del(strings[2886]);
18911str->del(strings[64]);
18912str->del(strings[2888]);
18913str->del(strings[3228]);
18914str->del(strings[385]);
18915str->del(strings[64]);
18916str->del(strings[2886]);
18917str->del(strings[64]);
18918str->del(strings[2888]);
18919str->del(strings[1721]);
18920str->del(strings[385]);
18921str->del(strings[64]);
18922str->del(strings[2886]);
18923str->del(strings[64]);
18924str->del(strings[2888]);
18925str->del(strings[3229]);
18926str->del(strings[385]);
18927str->del(strings[64]);
18928str->del(strings[1949]);
18929str->del(strings[64]);
18930str->del(strings[1880]);
18931str->del(strings[64]);
18932str->del(strings[1876]);
18933str->del(strings[379]);
18934str->del(strings[64]);
18935str->del(strings[1874]);
18936str->del(strings[361]);
18937str->del(strings[362]);
18938str->del(strings[1842]);
18939strings[1842] = str->add(strings[1842]);
18940str->del(strings[1842]);
18941strings[1842] = str->add(strings[1842]);
18942strings[3237] = str->add(strings[3237]);
18943strings[3237] = str->add(strings[3237]);
18944strings[3238] = str->add(strings[3238]);
18945strings[3238] = str->add(strings[3238]);
18946strings[3239] = str->add(strings[3239]);
18947strings[3239] = str->add(strings[3239]);
18948str->del(strings[64]);
18949str->del(strings[2913]);
18950strings[64] = str->add(strings[64]);
18951strings[3021] = str->add(strings[3021]);
18952strings[1932] = str->add(strings[1932]);
18953strings[1840] = str->add(strings[1840]);
18954strings[3247] = str->add("program,start");
18955strings[1844] = str->add(strings[1844]);
18956strings[1932] = str->add(strings[1932]);
18957strings[1844] = str->add(strings[1844]);
18958strings[3247] = str->add(strings[3247]);
18959strings[1840] = str->add(strings[1840]);
18960strings[1932] = str->add(strings[1932]);
18961strings[1851] = str->add(strings[1851]);
18962strings[3247] = str->add(strings[3247]);
18963strings[1851] = str->add(strings[1851]);
18964strings[1932] = str->add(strings[1932]);
18965strings[3248] = str->add("unsel");
18966strings[1932] = str->add(strings[1932]);
18967strings[3248] = str->add(strings[3248]);
18968strings[1932] = str->add(strings[1932]);
18969strings[3249] = str->add("e_out");
18970strings[1932] = str->add(strings[1932]);
18971strings[3248] = str->add(strings[3248]);
18972strings[1932] = str->add(strings[1932]);
18973strings[3248] = str->add(strings[3248]);
18974strings[1932] = str->add(strings[1932]);
18975strings[3248] = str->add(strings[3248]);
18976strings[1932] = str->add(strings[1932]);
18977strings[3248] = str->add(strings[3248]);
18978str->del(strings[3244]);
18979str->del(strings[1841]);
18980str->del(strings[3244]);
18981str->del(strings[1841]);
18982str->del(strings[3244]);
18983str->del(strings[1841]);
18984str->del(strings[3244]);
18985str->del(strings[1841]);
18986str->del(strings[3244]);
18987str->del(strings[1841]);
18988str->del(strings[3244]);
18989str->del(strings[1841]);
18990str->del(strings[3244]);
18991str->del(strings[1841]);
18992str->del(strings[3244]);
18993str->del(strings[1841]);
18994str->del(strings[3244]);
18995str->del(strings[1841]);
18996str->del(strings[3244]);
18997str->del(strings[1841]);
18998str->del(strings[3246]);
18999str->del(strings[3246]);
19000str->del(strings[3246]);
19001str->del(strings[3246]);
19002str->del(strings[3246]);
19003str->del(strings[3246]);
19004str->del(strings[3246]);
19005str->del(strings[3246]);
19006str->del(strings[3246]);
19007str->del(strings[3246]);
19008str->del(strings[1932]);
19009str->del(strings[1840]);
19010str->del(strings[3247]);
19011str->del(strings[1844]);
19012str->del(strings[1932]);
19013str->del(strings[1844]);
19014str->del(strings[3247]);
19015str->del(strings[1840]);
19016str->del(strings[1932]);
19017str->del(strings[1851]);
19018str->del(strings[3247]);
19019str->del(strings[1851]);
19020str->del(strings[1932]);
19021str->del(strings[3248]);
19022str->del(strings[1932]);
19023str->del(strings[3248]);
19024str->del(strings[1932]);
19025str->del(strings[3249]);
19026str->del(strings[1932]);
19027str->del(strings[3248]);
19028str->del(strings[1932]);
19029str->del(strings[3248]);
19030str->del(strings[1932]);
19031str->del(strings[3248]);
19032str->del(strings[1932]);
19033str->del(strings[3248]);
19034str->del(strings[7]);
19035str->del(strings[2148]);
19036strings[7] = str->add(strings[7]);
19037strings[1869] = str->add(strings[1869]);
19038strings[1932] = str->add(strings[1932]);
19039strings[3250] = str->add("unsel");
19040str->del(strings[1932]);
19041str->del(strings[3250]);
19042str->del(strings[7]);
19043str->del(strings[1869]);
19044strings[7] = str->add(strings[7]);
19045strings[3251] = str->add("images/8");
19046strings[3252] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/8");
19047strings[7] = str->add(strings[7]);
19048strings[3251] = str->add(strings[3251]);
19049strings[1932] = str->add(strings[1932]);
19050strings[3253] = str->add("unsel");
19051str->del(strings[1932]);
19052str->del(strings[3253]);
19053str->del(strings[7]);
19054str->del(strings[3251]);
19055strings[7] = str->add(strings[7]);
19056strings[3254] = str->add("images/9");
19057strings[3255] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/9");
19058strings[7] = str->add(strings[7]);
19059strings[3254] = str->add(strings[3254]);
19060strings[1932] = str->add(strings[1932]);
19061strings[3256] = str->add("sel");
19062strings[1932] = str->add(strings[1932]);
19063strings[3256] = str->add(strings[3256]);
19064str->del(strings[1932]);
19065str->del(strings[3256]);
19066str->del(strings[1932]);
19067str->del(strings[3256]);
19068str->del(strings[7]);
19069str->del(strings[3254]);
19070strings[7] = str->add(strings[7]);
19071strings[2206] = str->add(strings[2206]);
19072strings[1932] = str->add(strings[1932]);
19073strings[3257] = str->add("unsel");
19074str->del(strings[1932]);
19075str->del(strings[3257]);
19076str->del(strings[7]);
19077str->del(strings[2206]);
19078strings[7] = str->add(strings[7]);
19079strings[2213] = str->add(strings[2213]);
19080strings[1932] = str->add(strings[1932]);
19081strings[3258] = str->add("unsel");
19082str->del(strings[1932]);
19083str->del(strings[3258]);
19084str->del(strings[7]);
19085str->del(strings[2213]);
19086strings[7] = str->add(strings[7]);
19087strings[2220] = str->add(strings[2220]);
19088str->del(strings[7]);
19089str->del(strings[2220]);
19090strings[7] = str->add(strings[7]);
19091strings[2226] = str->add(strings[2226]);
19092str->del(strings[7]);
19093str->del(strings[2226]);
19094strings[7] = str->add(strings[7]);
19095strings[2257] = str->add(strings[2257]);
19096str->del(strings[7]);
19097str->del(strings[2257]);
19098strings[7] = str->add(strings[7]);
19099strings[2270] = str->add(strings[2270]);
19100str->del(strings[7]);
19101str->del(strings[2270]);
19102strings[7] = str->add(strings[7]);
19103strings[2276] = str->add(strings[2276]);
19104str->del(strings[7]);
19105str->del(strings[2276]);
19106strings[7] = str->add(strings[7]);
19107strings[3259] = str->add("images/17");
19108strings[3260] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/17");
19109strings[7] = str->add(strings[7]);
19110strings[3259] = str->add(strings[3259]);
19111str->del(strings[7]);
19112str->del(strings[3259]);
19113strings[7] = str->add(strings[7]);
19114strings[2292] = str->add(strings[2292]);
19115strings[3261] = str->add("e,action,mouse,move");
19116strings[3262] = str->add("e");
19117str->del(strings[3261]);
19118str->del(strings[3262]);
19119strings[3263] = str->add("e,action,mouse,move");
19120strings[3264] = str->add("e");
19121str->del(strings[3263]);
19122str->del(strings[3264]);
19123strings[3265] = str->add("e,action,mouse,move");
19124strings[3266] = str->add("e");
19125str->del(strings[3265]);
19126str->del(strings[3266]);
19127strings[3267] = str->add("e,action,mouse,move");
19128strings[3268] = str->add("e");
19129str->del(strings[3267]);
19130str->del(strings[3268]);
19131str->del(strings[7]);
19132str->del(strings[2292]);
19133strings[7] = str->add(strings[7]);
19134strings[2310] = str->add(strings[2310]);
19135strings[3269] = str->add("e,action,mouse,move");
19136strings[3270] = str->add("e");
19137str->del(strings[3269]);
19138str->del(strings[3270]);
19139strings[3271] = str->add("e,action,mouse,move");
19140strings[3272] = str->add("e");
19141str->del(strings[3271]);
19142str->del(strings[3272]);
19143strings[3273] = str->add("e,action,mouse,move");
19144strings[3274] = str->add("e");
19145str->del(strings[3273]);
19146str->del(strings[3274]);
19147strings[3275] = str->add("e,action,mouse,move");
19148strings[3276] = str->add("e");
19149str->del(strings[3275]);
19150str->del(strings[3276]);
19151strings[3277] = str->add("e,action,mouse,move");
19152strings[3278] = str->add("e");
19153str->del(strings[3277]);
19154str->del(strings[3278]);
19155str->del(strings[7]);
19156str->del(strings[2310]);
19157strings[7] = str->add(strings[7]);
19158strings[3279] = str->add("images/20");
19159strings[3280] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/20");
19160strings[7] = str->add(strings[7]);
19161strings[3279] = str->add(strings[3279]);
19162strings[3281] = str->add("e,action,mouse,move");
19163strings[3282] = str->add("e");
19164str->del(strings[3281]);
19165str->del(strings[3282]);
19166strings[3283] = str->add("e,action,mouse,move");
19167strings[3284] = str->add("e");
19168str->del(strings[3283]);
19169str->del(strings[3284]);
19170strings[3285] = str->add("e,action,mouse,move");
19171strings[3286] = str->add("e");
19172str->del(strings[3285]);
19173str->del(strings[3286]);
19174strings[3287] = str->add("e,action,mouse,move");
19175strings[3288] = str->add("e");
19176str->del(strings[3287]);
19177str->del(strings[3288]);
19178strings[3289] = str->add("e,action,mouse,move");
19179strings[3290] = str->add("e");
19180str->del(strings[3289]);
19181str->del(strings[3290]);
19182strings[3291] = str->add("e,action,mouse,move");
19183strings[3292] = str->add("e");
19184strings[3293] = str->add("e,state,unselected");
19185strings[3292] = str->add(strings[3292]);
19186strings[3293] = str->add(strings[3293]);
19187strings[3292] = str->add(strings[3292]);
19188strings[3293] = str->add(strings[3293]);
19189strings[3292] = str->add(strings[3292]);
19190strings[3293] = str->add(strings[3293]);
19191strings[3292] = str->add(strings[3292]);
19192strings[3293] = str->add(strings[3293]);
19193strings[3292] = str->add(strings[3292]);
19194strings[3293] = str->add(strings[3293]);
19195strings[3292] = str->add(strings[3292]);
19196strings[3294] = str->add("e,state,selected");
19197strings[3292] = str->add(strings[3292]);
19198strings[3294] = str->add(strings[3294]);
19199strings[3292] = str->add(strings[3292]);
19200strings[3294] = str->add(strings[3294]);
19201strings[3292] = str->add(strings[3292]);
19202strings[3294] = str->add(strings[3294]);
19203strings[3292] = str->add(strings[3292]);
19204strings[3294] = str->add(strings[3294]);
19205strings[3292] = str->add(strings[3292]);
19206strings[3294] = str->add(strings[3294]);
19207strings[3292] = str->add(strings[3292]);
19208str->del(strings[3291]);
19209str->del(strings[3292]);
19210strings[3295] = str->add("program,start");
19211strings[3296] = str->add("unsel");
19212str->del(strings[3293]);
19213str->del(strings[3292]);
19214str->del(strings[3293]);
19215str->del(strings[3292]);
19216strings[3295] = str->add(strings[3295]);
19217strings[3296] = str->add(strings[3296]);
19218str->del(strings[3293]);
19219str->del(strings[3292]);
19220strings[3295] = str->add(strings[3295]);
19221strings[3296] = str->add(strings[3296]);
19222strings[1932] = str->add(strings[1932]);
19223strings[3296] = str->add(strings[3296]);
19224str->del(strings[3293]);
19225str->del(strings[3292]);
19226str->del(strings[3293]);
19227str->del(strings[3292]);
19228str->del(strings[3293]);
19229str->del(strings[3292]);
19230strings[3295] = str->add(strings[3295]);
19231strings[3297] = str->add("sel");
19232str->del(strings[3294]);
19233str->del(strings[3292]);
19234str->del(strings[3294]);
19235str->del(strings[3292]);
19236strings[3295] = str->add(strings[3295]);
19237strings[3297] = str->add(strings[3297]);
19238str->del(strings[3294]);
19239str->del(strings[3292]);
19240strings[3295] = str->add(strings[3295]);
19241strings[3297] = str->add(strings[3297]);
19242strings[1932] = str->add(strings[1932]);
19243strings[3297] = str->add(strings[3297]);
19244str->del(strings[3294]);
19245str->del(strings[3292]);
19246str->del(strings[3294]);
19247str->del(strings[3292]);
19248str->del(strings[3294]);
19249str->del(strings[3292]);
19250str->del(strings[3295]);
19251str->del(strings[3296]);
19252str->del(strings[3295]);
19253str->del(strings[3296]);
19254str->del(strings[3295]);
19255str->del(strings[3296]);
19256str->del(strings[1932]);
19257str->del(strings[3296]);
19258str->del(strings[3295]);
19259str->del(strings[3297]);
19260str->del(strings[3295]);
19261str->del(strings[3297]);
19262str->del(strings[3295]);
19263str->del(strings[3297]);
19264str->del(strings[1932]);
19265str->del(strings[3297]);
19266strings[361] = str->add(strings[361]);
19267strings[362] = str->add(strings[362]);
19268strings[361] = str->add(strings[361]);
19269str->del(strings[361]);
19270strings[362] = str->add(strings[362]);
19271str->del(strings[362]);
19272strings[3298] = str->add("resize");
19273str->del(strings[3298]);
19274strings[64] = str->add(strings[64]);
19275strings[2581] = str->add(strings[2581]);
19276strings[64] = str->add(strings[64]);
19277strings[3299] = str->add("load");
19278strings[1841] = str->add(strings[1841]);
19279strings[64] = str->add(strings[64]);
19280strings[1949] = str->add(strings[1949]);
19281strings[64] = str->add(strings[64]);
19282strings[1880] = str->add(strings[1880]);
19283strings[64] = str->add(strings[64]);
19284strings[1876] = str->add(strings[1876]);
19285str->del(strings[64]);
19286strings[379] = str->add(strings[379]);
19287strings[1842] = str->add(strings[1842]);
19288strings[1842] = str->add(strings[1842]);
19289strings[64] = str->add(strings[64]);
19290strings[1874] = str->add(strings[1874]);
19291strings[64] = str->add(strings[64]);
19292strings[2634] = str->add(strings[2634]);
19293strings[3299] = str->add(strings[3299]);
19294strings[1841] = str->add(strings[1841]);
19295strings[64] = str->add(strings[64]);
19296strings[2585] = str->add(strings[2585]);
19297strings[64] = str->add(strings[64]);
19298strings[3299] = str->add(strings[3299]);
19299strings[3220] = str->add(strings[3220]);
19300strings[1841] = str->add(strings[1841]);
19301str->del(strings[64]);
19302strings[385] = str->add(strings[385]);
19303strings[3220] = str->add(strings[3220]);
19304strings[64] = str->add(strings[64]);
19305strings[2586] = str->add(strings[2586]);
19306strings[3299] = str->add(strings[3299]);
19307strings[1841] = str->add(strings[1841]);
19308strings[64] = str->add(strings[64]);
19309strings[2886] = str->add(strings[2886]);
19310strings[64] = str->add(strings[64]);
19311strings[2888] = str->add(strings[2888]);
19312strings[64] = str->add(strings[64]);
19313strings[2634] = str->add(strings[2634]);
19314strings[3299] = str->add(strings[3299]);
19315strings[1841] = str->add(strings[1841]);
19316strings[64] = str->add(strings[64]);
19317strings[2585] = str->add(strings[2585]);
19318strings[64] = str->add(strings[64]);
19319strings[3299] = str->add(strings[3299]);
19320strings[3221] = str->add(strings[3221]);
19321strings[1841] = str->add(strings[1841]);
19322str->del(strings[64]);
19323strings[385] = str->add(strings[385]);
19324strings[3221] = str->add(strings[3221]);
19325strings[64] = str->add(strings[64]);
19326strings[2586] = str->add(strings[2586]);
19327strings[3299] = str->add(strings[3299]);
19328strings[1841] = str->add(strings[1841]);
19329strings[64] = str->add(strings[64]);
19330strings[2886] = str->add(strings[2886]);
19331strings[64] = str->add(strings[64]);
19332strings[2888] = str->add(strings[2888]);
19333strings[64] = str->add(strings[64]);
19334strings[2634] = str->add(strings[2634]);
19335strings[3299] = str->add(strings[3299]);
19336strings[1841] = str->add(strings[1841]);
19337strings[64] = str->add(strings[64]);
19338strings[2585] = str->add(strings[2585]);
19339strings[64] = str->add(strings[64]);
19340strings[3299] = str->add(strings[3299]);
19341strings[3222] = str->add(strings[3222]);
19342strings[1841] = str->add(strings[1841]);
19343str->del(strings[64]);
19344strings[385] = str->add(strings[385]);
19345strings[3222] = str->add(strings[3222]);
19346strings[64] = str->add(strings[64]);
19347strings[2586] = str->add(strings[2586]);
19348strings[3299] = str->add(strings[3299]);
19349strings[1841] = str->add(strings[1841]);
19350strings[64] = str->add(strings[64]);
19351strings[2886] = str->add(strings[2886]);
19352strings[64] = str->add(strings[64]);
19353strings[2888] = str->add(strings[2888]);
19354strings[64] = str->add(strings[64]);
19355strings[2634] = str->add(strings[2634]);
19356strings[3299] = str->add(strings[3299]);
19357strings[1841] = str->add(strings[1841]);
19358strings[64] = str->add(strings[64]);
19359strings[2584] = str->add(strings[2584]);
19360strings[3299] = str->add(strings[3299]);
19361strings[1841] = str->add(strings[1841]);
19362strings[3224] = str->add(strings[3224]);
19363strings[64] = str->add(strings[64]);
19364strings[2585] = str->add(strings[2585]);
19365strings[64] = str->add(strings[64]);
19366strings[3299] = str->add(strings[3299]);
19367strings[3223] = str->add(strings[3223]);
19368strings[1841] = str->add(strings[1841]);
19369str->del(strings[64]);
19370strings[385] = str->add(strings[385]);
19371strings[3223] = str->add(strings[3223]);
19372strings[64] = str->add(strings[64]);
19373strings[2586] = str->add(strings[2586]);
19374strings[3299] = str->add(strings[3299]);
19375strings[1841] = str->add(strings[1841]);
19376strings[64] = str->add(strings[64]);
19377strings[2886] = str->add(strings[2886]);
19378strings[64] = str->add(strings[64]);
19379strings[2888] = str->add(strings[2888]);
19380strings[64] = str->add(strings[64]);
19381strings[2634] = str->add(strings[2634]);
19382strings[3299] = str->add(strings[3299]);
19383strings[1841] = str->add(strings[1841]);
19384strings[64] = str->add(strings[64]);
19385strings[2585] = str->add(strings[2585]);
19386strings[64] = str->add(strings[64]);
19387strings[3299] = str->add(strings[3299]);
19388strings[3225] = str->add(strings[3225]);
19389strings[1841] = str->add(strings[1841]);
19390str->del(strings[64]);
19391strings[385] = str->add(strings[385]);
19392strings[3225] = str->add(strings[3225]);
19393strings[64] = str->add(strings[64]);
19394strings[2586] = str->add(strings[2586]);
19395strings[3299] = str->add(strings[3299]);
19396strings[1841] = str->add(strings[1841]);
19397strings[64] = str->add(strings[64]);
19398strings[2886] = str->add(strings[2886]);
19399strings[64] = str->add(strings[64]);
19400strings[2888] = str->add(strings[2888]);
19401strings[64] = str->add(strings[64]);
19402strings[2634] = str->add(strings[2634]);
19403strings[3299] = str->add(strings[3299]);
19404strings[1841] = str->add(strings[1841]);
19405strings[64] = str->add(strings[64]);
19406strings[2585] = str->add(strings[2585]);
19407strings[64] = str->add(strings[64]);
19408strings[3299] = str->add(strings[3299]);
19409strings[3226] = str->add(strings[3226]);
19410strings[1841] = str->add(strings[1841]);
19411str->del(strings[64]);
19412strings[385] = str->add(strings[385]);
19413strings[3226] = str->add(strings[3226]);
19414strings[64] = str->add(strings[64]);
19415strings[2586] = str->add(strings[2586]);
19416strings[3299] = str->add(strings[3299]);
19417strings[1841] = str->add(strings[1841]);
19418strings[64] = str->add(strings[64]);
19419strings[2886] = str->add(strings[2886]);
19420strings[64] = str->add(strings[64]);
19421strings[2888] = str->add(strings[2888]);
19422strings[64] = str->add(strings[64]);
19423strings[2634] = str->add(strings[2634]);
19424strings[3299] = str->add(strings[3299]);
19425strings[1841] = str->add(strings[1841]);
19426strings[64] = str->add(strings[64]);
19427strings[2585] = str->add(strings[2585]);
19428strings[64] = str->add(strings[64]);
19429strings[3299] = str->add(strings[3299]);
19430strings[3227] = str->add(strings[3227]);
19431strings[1841] = str->add(strings[1841]);
19432str->del(strings[64]);
19433strings[385] = str->add(strings[385]);
19434strings[3227] = str->add(strings[3227]);
19435strings[64] = str->add(strings[64]);
19436strings[2586] = str->add(strings[2586]);
19437strings[3299] = str->add(strings[3299]);
19438strings[1841] = str->add(strings[1841]);
19439strings[64] = str->add(strings[64]);
19440strings[2886] = str->add(strings[2886]);
19441strings[64] = str->add(strings[64]);
19442strings[2888] = str->add(strings[2888]);
19443strings[64] = str->add(strings[64]);
19444strings[2634] = str->add(strings[2634]);
19445strings[3299] = str->add(strings[3299]);
19446strings[1841] = str->add(strings[1841]);
19447strings[64] = str->add(strings[64]);
19448strings[2585] = str->add(strings[2585]);
19449strings[64] = str->add(strings[64]);
19450strings[3299] = str->add(strings[3299]);
19451strings[3228] = str->add(strings[3228]);
19452strings[1841] = str->add(strings[1841]);
19453str->del(strings[64]);
19454strings[385] = str->add(strings[385]);
19455strings[3228] = str->add(strings[3228]);
19456strings[64] = str->add(strings[64]);
19457strings[2586] = str->add(strings[2586]);
19458strings[3299] = str->add(strings[3299]);
19459strings[1841] = str->add(strings[1841]);
19460strings[64] = str->add(strings[64]);
19461strings[2886] = str->add(strings[2886]);
19462strings[64] = str->add(strings[64]);
19463strings[2888] = str->add(strings[2888]);
19464strings[64] = str->add(strings[64]);
19465strings[2634] = str->add(strings[2634]);
19466strings[3299] = str->add(strings[3299]);
19467strings[1841] = str->add(strings[1841]);
19468strings[64] = str->add(strings[64]);
19469strings[2585] = str->add(strings[2585]);
19470strings[64] = str->add(strings[64]);
19471strings[3299] = str->add(strings[3299]);
19472strings[1721] = str->add(strings[1721]);
19473strings[1841] = str->add(strings[1841]);
19474str->del(strings[64]);
19475strings[385] = str->add(strings[385]);
19476strings[1721] = str->add(strings[1721]);
19477strings[64] = str->add(strings[64]);
19478strings[2586] = str->add(strings[2586]);
19479strings[3299] = str->add(strings[3299]);
19480strings[1841] = str->add(strings[1841]);
19481strings[64] = str->add(strings[64]);
19482strings[2886] = str->add(strings[2886]);
19483strings[64] = str->add(strings[64]);
19484strings[2888] = str->add(strings[2888]);
19485strings[64] = str->add(strings[64]);
19486strings[2634] = str->add(strings[2634]);
19487strings[3299] = str->add(strings[3299]);
19488strings[1841] = str->add(strings[1841]);
19489strings[64] = str->add(strings[64]);
19490strings[2585] = str->add(strings[2585]);
19491strings[64] = str->add(strings[64]);
19492strings[3299] = str->add(strings[3299]);
19493strings[3229] = str->add(strings[3229]);
19494strings[1841] = str->add(strings[1841]);
19495str->del(strings[64]);
19496strings[385] = str->add(strings[385]);
19497strings[3229] = str->add(strings[3229]);
19498strings[64] = str->add(strings[64]);
19499strings[2586] = str->add(strings[2586]);
19500strings[3299] = str->add(strings[3299]);
19501strings[1841] = str->add(strings[1841]);
19502strings[64] = str->add(strings[64]);
19503strings[2886] = str->add(strings[2886]);
19504strings[64] = str->add(strings[64]);
19505strings[2888] = str->add(strings[2888]);
19506strings[3300] = str->add("resize");
19507strings[3300] = str->add(strings[3300]);
19508strings[3300] = str->add(strings[3300]);
19509strings[3300] = str->add(strings[3300]);
19510strings[3300] = str->add(strings[3300]);
19511strings[3300] = str->add(strings[3300]);
19512strings[3300] = str->add(strings[3300]);
19513strings[3300] = str->add(strings[3300]);
19514strings[3300] = str->add(strings[3300]);
19515strings[3300] = str->add(strings[3300]);
19516strings[3300] = str->add(strings[3300]);
19517strings[3300] = str->add(strings[3300]);
19518strings[3300] = str->add(strings[3300]);
19519strings[3300] = str->add(strings[3300]);
19520strings[3300] = str->add(strings[3300]);
19521strings[3300] = str->add(strings[3300]);
19522strings[3300] = str->add(strings[3300]);
19523strings[3300] = str->add(strings[3300]);
19524strings[3300] = str->add(strings[3300]);
19525strings[3300] = str->add(strings[3300]);
19526strings[3300] = str->add(strings[3300]);
19527strings[3300] = str->add(strings[3300]);
19528strings[3300] = str->add(strings[3300]);
19529strings[3300] = str->add(strings[3300]);
19530strings[3300] = str->add(strings[3300]);
19531strings[3300] = str->add(strings[3300]);
19532strings[3300] = str->add(strings[3300]);
19533strings[3300] = str->add(strings[3300]);
19534strings[3300] = str->add(strings[3300]);
19535strings[3300] = str->add(strings[3300]);
19536strings[3300] = str->add(strings[3300]);
19537strings[1933] = str->add(strings[1933]);
19538str->del(strings[1933]);
19539str->del(strings[64]);
19540str->del(strings[2583]);
19541strings[1933] = str->add(strings[1933]);
19542str->del(strings[1933]);
19543str->del(strings[64]);
19544str->del(strings[2584]);
19545strings[1933] = str->add(strings[1933]);
19546str->del(strings[1933]);
19547str->del(strings[3237]);
19548str->del(strings[3237]);
19549str->del(strings[3237]);
19550str->del(strings[64]);
19551str->del(strings[2585]);
19552strings[1933] = str->add(strings[1933]);
19553str->del(strings[1933]);
19554str->del(strings[64]);
19555str->del(strings[2583]);
19556strings[1933] = str->add(strings[1933]);
19557str->del(strings[1933]);
19558str->del(strings[64]);
19559str->del(strings[2584]);
19560strings[1933] = str->add(strings[1933]);
19561str->del(strings[1933]);
19562str->del(strings[3238]);
19563str->del(strings[3238]);
19564str->del(strings[3238]);
19565str->del(strings[64]);
19566str->del(strings[2585]);
19567strings[1933] = str->add(strings[1933]);
19568str->del(strings[1933]);
19569str->del(strings[64]);
19570str->del(strings[2583]);
19571strings[1933] = str->add(strings[1933]);
19572str->del(strings[1933]);
19573str->del(strings[64]);
19574str->del(strings[2584]);
19575strings[1933] = str->add(strings[1933]);
19576str->del(strings[1933]);
19577str->del(strings[3239]);
19578str->del(strings[3239]);
19579str->del(strings[3239]);
19580str->del(strings[64]);
19581str->del(strings[2585]);
19582strings[1933] = str->add(strings[1933]);
19583str->del(strings[1933]);
19584str->del(strings[1842]);
19585str->del(strings[1842]);
19586str->del(strings[64]);
19587str->del(strings[2581]);
19588str->del(strings[64]);
19589str->del(strings[2886]);
19590str->del(strings[64]);
19591str->del(strings[2888]);
19592str->del(strings[2074]);
19593str->del(strings[3237]);
19594str->del(strings[385]);
19595str->del(strings[64]);
19596str->del(strings[2886]);
19597str->del(strings[64]);
19598str->del(strings[2888]);
19599str->del(strings[2077]);
19600str->del(strings[3238]);
19601str->del(strings[385]);
19602str->del(strings[64]);
19603str->del(strings[2886]);
19604str->del(strings[64]);
19605str->del(strings[2888]);
19606str->del(strings[2070]);
19607str->del(strings[3239]);
19608str->del(strings[385]);
19609str->del(strings[64]);
19610str->del(strings[1949]);
19611str->del(strings[64]);
19612str->del(strings[1880]);
19613str->del(strings[64]);
19614str->del(strings[1876]);
19615str->del(strings[379]);
19616str->del(strings[64]);
19617str->del(strings[1874]);
19618str->del(strings[361]);
19619str->del(strings[362]);
19620strings[3220] = str->add(strings[3220]);
19621strings[3220] = str->add(strings[3220]);
19622strings[64] = str->add(strings[64]);
19623strings[2913] = str->add(strings[2913]);
19624strings[3221] = str->add(strings[3221]);
19625strings[3221] = str->add(strings[3221]);
19626strings[64] = str->add(strings[64]);
19627strings[2913] = str->add(strings[2913]);
19628strings[3222] = str->add(strings[3222]);
19629strings[3222] = str->add(strings[3222]);
19630strings[64] = str->add(strings[64]);
19631strings[2913] = str->add(strings[2913]);
19632strings[3223] = str->add(strings[3223]);
19633strings[3223] = str->add(strings[3223]);
19634strings[64] = str->add(strings[64]);
19635strings[2913] = str->add(strings[2913]);
19636strings[3225] = str->add(strings[3225]);
19637strings[3225] = str->add(strings[3225]);
19638strings[64] = str->add(strings[64]);
19639strings[2913] = str->add(strings[2913]);
19640strings[3226] = str->add(strings[3226]);
19641strings[3226] = str->add(strings[3226]);
19642strings[64] = str->add(strings[64]);
19643strings[2913] = str->add(strings[2913]);
19644strings[3227] = str->add(strings[3227]);
19645strings[3227] = str->add(strings[3227]);
19646strings[64] = str->add(strings[64]);
19647strings[2913] = str->add(strings[2913]);
19648strings[3228] = str->add(strings[3228]);
19649strings[3228] = str->add(strings[3228]);
19650strings[64] = str->add(strings[64]);
19651strings[2913] = str->add(strings[2913]);
19652strings[1721] = str->add(strings[1721]);
19653strings[1721] = str->add(strings[1721]);
19654strings[64] = str->add(strings[64]);
19655strings[2913] = str->add(strings[2913]);
19656strings[3229] = str->add(strings[3229]);
19657strings[3229] = str->add(strings[3229]);
19658strings[64] = str->add(strings[64]);
19659strings[2913] = str->add(strings[2913]);
19660str->del(strings[64]);
19661str->del(strings[3021]);
19662strings[64] = str->add(strings[64]);
19663strings[2913] = str->add(strings[2913]);
19664str->del(strings[64]);
19665str->del(strings[2913]);
19666strings[64] = str->add(strings[64]);
19667strings[3021] = str->add(strings[3021]);
19668str->del(strings[3299]);
19669str->del(strings[1841]);
19670str->del(strings[3299]);
19671str->del(strings[1841]);
19672str->del(strings[3299]);
19673str->del(strings[1841]);
19674str->del(strings[3299]);
19675str->del(strings[1841]);
19676str->del(strings[3299]);
19677str->del(strings[1841]);
19678str->del(strings[3299]);
19679str->del(strings[1841]);
19680str->del(strings[3299]);
19681str->del(strings[1841]);
19682str->del(strings[3299]);
19683str->del(strings[1841]);
19684str->del(strings[3299]);
19685str->del(strings[1841]);
19686str->del(strings[3299]);
19687str->del(strings[1841]);
19688str->del(strings[3299]);
19689str->del(strings[1841]);
19690str->del(strings[3299]);
19691str->del(strings[1841]);
19692str->del(strings[3299]);
19693str->del(strings[1841]);
19694str->del(strings[3299]);
19695str->del(strings[1841]);
19696str->del(strings[3299]);
19697str->del(strings[1841]);
19698str->del(strings[3299]);
19699str->del(strings[1841]);
19700str->del(strings[3299]);
19701str->del(strings[1841]);
19702str->del(strings[3299]);
19703str->del(strings[1841]);
19704str->del(strings[3299]);
19705str->del(strings[1841]);
19706str->del(strings[3299]);
19707str->del(strings[1841]);
19708str->del(strings[3299]);
19709str->del(strings[1841]);
19710str->del(strings[3299]);
19711str->del(strings[1841]);
19712str->del(strings[3299]);
19713str->del(strings[1841]);
19714str->del(strings[3299]);
19715str->del(strings[1841]);
19716str->del(strings[3299]);
19717str->del(strings[1841]);
19718str->del(strings[3299]);
19719str->del(strings[1841]);
19720str->del(strings[3299]);
19721str->del(strings[1841]);
19722str->del(strings[3299]);
19723str->del(strings[1841]);
19724str->del(strings[3299]);
19725str->del(strings[1841]);
19726str->del(strings[3299]);
19727str->del(strings[1841]);
19728str->del(strings[3299]);
19729str->del(strings[1841]);
19730str->del(strings[3299]);
19731str->del(strings[1841]);
19732str->del(strings[3300]);
19733str->del(strings[3300]);
19734str->del(strings[3300]);
19735str->del(strings[3300]);
19736str->del(strings[3300]);
19737str->del(strings[3300]);
19738str->del(strings[3300]);
19739str->del(strings[3300]);
19740str->del(strings[3300]);
19741str->del(strings[3300]);
19742str->del(strings[3300]);
19743str->del(strings[3300]);
19744str->del(strings[3300]);
19745str->del(strings[3300]);
19746str->del(strings[3300]);
19747str->del(strings[3300]);
19748str->del(strings[3300]);
19749str->del(strings[3300]);
19750str->del(strings[3300]);
19751str->del(strings[3300]);
19752str->del(strings[3300]);
19753str->del(strings[3300]);
19754str->del(strings[3300]);
19755str->del(strings[3300]);
19756str->del(strings[3300]);
19757str->del(strings[3300]);
19758str->del(strings[3300]);
19759str->del(strings[3300]);
19760str->del(strings[3300]);
19761str->del(strings[3300]);
19762str->del(strings[3300]);
19763strings[3301] = str->add("e,action,mouse,move");
19764strings[3302] = str->add("e");
19765str->del(strings[3301]);
19766str->del(strings[3302]);
19767str->del(strings[7]);
19768str->del(strings[3279]);
19769strings[7] = str->add(strings[7]);
19770strings[2320] = str->add(strings[2320]);
19771strings[3303] = str->add("e,action,mouse,move");
19772strings[3304] = str->add("e");
19773str->del(strings[3303]);
19774str->del(strings[3304]);
19775strings[3305] = str->add("e,action,mouse,move");
19776strings[3306] = str->add("e");
19777str->del(strings[3305]);
19778str->del(strings[3306]);
19779strings[3307] = str->add("e,action,mouse,move");
19780strings[3308] = str->add("e");
19781str->del(strings[3307]);
19782str->del(strings[3308]);
19783strings[3309] = str->add("e,action,mouse,move");
19784strings[3310] = str->add("e");
19785str->del(strings[3309]);
19786str->del(strings[3310]);
19787strings[3311] = str->add("e,action,mouse,move");
19788strings[3312] = str->add("e");
19789str->del(strings[3311]);
19790str->del(strings[3312]);
19791strings[3313] = str->add("e,action,mouse,move");
19792strings[3314] = str->add("e");
19793str->del(strings[3313]);
19794str->del(strings[3314]);
19795strings[3315] = str->add("e,action,mouse,move");
19796strings[3316] = str->add("e");
19797str->del(strings[3315]);
19798str->del(strings[3316]);
19799str->del(strings[7]);
19800str->del(strings[2320]);
19801strings[7] = str->add(strings[7]);
19802strings[2330] = str->add(strings[2330]);
19803strings[3317] = str->add("e,action,mouse,move");
19804strings[3318] = str->add("e");
19805str->del(strings[3317]);
19806str->del(strings[3318]);
19807strings[3319] = str->add("e,action,mouse,move");
19808strings[3320] = str->add("e");
19809str->del(strings[3319]);
19810str->del(strings[3320]);
19811strings[3321] = str->add("e,action,mouse,move");
19812strings[3322] = str->add("e");
19813str->del(strings[3321]);
19814str->del(strings[3322]);
19815strings[3323] = str->add("e,action,mouse,move");
19816strings[3324] = str->add("e");
19817str->del(strings[3323]);
19818str->del(strings[3324]);
19819strings[3325] = str->add("e,action,mouse,move");
19820strings[3326] = str->add("e");
19821str->del(strings[3325]);
19822str->del(strings[3326]);
19823strings[3327] = str->add("e,action,mouse,move");
19824strings[3328] = str->add("e");
19825str->del(strings[3327]);
19826str->del(strings[3328]);
19827strings[3329] = str->add("e,action,mouse,move");
19828strings[3330] = str->add("e");
19829str->del(strings[3329]);
19830str->del(strings[3330]);
19831strings[1932] = str->add(strings[1932]);
19832strings[3331] = str->add("unsel");
19833str->del(strings[1932]);
19834str->del(strings[3331]);
19835str->del(strings[7]);
19836str->del(strings[2330]);
19837strings[7] = str->add(strings[7]);
19838strings[2343] = str->add(strings[2343]);
19839strings[3332] = str->add("e,action,mouse,move");
19840strings[3333] = str->add("e");
19841str->del(strings[3332]);
19842str->del(strings[3333]);
19843strings[3334] = str->add("e,action,mouse,move");
19844strings[3335] = str->add("e");
19845str->del(strings[3334]);
19846str->del(strings[3335]);
19847strings[3336] = str->add("e,action,mouse,move");
19848strings[3337] = str->add("e");
19849str->del(strings[3336]);
19850str->del(strings[3337]);
19851strings[1932] = str->add(strings[1932]);
19852strings[1845] = str->add(strings[1845]);
19853strings[3338] = str->add("program,start");
19854strings[1846] = str->add(strings[1846]);
19855strings[1932] = str->add(strings[1932]);
19856strings[1846] = str->add(strings[1846]);
19857strings[3338] = str->add(strings[3338]);
19858strings[1845] = str->add(strings[1845]);
19859strings[1932] = str->add(strings[1932]);
19860strings[3339] = str->add("sel");
19861strings[1932] = str->add(strings[1932]);
19862strings[3339] = str->add(strings[3339]);
19863str->del(strings[1932]);
19864str->del(strings[1845]);
19865str->del(strings[3338]);
19866str->del(strings[1846]);
19867str->del(strings[1932]);
19868str->del(strings[1846]);
19869str->del(strings[3338]);
19870str->del(strings[1845]);
19871str->del(strings[1932]);
19872str->del(strings[3339]);
19873str->del(strings[1932]);
19874str->del(strings[3339]);
19875str->del(strings[7]);
19876str->del(strings[2343]);
19877strings[7] = str->add(strings[7]);
19878strings[2353] = str->add(strings[2353]);
19879strings[3340] = str->add("e,action,mouse,move");
19880strings[3341] = str->add("e");
19881str->del(strings[3340]);
19882str->del(strings[3341]);
19883str->del(strings[7]);
19884str->del(strings[2353]);
19885strings[7] = str->add(strings[7]);
19886strings[2363] = str->add(strings[2363]);
19887strings[3342] = str->add("e,action,mouse,move");
19888strings[3343] = str->add("e");
19889str->del(strings[3342]);
19890str->del(strings[3343]);
19891strings[3344] = str->add("e,action,mouse,move");
19892strings[3345] = str->add("e");
19893strings[3346] = str->add("e,state,unselected");
19894strings[3345] = str->add(strings[3345]);
19895strings[3346] = str->add(strings[3346]);
19896strings[3345] = str->add(strings[3345]);
19897strings[3346] = str->add(strings[3346]);
19898strings[3345] = str->add(strings[3345]);
19899strings[3346] = str->add(strings[3346]);
19900strings[3345] = str->add(strings[3345]);
19901strings[3346] = str->add(strings[3346]);
19902strings[3345] = str->add(strings[3345]);
19903strings[3346] = str->add(strings[3346]);
19904strings[3345] = str->add(strings[3345]);
19905strings[3347] = str->add("e,state,selected");
19906strings[3345] = str->add(strings[3345]);
19907strings[3347] = str->add(strings[3347]);
19908strings[3345] = str->add(strings[3345]);
19909strings[3347] = str->add(strings[3347]);
19910strings[3345] = str->add(strings[3345]);
19911strings[3347] = str->add(strings[3347]);
19912strings[3345] = str->add(strings[3345]);
19913strings[3347] = str->add(strings[3347]);
19914strings[3345] = str->add(strings[3345]);
19915str->del(strings[3344]);
19916str->del(strings[3345]);
19917strings[3348] = str->add("program,start");
19918strings[3349] = str->add("unsel");
19919str->del(strings[3346]);
19920str->del(strings[3345]);
19921str->del(strings[3346]);
19922str->del(strings[3345]);
19923strings[3348] = str->add(strings[3348]);
19924strings[3349] = str->add(strings[3349]);
19925str->del(strings[3346]);
19926str->del(strings[3345]);
19927strings[3348] = str->add(strings[3348]);
19928strings[3349] = str->add(strings[3349]);
19929strings[1932] = str->add(strings[1932]);
19930strings[3349] = str->add(strings[3349]);
19931str->del(strings[3346]);
19932str->del(strings[3345]);
19933str->del(strings[3346]);
19934str->del(strings[3345]);
19935str->del(strings[3346]);
19936str->del(strings[3345]);
19937strings[3348] = str->add(strings[3348]);
19938strings[3350] = str->add("sel");
19939str->del(strings[3347]);
19940str->del(strings[3345]);
19941str->del(strings[3347]);
19942str->del(strings[3345]);
19943strings[3348] = str->add(strings[3348]);
19944strings[3350] = str->add(strings[3350]);
19945str->del(strings[3347]);
19946str->del(strings[3345]);
19947str->del(strings[3347]);
19948str->del(strings[3345]);
19949str->del(strings[3347]);
19950str->del(strings[3345]);
19951str->del(strings[3348]);
19952str->del(strings[3349]);
19953str->del(strings[3348]);
19954str->del(strings[3349]);
19955str->del(strings[3348]);
19956str->del(strings[3349]);
19957str->del(strings[1932]);
19958str->del(strings[3349]);
19959str->del(strings[3348]);
19960str->del(strings[3350]);
19961str->del(strings[3348]);
19962str->del(strings[3350]);
19963strings[1933] = str->add(strings[1933]);
19964str->del(strings[1933]);
19965str->del(strings[64]);
19966str->del(strings[2634]);
19967strings[1933] = str->add(strings[1933]);
19968str->del(strings[1933]);
19969str->del(strings[3220]);
19970str->del(strings[3220]);
19971str->del(strings[3220]);
19972str->del(strings[64]);
19973str->del(strings[2585]);
19974strings[1933] = str->add(strings[1933]);
19975str->del(strings[1933]);
19976str->del(strings[64]);
19977str->del(strings[2586]);
19978strings[1933] = str->add(strings[1933]);
19979str->del(strings[1933]);
19980str->del(strings[64]);
19981str->del(strings[2634]);
19982strings[1933] = str->add(strings[1933]);
19983str->del(strings[1933]);
19984str->del(strings[3221]);
19985str->del(strings[3221]);
19986str->del(strings[3221]);
19987str->del(strings[64]);
19988str->del(strings[2585]);
19989strings[1933] = str->add(strings[1933]);
19990str->del(strings[1933]);
19991str->del(strings[64]);
19992str->del(strings[2586]);
19993strings[1933] = str->add(strings[1933]);
19994str->del(strings[1933]);
19995str->del(strings[64]);
19996str->del(strings[2634]);
19997strings[1933] = str->add(strings[1933]);
19998str->del(strings[1933]);
19999str->del(strings[3222]);
20000str->del(strings[3222]);
20001str->del(strings[3222]);
20002str->del(strings[64]);
20003str->del(strings[2585]);
20004strings[1933] = str->add(strings[1933]);
20005str->del(strings[1933]);
20006str->del(strings[64]);
20007str->del(strings[2586]);
20008strings[1933] = str->add(strings[1933]);
20009str->del(strings[1933]);
20010str->del(strings[64]);
20011str->del(strings[2634]);
20012strings[1933] = str->add(strings[1933]);
20013str->del(strings[1933]);
20014str->del(strings[64]);
20015str->del(strings[2584]);
20016strings[1933] = str->add(strings[1933]);
20017str->del(strings[1933]);
20018str->del(strings[3223]);
20019str->del(strings[3223]);
20020str->del(strings[3223]);
20021str->del(strings[64]);
20022str->del(strings[2585]);
20023strings[1933] = str->add(strings[1933]);
20024str->del(strings[1933]);
20025str->del(strings[64]);
20026str->del(strings[2586]);
20027strings[1933] = str->add(strings[1933]);
20028str->del(strings[1933]);
20029str->del(strings[64]);
20030str->del(strings[2634]);
20031strings[1933] = str->add(strings[1933]);
20032str->del(strings[1933]);
20033str->del(strings[3225]);
20034str->del(strings[3225]);
20035str->del(strings[3225]);
20036str->del(strings[64]);
20037str->del(strings[2585]);
20038strings[1933] = str->add(strings[1933]);
20039str->del(strings[1933]);
20040str->del(strings[64]);
20041str->del(strings[2586]);
20042strings[1933] = str->add(strings[1933]);
20043str->del(strings[1933]);
20044str->del(strings[64]);
20045str->del(strings[2634]);
20046strings[1933] = str->add(strings[1933]);
20047str->del(strings[1933]);
20048str->del(strings[3226]);
20049str->del(strings[3226]);
20050str->del(strings[3226]);
20051str->del(strings[64]);
20052str->del(strings[2585]);
20053strings[1933] = str->add(strings[1933]);
20054str->del(strings[1933]);
20055str->del(strings[64]);
20056str->del(strings[2586]);
20057strings[1933] = str->add(strings[1933]);
20058str->del(strings[1933]);
20059str->del(strings[64]);
20060str->del(strings[2634]);
20061strings[1933] = str->add(strings[1933]);
20062str->del(strings[1933]);
20063str->del(strings[3227]);
20064str->del(strings[3227]);
20065str->del(strings[3227]);
20066str->del(strings[64]);
20067str->del(strings[2585]);
20068strings[1933] = str->add(strings[1933]);
20069str->del(strings[1933]);
20070str->del(strings[64]);
20071str->del(strings[2586]);
20072strings[1933] = str->add(strings[1933]);
20073str->del(strings[1933]);
20074str->del(strings[64]);
20075str->del(strings[2634]);
20076strings[1933] = str->add(strings[1933]);
20077str->del(strings[1933]);
20078str->del(strings[3228]);
20079str->del(strings[3228]);
20080str->del(strings[3228]);
20081str->del(strings[64]);
20082str->del(strings[2585]);
20083strings[1933] = str->add(strings[1933]);
20084str->del(strings[1933]);
20085str->del(strings[64]);
20086str->del(strings[2586]);
20087strings[1933] = str->add(strings[1933]);
20088str->del(strings[1933]);
20089str->del(strings[64]);
20090str->del(strings[2634]);
20091strings[1933] = str->add(strings[1933]);
20092str->del(strings[1933]);
20093str->del(strings[1721]);
20094str->del(strings[1721]);
20095str->del(strings[1721]);
20096str->del(strings[64]);
20097str->del(strings[2585]);
20098strings[1933] = str->add(strings[1933]);
20099str->del(strings[1933]);
20100str->del(strings[64]);
20101str->del(strings[2586]);
20102strings[1933] = str->add(strings[1933]);
20103str->del(strings[1933]);
20104str->del(strings[64]);
20105str->del(strings[2634]);
20106strings[1933] = str->add(strings[1933]);
20107str->del(strings[1933]);
20108str->del(strings[3229]);
20109str->del(strings[3229]);
20110str->del(strings[3229]);
20111str->del(strings[64]);
20112str->del(strings[2585]);
20113strings[1933] = str->add(strings[1933]);
20114str->del(strings[1933]);
20115str->del(strings[64]);
20116str->del(strings[2586]);
20117strings[1933] = str->add(strings[1933]);
20118str->del(strings[1933]);
20119str->del(strings[1842]);
20120str->del(strings[1842]);
20121str->del(strings[64]);
20122str->del(strings[2581]);
20123str->del(strings[64]);
20124str->del(strings[2886]);
20125str->del(strings[64]);
20126str->del(strings[2888]);
20127str->del(strings[3220]);
20128str->del(strings[385]);
20129str->del(strings[64]);
20130str->del(strings[2913]);
20131str->del(strings[64]);
20132str->del(strings[2886]);
20133str->del(strings[64]);
20134str->del(strings[2888]);
20135str->del(strings[3221]);
20136str->del(strings[385]);
20137str->del(strings[64]);
20138str->del(strings[2913]);
20139str->del(strings[64]);
20140str->del(strings[2886]);
20141str->del(strings[64]);
20142str->del(strings[2888]);
20143str->del(strings[3222]);
20144str->del(strings[385]);
20145str->del(strings[64]);
20146str->del(strings[2913]);
20147str->del(strings[64]);
20148str->del(strings[2886]);
20149str->del(strings[64]);
20150str->del(strings[2888]);
20151str->del(strings[3224]);
20152str->del(strings[3223]);
20153str->del(strings[385]);
20154str->del(strings[64]);
20155str->del(strings[2913]);
20156str->del(strings[64]);
20157str->del(strings[2886]);
20158str->del(strings[64]);
20159str->del(strings[2888]);
20160str->del(strings[3225]);
20161str->del(strings[385]);
20162str->del(strings[64]);
20163str->del(strings[2913]);
20164str->del(strings[64]);
20165str->del(strings[2886]);
20166str->del(strings[64]);
20167str->del(strings[2888]);
20168str->del(strings[3226]);
20169str->del(strings[385]);
20170str->del(strings[64]);
20171str->del(strings[2913]);
20172str->del(strings[64]);
20173str->del(strings[2886]);
20174str->del(strings[64]);
20175str->del(strings[2888]);
20176str->del(strings[3227]);
20177str->del(strings[385]);
20178str->del(strings[64]);
20179str->del(strings[2913]);
20180str->del(strings[64]);
20181str->del(strings[2886]);
20182str->del(strings[64]);
20183str->del(strings[2888]);
20184str->del(strings[3228]);
20185str->del(strings[385]);
20186str->del(strings[64]);
20187str->del(strings[2913]);
20188str->del(strings[64]);
20189str->del(strings[2886]);
20190str->del(strings[64]);
20191str->del(strings[2888]);
20192str->del(strings[1721]);
20193str->del(strings[385]);
20194str->del(strings[64]);
20195str->del(strings[2913]);
20196str->del(strings[64]);
20197str->del(strings[2886]);
20198str->del(strings[64]);
20199str->del(strings[2888]);
20200str->del(strings[3229]);
20201str->del(strings[385]);
20202str->del(strings[64]);
20203str->del(strings[2913]);
20204str->del(strings[64]);
20205str->del(strings[1949]);
20206str->del(strings[64]);
20207str->del(strings[1880]);
20208str->del(strings[64]);
20209str->del(strings[1876]);
20210str->del(strings[379]);
20211str->del(strings[64]);
20212str->del(strings[1874]);
20213str->del(strings[361]);
20214str->del(strings[362]);
20215str->del(strings[64]);
20216str->del(strings[3021]);
20217strings[64] = str->add(strings[64]);
20218strings[2913] = str->add(strings[2913]);
20219strings[3351] = str->add("e,action,mouse,move");
20220strings[3352] = str->add("e");
20221str->del(strings[3351]);
20222str->del(strings[3352]);
20223strings[3353] = str->add("e,action,mouse,move");
20224strings[3354] = str->add("e");
20225str->del(strings[3353]);
20226str->del(strings[3354]);
20227strings[3355] = str->add("e,action,mouse,move");
20228strings[3356] = str->add("e");
20229str->del(strings[3355]);
20230str->del(strings[3356]);
20231strings[3357] = str->add("e,action,mouse,move");
20232strings[3358] = str->add("e");
20233str->del(strings[3357]);
20234str->del(strings[3358]);
20235strings[3359] = str->add("e,action,mouse,move");
20236strings[3360] = str->add("e");
20237str->del(strings[3359]);
20238str->del(strings[3360]);
20239strings[3361] = str->add("e,action,mouse,move");
20240strings[3362] = str->add("e");
20241str->del(strings[3361]);
20242str->del(strings[3362]);
20243strings[1932] = str->add(strings[1932]);
20244strings[3363] = str->add("unsel");
20245str->del(strings[1932]);
20246str->del(strings[3363]);
20247str->del(strings[7]);
20248str->del(strings[2363]);
20249strings[7] = str->add(strings[7]);
20250strings[2383] = str->add(strings[2383]);
20251strings[3364] = str->add("e,action,mouse,move");
20252strings[3365] = str->add("e");
20253str->del(strings[3364]);
20254str->del(strings[3365]);
20255strings[3366] = str->add("e,action,mouse,move");
20256strings[3367] = str->add("e");
20257str->del(strings[3366]);
20258str->del(strings[3367]);
20259strings[3368] = str->add("e,action,mouse,move");
20260strings[3369] = str->add("e");
20261str->del(strings[3368]);
20262str->del(strings[3369]);
20263strings[3370] = str->add("e,action,mouse,move");
20264strings[3371] = str->add("e");
20265str->del(strings[3370]);
20266str->del(strings[3371]);
20267strings[3372] = str->add("e,action,mouse,move");
20268strings[3373] = str->add("e");
20269str->del(strings[3372]);
20270str->del(strings[3373]);
20271strings[3374] = str->add("e,action,mouse,move");
20272strings[3375] = str->add("e");
20273str->del(strings[3374]);
20274str->del(strings[3375]);
20275strings[3376] = str->add("e,action,mouse,move");
20276strings[3377] = str->add("e");
20277str->del(strings[3376]);
20278str->del(strings[3377]);
20279strings[3378] = str->add("e,action,mouse,move");
20280strings[3379] = str->add("e");
20281str->del(strings[3378]);
20282str->del(strings[3379]);
20283strings[1932] = str->add(strings[1932]);
20284strings[3380] = str->add("unsel");
20285str->del(strings[1932]);
20286str->del(strings[3380]);
20287str->del(strings[7]);
20288str->del(strings[2383]);
20289strings[7] = str->add(strings[7]);
20290strings[2404] = str->add(strings[2404]);
20291strings[3381] = str->add("e,action,mouse,move");
20292strings[3382] = str->add("e");
20293str->del(strings[3381]);
20294str->del(strings[3382]);
20295strings[3383] = str->add("e,action,mouse,move");
20296strings[3384] = str->add("e");
20297strings[3385] = str->add("e,state,unselected");
20298strings[3384] = str->add(strings[3384]);
20299strings[3385] = str->add(strings[3385]);
20300strings[3384] = str->add(strings[3384]);
20301strings[3385] = str->add(strings[3385]);
20302strings[3384] = str->add(strings[3384]);
20303strings[3385] = str->add(strings[3385]);
20304strings[3384] = str->add(strings[3384]);
20305strings[3385] = str->add(strings[3385]);
20306strings[3384] = str->add(strings[3384]);
20307str->del(strings[3383]);
20308str->del(strings[3384]);
20309strings[1932] = str->add(strings[1932]);
20310strings[3386] = str->add("sel");
20311strings[3387] = str->add("program,start");
20312strings[3388] = str->add("unsel");
20313str->del(strings[3385]);
20314str->del(strings[3384]);
20315str->del(strings[3385]);
20316str->del(strings[3384]);
20317strings[1932] = str->add(strings[1932]);
20318strings[3386] = str->add(strings[3386]);
20319strings[3387] = str->add(strings[3387]);
20320strings[3388] = str->add(strings[3388]);
20321str->del(strings[3385]);
20322str->del(strings[3384]);
20323str->del(strings[3385]);
20324str->del(strings[3384]);
20325str->del(strings[3385]);
20326str->del(strings[3384]);
20327str->del(strings[1932]);
20328str->del(strings[3386]);
20329str->del(strings[3387]);
20330str->del(strings[3388]);
20331str->del(strings[1932]);
20332str->del(strings[3386]);
20333str->del(strings[3387]);
20334str->del(strings[3388]);
20335strings[3389] = str->add("e,action,mouse,move");
20336strings[3390] = str->add("e");
20337str->del(strings[3389]);
20338str->del(strings[3390]);
20339strings[3391] = str->add("e,action,mouse,move");
20340strings[3392] = str->add("e");
20341str->del(strings[3391]);
20342str->del(strings[3392]);
20343strings[3393] = str->add("e,action,mouse,move");
20344strings[3394] = str->add("e");
20345str->del(strings[3393]);
20346str->del(strings[3394]);
20347strings[3395] = str->add("e,action,mouse,move");
20348strings[3396] = str->add("e");
20349str->del(strings[3395]);
20350str->del(strings[3396]);
20351strings[3397] = str->add("e,action,mouse,move");
20352strings[3398] = str->add("e");
20353strings[3399] = str->add("e,state,selected");
20354strings[3398] = str->add(strings[3398]);
20355strings[3399] = str->add(strings[3399]);
20356strings[3398] = str->add(strings[3398]);
20357strings[3399] = str->add(strings[3399]);
20358strings[3398] = str->add(strings[3398]);
20359strings[3399] = str->add(strings[3399]);
20360strings[3398] = str->add(strings[3398]);
20361strings[3399] = str->add(strings[3399]);
20362strings[3398] = str->add(strings[3398]);
20363strings[3399] = str->add(strings[3399]);
20364strings[3398] = str->add(strings[3398]);
20365str->del(strings[3397]);
20366str->del(strings[3398]);
20367strings[3400] = str->add("program,start");
20368strings[3401] = str->add("sel");
20369str->del(strings[3399]);
20370str->del(strings[3398]);
20371str->del(strings[3399]);
20372str->del(strings[3398]);
20373strings[3400] = str->add(strings[3400]);
20374strings[3401] = str->add(strings[3401]);
20375str->del(strings[3399]);
20376str->del(strings[3398]);
20377strings[3400] = str->add(strings[3400]);
20378strings[3401] = str->add(strings[3401]);
20379strings[1932] = str->add(strings[1932]);
20380strings[3401] = str->add(strings[3401]);
20381str->del(strings[3399]);
20382str->del(strings[3398]);
20383str->del(strings[3399]);
20384str->del(strings[3398]);
20385str->del(strings[3399]);
20386str->del(strings[3398]);
20387str->del(strings[3400]);
20388str->del(strings[3401]);
20389str->del(strings[3400]);
20390str->del(strings[3401]);
20391str->del(strings[3400]);
20392str->del(strings[3401]);
20393str->del(strings[1932]);
20394str->del(strings[3401]);
20395strings[361] = str->add(strings[361]);
20396strings[362] = str->add(strings[362]);
20397strings[361] = str->add(strings[361]);
20398str->del(strings[361]);
20399strings[362] = str->add(strings[362]);
20400str->del(strings[362]);
20401strings[3402] = str->add("resize");
20402str->del(strings[3402]);
20403strings[64] = str->add(strings[64]);
20404strings[2581] = str->add(strings[2581]);
20405strings[64] = str->add(strings[64]);
20406strings[3403] = str->add("load");
20407strings[1841] = str->add(strings[1841]);
20408strings[64] = str->add(strings[64]);
20409strings[1949] = str->add(strings[1949]);
20410strings[64] = str->add(strings[64]);
20411strings[1880] = str->add(strings[1880]);
20412strings[64] = str->add(strings[64]);
20413strings[1876] = str->add(strings[1876]);
20414str->del(strings[64]);
20415strings[379] = str->add(strings[379]);
20416strings[1842] = str->add(strings[1842]);
20417strings[1842] = str->add(strings[1842]);
20418strings[64] = str->add(strings[64]);
20419strings[1874] = str->add(strings[1874]);
20420strings[64] = str->add(strings[64]);
20421strings[2634] = str->add(strings[2634]);
20422strings[3403] = str->add(strings[3403]);
20423strings[1841] = str->add(strings[1841]);
20424strings[64] = str->add(strings[64]);
20425strings[2584] = str->add(strings[2584]);
20426strings[3403] = str->add(strings[3403]);
20427strings[1841] = str->add(strings[1841]);
20428strings[469] = str->add(strings[469]);
20429strings[2687] = str->add(strings[2687]);
20430strings[3403] = str->add(strings[3403]);
20431strings[469] = str->add(strings[469]);
20432strings[2894] = str->add(strings[2894]);
20433strings[1841] = str->add(strings[1841]);
20434strings[3404] = str->add("resize");
20435strings[3404] = str->add(strings[3404]);
20436strings[64] = str->add(strings[64]);
20437strings[2585] = str->add(strings[2585]);
20438strings[64] = str->add(strings[64]);
20439strings[3403] = str->add(strings[3403]);
20440strings[2860] = str->add(strings[2860]);
20441strings[1841] = str->add(strings[1841]);
20442str->del(strings[64]);
20443strings[385] = str->add(strings[385]);
20444strings[2860] = str->add(strings[2860]);
20445strings[64] = str->add(strings[64]);
20446strings[2586] = str->add(strings[2586]);
20447strings[3403] = str->add(strings[3403]);
20448strings[1841] = str->add(strings[1841]);
20449strings[64] = str->add(strings[64]);
20450strings[2886] = str->add(strings[2886]);
20451strings[64] = str->add(strings[64]);
20452strings[2888] = str->add(strings[2888]);
20453strings[64] = str->add(strings[64]);
20454strings[2634] = str->add(strings[2634]);
20455strings[3403] = str->add(strings[3403]);
20456strings[1841] = str->add(strings[1841]);
20457strings[64] = str->add(strings[64]);
20458strings[2584] = str->add(strings[2584]);
20459strings[3403] = str->add(strings[3403]);
20460strings[1841] = str->add(strings[1841]);
20461strings[469] = str->add(strings[469]);
20462strings[2711] = str->add(strings[2711]);
20463strings[3403] = str->add(strings[3403]);
20464strings[469] = str->add(strings[469]);
20465strings[3092] = str->add(strings[3092]);
20466strings[1841] = str->add(strings[1841]);
20467strings[3404] = str->add(strings[3404]);
20468strings[3404] = str->add(strings[3404]);
20469strings[64] = str->add(strings[64]);
20470strings[2585] = str->add(strings[2585]);
20471strings[64] = str->add(strings[64]);
20472strings[3403] = str->add(strings[3403]);
20473strings[2494] = str->add(strings[2494]);
20474strings[1841] = str->add(strings[1841]);
20475str->del(strings[64]);
20476strings[385] = str->add(strings[385]);
20477strings[2494] = str->add(strings[2494]);
20478strings[64] = str->add(strings[64]);
20479strings[2586] = str->add(strings[2586]);
20480strings[3403] = str->add(strings[3403]);
20481strings[1841] = str->add(strings[1841]);
20482strings[64] = str->add(strings[64]);
20483strings[2886] = str->add(strings[2886]);
20484strings[64] = str->add(strings[64]);
20485strings[2888] = str->add(strings[2888]);
20486strings[64] = str->add(strings[64]);
20487strings[2582] = str->add(strings[2582]);
20488strings[3403] = str->add(strings[3403]);
20489strings[1841] = str->add(strings[1841]);
20490strings[64] = str->add(strings[64]);
20491strings[2583] = str->add(strings[2583]);
20492strings[3403] = str->add(strings[3403]);
20493strings[1841] = str->add(strings[1841]);
20494strings[64] = str->add(strings[64]);
20495strings[2585] = str->add(strings[2585]);
20496strings[64] = str->add(strings[64]);
20497strings[3403] = str->add(strings[3403]);
20498strings[2861] = str->add(strings[2861]);
20499strings[1841] = str->add(strings[1841]);
20500str->del(strings[64]);
20501strings[385] = str->add(strings[385]);
20502strings[2861] = str->add(strings[2861]);
20503strings[64] = str->add(strings[64]);
20504strings[2886] = str->add(strings[2886]);
20505strings[64] = str->add(strings[64]);
20506strings[2888] = str->add(strings[2888]);
20507strings[3404] = str->add(strings[3404]);
20508strings[3404] = str->add(strings[3404]);
20509strings[3404] = str->add(strings[3404]);
20510strings[3404] = str->add(strings[3404]);
20511strings[3404] = str->add(strings[3404]);
20512strings[3404] = str->add(strings[3404]);
20513strings[3404] = str->add(strings[3404]);
20514strings[3404] = str->add(strings[3404]);
20515strings[3404] = str->add(strings[3404]);
20516strings[3404] = str->add(strings[3404]);
20517strings[3404] = str->add(strings[3404]);
20518strings[3404] = str->add(strings[3404]);
20519strings[2860] = str->add(strings[2860]);
20520strings[2860] = str->add(strings[2860]);
20521strings[64] = str->add(strings[64]);
20522strings[2913] = str->add(strings[2913]);
20523strings[3404] = str->add(strings[3404]);
20524strings[2494] = str->add(strings[2494]);
20525strings[2494] = str->add(strings[2494]);
20526strings[64] = str->add(strings[64]);
20527strings[2913] = str->add(strings[2913]);
20528strings[64] = str->add(strings[64]);
20529strings[2915] = str->add(strings[2915]);
20530strings[2861] = str->add(strings[2861]);
20531strings[2861] = str->add(strings[2861]);
20532str->del(strings[64]);
20533str->del(strings[2913]);
20534strings[64] = str->add(strings[64]);
20535strings[3021] = str->add(strings[3021]);
20536str->del(strings[3403]);
20537str->del(strings[1841]);
20538str->del(strings[3403]);
20539str->del(strings[1841]);
20540str->del(strings[3403]);
20541str->del(strings[1841]);
20542str->del(strings[3403]);
20543str->del(strings[1841]);
20544str->del(strings[3404]);
20545str->del(strings[3404]);
20546str->del(strings[3403]);
20547str->del(strings[1841]);
20548str->del(strings[3403]);
20549str->del(strings[1841]);
20550str->del(strings[3403]);
20551str->del(strings[1841]);
20552str->del(strings[3403]);
20553str->del(strings[1841]);
20554str->del(strings[3403]);
20555str->del(strings[1841]);
20556str->del(strings[3404]);
20557str->del(strings[3404]);
20558str->del(strings[3403]);
20559str->del(strings[1841]);
20560str->del(strings[3403]);
20561str->del(strings[1841]);
20562str->del(strings[3403]);
20563str->del(strings[1841]);
20564str->del(strings[3403]);
20565str->del(strings[1841]);
20566str->del(strings[3403]);
20567str->del(strings[1841]);
20568str->del(strings[3404]);
20569str->del(strings[3404]);
20570str->del(strings[3404]);
20571str->del(strings[3404]);
20572str->del(strings[3404]);
20573str->del(strings[3404]);
20574str->del(strings[3404]);
20575str->del(strings[3404]);
20576str->del(strings[3404]);
20577str->del(strings[3404]);
20578str->del(strings[3404]);
20579str->del(strings[3404]);
20580str->del(strings[3404]);
20581str->del(strings[7]);
20582str->del(strings[2404]);
20583strings[7] = str->add(strings[7]);
20584strings[2416] = str->add(strings[2416]);
20585strings[3405] = str->add("e,action,mouse,move");
20586strings[3406] = str->add("e");
20587str->del(strings[3405]);
20588str->del(strings[3406]);
20589strings[3407] = str->add("e,action,mouse,move");
20590strings[3408] = str->add("e");
20591str->del(strings[3407]);
20592str->del(strings[3408]);
20593strings[3409] = str->add("e,action,mouse,move");
20594strings[3410] = str->add("e");
20595str->del(strings[3409]);
20596str->del(strings[3410]);
20597strings[3411] = str->add("e,action,mouse,move");
20598strings[3412] = str->add("e");
20599str->del(strings[3411]);
20600str->del(strings[3412]);
20601strings[3413] = str->add("e,action,mouse,move");
20602strings[3414] = str->add("e");
20603str->del(strings[3413]);
20604str->del(strings[3414]);
20605strings[3415] = str->add("e,action,mouse,move");
20606strings[3416] = str->add("e");
20607str->del(strings[3415]);
20608str->del(strings[3416]);
20609strings[3417] = str->add("e,action,mouse,move");
20610strings[3418] = str->add("e");
20611str->del(strings[3417]);
20612str->del(strings[3418]);
20613strings[3419] = str->add("e,action,mouse,move");
20614strings[3420] = str->add("e");
20615str->del(strings[3419]);
20616str->del(strings[3420]);
20617strings[3421] = str->add("e,action,mouse,move");
20618strings[3422] = str->add("e");
20619str->del(strings[3421]);
20620str->del(strings[3422]);
20621strings[3423] = str->add("e,action,mouse,move");
20622strings[3424] = str->add("e");
20623str->del(strings[3423]);
20624str->del(strings[3424]);
20625strings[1932] = str->add(strings[1932]);
20626strings[3425] = str->add("unsel");
20627str->del(strings[1932]);
20628str->del(strings[3425]);
20629str->del(strings[7]);
20630str->del(strings[2416]);
20631strings[7] = str->add(strings[7]);
20632strings[2426] = str->add(strings[2426]);
20633strings[3426] = str->add("e,action,mouse,move");
20634strings[3427] = str->add("e");
20635str->del(strings[3426]);
20636str->del(strings[3427]);
20637strings[3428] = str->add("e,action,mouse,move");
20638strings[3429] = str->add("e");
20639str->del(strings[3428]);
20640str->del(strings[3429]);
20641strings[3430] = str->add("e,action,mouse,move");
20642strings[3431] = str->add("e");
20643str->del(strings[3430]);
20644str->del(strings[3431]);
20645strings[3432] = str->add("e,action,mouse,move");
20646strings[3433] = str->add("e");
20647str->del(strings[3432]);
20648str->del(strings[3433]);
20649strings[3434] = str->add("e,action,mouse,move");
20650strings[3435] = str->add("e");
20651str->del(strings[3434]);
20652str->del(strings[3435]);
20653strings[3436] = str->add("e,action,mouse,move");
20654strings[3437] = str->add("e");
20655str->del(strings[3436]);
20656str->del(strings[3437]);
20657strings[3438] = str->add("e,action,mouse,move");
20658strings[3439] = str->add("e");
20659str->del(strings[3438]);
20660str->del(strings[3439]);
20661strings[3440] = str->add("e,action,mouse,move");
20662strings[3441] = str->add("e");
20663str->del(strings[3440]);
20664str->del(strings[3441]);
20665strings[1932] = str->add(strings[1932]);
20666strings[3442] = str->add("unsel");
20667str->del(strings[1932]);
20668str->del(strings[3442]);
20669str->del(strings[7]);
20670str->del(strings[2426]);
20671strings[7] = str->add(strings[7]);
20672strings[2435] = str->add(strings[2435]);
20673strings[3443] = str->add("e,action,mouse,move");
20674strings[3444] = str->add("e");
20675strings[3445] = str->add("e,state,unselected");
20676strings[3444] = str->add(strings[3444]);
20677strings[3445] = str->add(strings[3445]);
20678strings[3444] = str->add(strings[3444]);
20679strings[3445] = str->add(strings[3445]);
20680strings[3444] = str->add(strings[3444]);
20681strings[3445] = str->add(strings[3445]);
20682strings[3444] = str->add(strings[3444]);
20683strings[3445] = str->add(strings[3445]);
20684strings[3444] = str->add(strings[3444]);
20685strings[3445] = str->add(strings[3445]);
20686strings[3444] = str->add(strings[3444]);
20687strings[3446] = str->add("e,state,selected");
20688strings[3444] = str->add(strings[3444]);
20689strings[3446] = str->add(strings[3446]);
20690strings[3444] = str->add(strings[3444]);
20691strings[3446] = str->add(strings[3446]);
20692strings[3444] = str->add(strings[3444]);
20693strings[3446] = str->add(strings[3446]);
20694strings[3444] = str->add(strings[3444]);
20695strings[3446] = str->add(strings[3446]);
20696strings[3444] = str->add(strings[3444]);
20697strings[3446] = str->add(strings[3446]);
20698strings[3444] = str->add(strings[3444]);
20699str->del(strings[3443]);
20700str->del(strings[3444]);
20701strings[1932] = str->add(strings[1932]);
20702strings[3447] = str->add("sel");
20703strings[3448] = str->add("program,start");
20704strings[3449] = str->add("unsel");
20705str->del(strings[3445]);
20706str->del(strings[3444]);
20707str->del(strings[3445]);
20708str->del(strings[3444]);
20709strings[1932] = str->add(strings[1932]);
20710strings[3447] = str->add(strings[3447]);
20711strings[3448] = str->add(strings[3448]);
20712strings[3449] = str->add(strings[3449]);
20713str->del(strings[3445]);
20714str->del(strings[3444]);
20715strings[3448] = str->add(strings[3448]);
20716strings[3449] = str->add(strings[3449]);
20717strings[1932] = str->add(strings[1932]);
20718strings[3449] = str->add(strings[3449]);
20719str->del(strings[3445]);
20720str->del(strings[3444]);
20721str->del(strings[3445]);
20722str->del(strings[3444]);
20723str->del(strings[3445]);
20724str->del(strings[3444]);
20725strings[3448] = str->add(strings[3448]);
20726strings[3447] = str->add(strings[3447]);
20727str->del(strings[3446]);
20728str->del(strings[3444]);
20729str->del(strings[3446]);
20730str->del(strings[3444]);
20731strings[3448] = str->add(strings[3448]);
20732strings[3447] = str->add(strings[3447]);
20733str->del(strings[3446]);
20734str->del(strings[3444]);
20735strings[3448] = str->add(strings[3448]);
20736strings[3447] = str->add(strings[3447]);
20737strings[1932] = str->add(strings[1932]);
20738strings[3447] = str->add(strings[3447]);
20739str->del(strings[3446]);
20740str->del(strings[3444]);
20741str->del(strings[3446]);
20742str->del(strings[3444]);
20743str->del(strings[3446]);
20744str->del(strings[3444]);
20745str->del(strings[1932]);
20746str->del(strings[3447]);
20747str->del(strings[3448]);
20748str->del(strings[3449]);
20749str->del(strings[1932]);
20750str->del(strings[3447]);
20751str->del(strings[3448]);
20752str->del(strings[3449]);
20753str->del(strings[3448]);
20754str->del(strings[3449]);
20755str->del(strings[1932]);
20756str->del(strings[3449]);
20757str->del(strings[3448]);
20758str->del(strings[3447]);
20759str->del(strings[3448]);
20760str->del(strings[3447]);
20761str->del(strings[3448]);
20762str->del(strings[3447]);
20763str->del(strings[1932]);
20764str->del(strings[3447]);
20765strings[361] = str->add(strings[361]);
20766strings[362] = str->add(strings[362]);
20767strings[361] = str->add(strings[361]);
20768str->del(strings[361]);
20769strings[362] = str->add(strings[362]);
20770str->del(strings[362]);
20771strings[3450] = str->add("resize");
20772str->del(strings[3450]);
20773strings[64] = str->add(strings[64]);
20774strings[2581] = str->add(strings[2581]);
20775strings[64] = str->add(strings[64]);
20776strings[3451] = str->add("load");
20777strings[1841] = str->add(strings[1841]);
20778strings[64] = str->add(strings[64]);
20779strings[1949] = str->add(strings[1949]);
20780strings[64] = str->add(strings[64]);
20781strings[1880] = str->add(strings[1880]);
20782strings[64] = str->add(strings[64]);
20783strings[1876] = str->add(strings[1876]);
20784str->del(strings[64]);
20785strings[379] = str->add(strings[379]);
20786strings[1842] = str->add(strings[1842]);
20787strings[1842] = str->add(strings[1842]);
20788strings[64] = str->add(strings[64]);
20789strings[1874] = str->add(strings[1874]);
20790strings[64] = str->add(strings[64]);
20791strings[2583] = str->add(strings[2583]);
20792strings[3451] = str->add(strings[3451]);
20793strings[1841] = str->add(strings[1841]);
20794strings[64] = str->add(strings[64]);
20795strings[2585] = str->add(strings[2585]);
20796strings[64] = str->add(strings[64]);
20797strings[3451] = str->add(strings[3451]);
20798strings[3155] = str->add(strings[3155]);
20799strings[1841] = str->add(strings[1841]);
20800str->del(strings[64]);
20801strings[385] = str->add(strings[385]);
20802strings[3155] = str->add(strings[3155]);
20803strings[64] = str->add(strings[64]);
20804strings[2886] = str->add(strings[2886]);
20805strings[64] = str->add(strings[64]);
20806strings[2888] = str->add(strings[2888]);
20807strings[64] = str->add(strings[64]);
20808strings[2582] = str->add(strings[2582]);
20809strings[3451] = str->add(strings[3451]);
20810strings[1841] = str->add(strings[1841]);
20811strings[64] = str->add(strings[64]);
20812strings[2583] = str->add(strings[2583]);
20813strings[3451] = str->add(strings[3451]);
20814strings[1841] = str->add(strings[1841]);
20815strings[64] = str->add(strings[64]);
20816strings[2584] = str->add(strings[2584]);
20817strings[3451] = str->add(strings[3451]);
20818strings[1841] = str->add(strings[1841]);
20819strings[469] = str->add(strings[469]);
20820strings[2682] = str->add(strings[2682]);
20821strings[3451] = str->add(strings[3451]);
20822strings[469] = str->add(strings[469]);
20823strings[2896] = str->add(strings[2896]);
20824strings[1841] = str->add(strings[1841]);
20825strings[3452] = str->add("resize");
20826strings[3452] = str->add(strings[3452]);
20827strings[64] = str->add(strings[64]);
20828strings[2585] = str->add(strings[2585]);
20829strings[64] = str->add(strings[64]);
20830strings[3451] = str->add(strings[3451]);
20831strings[1731] = str->add(strings[1731]);
20832strings[1841] = str->add(strings[1841]);
20833str->del(strings[64]);
20834strings[385] = str->add(strings[385]);
20835strings[1731] = str->add(strings[1731]);
20836strings[64] = str->add(strings[64]);
20837strings[2886] = str->add(strings[2886]);
20838strings[64] = str->add(strings[64]);
20839strings[2888] = str->add(strings[2888]);
20840strings[64] = str->add(strings[64]);
20841strings[2582] = str->add(strings[2582]);
20842strings[3451] = str->add(strings[3451]);
20843strings[1841] = str->add(strings[1841]);
20844strings[64] = str->add(strings[64]);
20845strings[2634] = str->add(strings[2634]);
20846strings[3451] = str->add(strings[3451]);
20847strings[1841] = str->add(strings[1841]);
20848strings[64] = str->add(strings[64]);
20849strings[2584] = str->add(strings[2584]);
20850strings[3451] = str->add(strings[3451]);
20851strings[1841] = str->add(strings[1841]);
20852strings[469] = str->add(strings[469]);
20853strings[2683] = str->add(strings[2683]);
20854strings[3451] = str->add(strings[3451]);
20855strings[469] = str->add(strings[469]);
20856strings[3162] = str->add(strings[3162]);
20857strings[1841] = str->add(strings[1841]);
20858strings[3452] = str->add(strings[3452]);
20859strings[3452] = str->add(strings[3452]);
20860strings[64] = str->add(strings[64]);
20861strings[2585] = str->add(strings[2585]);
20862strings[64] = str->add(strings[64]);
20863strings[3451] = str->add(strings[3451]);
20864strings[3156] = str->add(strings[3156]);
20865strings[1841] = str->add(strings[1841]);
20866str->del(strings[64]);
20867strings[385] = str->add(strings[385]);
20868strings[3156] = str->add(strings[3156]);
20869strings[64] = str->add(strings[64]);
20870strings[2586] = str->add(strings[2586]);
20871strings[3451] = str->add(strings[3451]);
20872strings[1841] = str->add(strings[1841]);
20873strings[64] = str->add(strings[64]);
20874strings[2886] = str->add(strings[2886]);
20875strings[64] = str->add(strings[64]);
20876strings[2888] = str->add(strings[2888]);
20877strings[3452] = str->add(strings[3452]);
20878strings[3452] = str->add(strings[3452]);
20879strings[3452] = str->add(strings[3452]);
20880strings[3452] = str->add(strings[3452]);
20881strings[3452] = str->add(strings[3452]);
20882strings[3452] = str->add(strings[3452]);
20883strings[3452] = str->add(strings[3452]);
20884strings[3452] = str->add(strings[3452]);
20885strings[3452] = str->add(strings[3452]);
20886strings[3452] = str->add(strings[3452]);
20887strings[3452] = str->add(strings[3452]);
20888strings[1933] = str->add(strings[1933]);
20889str->del(strings[1933]);
20890str->del(strings[64]);
20891str->del(strings[2634]);
20892strings[1933] = str->add(strings[1933]);
20893str->del(strings[1933]);
20894str->del(strings[64]);
20895str->del(strings[2584]);
20896strings[1933] = str->add(strings[1933]);
20897str->del(strings[1933]);
20898str->del(strings[469]);
20899str->del(strings[2687]);
20900strings[1933] = str->add(strings[1933]);
20901str->del(strings[1933]);
20902str->del(strings[2860]);
20903str->del(strings[2860]);
20904str->del(strings[2860]);
20905str->del(strings[64]);
20906str->del(strings[2585]);
20907strings[1933] = str->add(strings[1933]);
20908str->del(strings[1933]);
20909str->del(strings[64]);
20910str->del(strings[2586]);
20911strings[1933] = str->add(strings[1933]);
20912str->del(strings[1933]);
20913str->del(strings[64]);
20914str->del(strings[2634]);
20915strings[1933] = str->add(strings[1933]);
20916str->del(strings[1933]);
20917str->del(strings[64]);
20918str->del(strings[2584]);
20919strings[1933] = str->add(strings[1933]);
20920str->del(strings[1933]);
20921str->del(strings[469]);
20922str->del(strings[2711]);
20923strings[1933] = str->add(strings[1933]);
20924str->del(strings[1933]);
20925str->del(strings[2494]);
20926str->del(strings[2494]);
20927str->del(strings[2494]);
20928str->del(strings[64]);
20929str->del(strings[2585]);
20930strings[1933] = str->add(strings[1933]);
20931str->del(strings[1933]);
20932str->del(strings[64]);
20933str->del(strings[2586]);
20934strings[1933] = str->add(strings[1933]);
20935str->del(strings[1933]);
20936str->del(strings[64]);
20937str->del(strings[2582]);
20938strings[1933] = str->add(strings[1933]);
20939str->del(strings[1933]);
20940str->del(strings[64]);
20941str->del(strings[2583]);
20942strings[1933] = str->add(strings[1933]);
20943str->del(strings[1933]);
20944str->del(strings[2861]);
20945str->del(strings[2861]);
20946str->del(strings[2861]);
20947str->del(strings[64]);
20948str->del(strings[2585]);
20949strings[1933] = str->add(strings[1933]);
20950str->del(strings[1933]);
20951str->del(strings[1842]);
20952str->del(strings[1842]);
20953str->del(strings[64]);
20954str->del(strings[2581]);
20955str->del(strings[64]);
20956str->del(strings[2886]);
20957str->del(strings[64]);
20958str->del(strings[2888]);
20959str->del(strings[469]);
20960str->del(strings[2894]);
20961str->del(strings[2860]);
20962str->del(strings[385]);
20963str->del(strings[64]);
20964str->del(strings[2913]);
20965str->del(strings[64]);
20966str->del(strings[2886]);
20967str->del(strings[64]);
20968str->del(strings[2888]);
20969str->del(strings[469]);
20970str->del(strings[3092]);
20971str->del(strings[2494]);
20972str->del(strings[385]);
20973str->del(strings[64]);
20974str->del(strings[2913]);
20975str->del(strings[64]);
20976str->del(strings[2915]);
20977str->del(strings[64]);
20978str->del(strings[2886]);
20979str->del(strings[64]);
20980str->del(strings[2888]);
20981str->del(strings[2861]);
20982str->del(strings[385]);
20983str->del(strings[64]);
20984str->del(strings[1949]);
20985str->del(strings[64]);
20986str->del(strings[1880]);
20987str->del(strings[64]);
20988str->del(strings[1876]);
20989str->del(strings[379]);
20990str->del(strings[64]);
20991str->del(strings[1874]);
20992str->del(strings[361]);
20993str->del(strings[362]);
20994strings[3155] = str->add(strings[3155]);
20995strings[3155] = str->add(strings[3155]);
20996strings[64] = str->add(strings[64]);
20997strings[2915] = str->add(strings[2915]);
20998strings[3452] = str->add(strings[3452]);
20999strings[1731] = str->add(strings[1731]);
21000strings[1731] = str->add(strings[1731]);
21001strings[64] = str->add(strings[64]);
21002strings[2915] = str->add(strings[2915]);
21003strings[3452] = str->add(strings[3452]);
21004strings[3156] = str->add(strings[3156]);
21005strings[3156] = str->add(strings[3156]);
21006strings[64] = str->add(strings[64]);
21007strings[2913] = str->add(strings[2913]);
21008str->del(strings[64]);
21009str->del(strings[3021]);
21010strings[64] = str->add(strings[64]);
21011strings[2913] = str->add(strings[2913]);
21012str->del(strings[64]);
21013str->del(strings[2913]);
21014strings[64] = str->add(strings[64]);
21015strings[3021] = str->add(strings[3021]);
21016str->del(strings[3451]);
21017str->del(strings[1841]);
21018str->del(strings[3451]);
21019str->del(strings[1841]);
21020str->del(strings[3451]);
21021str->del(strings[1841]);
21022str->del(strings[3451]);
21023str->del(strings[1841]);
21024str->del(strings[3451]);
21025str->del(strings[1841]);
21026str->del(strings[3451]);
21027str->del(strings[1841]);
21028str->del(strings[3451]);
21029str->del(strings[1841]);
21030str->del(strings[3452]);
21031str->del(strings[3452]);
21032str->del(strings[3451]);
21033str->del(strings[1841]);
21034str->del(strings[3451]);
21035str->del(strings[1841]);
21036str->del(strings[3451]);
21037str->del(strings[1841]);
21038str->del(strings[3451]);
21039str->del(strings[1841]);
21040str->del(strings[3451]);
21041str->del(strings[1841]);
21042str->del(strings[3452]);
21043str->del(strings[3452]);
21044str->del(strings[3451]);
21045str->del(strings[1841]);
21046str->del(strings[3451]);
21047str->del(strings[1841]);
21048str->del(strings[3452]);
21049str->del(strings[3452]);
21050str->del(strings[3452]);
21051str->del(strings[3452]);
21052str->del(strings[3452]);
21053str->del(strings[3452]);
21054str->del(strings[3452]);
21055str->del(strings[3452]);
21056str->del(strings[3452]);
21057str->del(strings[3452]);
21058str->del(strings[3452]);
21059str->del(strings[3452]);
21060str->del(strings[3452]);
21061strings[3453] = str->add("e,action,mouse,move");
21062strings[3454] = str->add("e");
21063str->del(strings[3453]);
21064str->del(strings[3454]);
21065strings[3455] = str->add("e,action,mouse,move");
21066strings[3456] = str->add("e");
21067str->del(strings[3455]);
21068str->del(strings[3456]);
21069strings[3457] = str->add("e,action,mouse,move");
21070strings[3458] = str->add("e");
21071str->del(strings[3457]);
21072str->del(strings[3458]);
21073strings[3459] = str->add("e,action,mouse,move");
21074strings[3460] = str->add("e");
21075str->del(strings[3459]);
21076str->del(strings[3460]);
21077strings[3461] = str->add("e,action,mouse,move");
21078strings[3462] = str->add("e");
21079str->del(strings[3461]);
21080str->del(strings[3462]);
21081strings[3463] = str->add("e,action,mouse,move");
21082strings[3464] = str->add("e");
21083str->del(strings[3463]);
21084str->del(strings[3464]);
21085strings[3465] = str->add("e,action,mouse,move");
21086strings[3466] = str->add("e");
21087str->del(strings[3465]);
21088str->del(strings[3466]);
21089str->del(strings[7]);
21090str->del(strings[2435]);
21091strings[7] = str->add(strings[7]);
21092strings[2448] = str->add(strings[2448]);
21093strings[3467] = str->add("e,action,mouse,move");
21094strings[3468] = str->add("e");
21095str->del(strings[3467]);
21096str->del(strings[3468]);
21097strings[3469] = str->add("e,action,mouse,move");
21098strings[3470] = str->add("e");
21099str->del(strings[3469]);
21100str->del(strings[3470]);
21101strings[3471] = str->add("e,action,mouse,move");
21102strings[3472] = str->add("e");
21103str->del(strings[3471]);
21104str->del(strings[3472]);
21105strings[3473] = str->add("e,action,mouse,move");
21106strings[3474] = str->add("e");
21107str->del(strings[3473]);
21108str->del(strings[3474]);
21109strings[3475] = str->add("e,action,mouse,move");
21110strings[3476] = str->add("e");
21111str->del(strings[3475]);
21112str->del(strings[3476]);
21113strings[3477] = str->add("e,action,mouse,move");
21114strings[3478] = str->add("e");
21115str->del(strings[3477]);
21116str->del(strings[3478]);
21117strings[3479] = str->add("e,action,mouse,move");
21118strings[3480] = str->add("e");
21119str->del(strings[3479]);
21120str->del(strings[3480]);
21121strings[3481] = str->add("e,action,mouse,move");
21122strings[3482] = str->add("e");
21123str->del(strings[3481]);
21124str->del(strings[3482]);
21125strings[1932] = str->add(strings[1932]);
21126strings[3483] = str->add("unsel");
21127strings[1932] = str->add(strings[1932]);
21128strings[3483] = str->add(strings[3483]);
21129str->del(strings[1932]);
21130str->del(strings[3483]);
21131str->del(strings[1932]);
21132str->del(strings[3483]);
21133str->del(strings[7]);
21134str->del(strings[2448]);
21135strings[7] = str->add(strings[7]);
21136strings[2466] = str->add(strings[2466]);
21137strings[3484] = str->add("e,action,mouse,move");
21138strings[3485] = str->add("e");
21139str->del(strings[3484]);
21140str->del(strings[3485]);
21141strings[3486] = str->add("e,action,mouse,move");
21142strings[3487] = str->add("e");
21143str->del(strings[3486]);
21144str->del(strings[3487]);
21145strings[3488] = str->add("e,action,mouse,move");
21146strings[3489] = str->add("e");
21147str->del(strings[3488]);
21148str->del(strings[3489]);
21149strings[3490] = str->add("e,action,mouse,move");
21150strings[3491] = str->add("e");
21151str->del(strings[3490]);
21152str->del(strings[3491]);
21153strings[3492] = str->add("e,action,mouse,move");
21154strings[3493] = str->add("e");
21155strings[3494] = str->add("e,state,unselected");
21156strings[3493] = str->add(strings[3493]);
21157strings[3494] = str->add(strings[3494]);
21158strings[3493] = str->add(strings[3493]);
21159strings[3494] = str->add(strings[3494]);
21160strings[3493] = str->add(strings[3493]);
21161strings[3494] = str->add(strings[3494]);
21162strings[3493] = str->add(strings[3493]);
21163strings[3494] = str->add(strings[3494]);
21164strings[3493] = str->add(strings[3493]);
21165strings[3494] = str->add(strings[3494]);
21166strings[3493] = str->add(strings[3493]);
21167str->del(strings[3492]);
21168str->del(strings[3493]);
21169strings[1932] = str->add(strings[1932]);
21170strings[3495] = str->add("sel");
21171strings[3496] = str->add("program,start");
21172strings[3497] = str->add("unsel");
21173str->del(strings[3494]);
21174str->del(strings[3493]);
21175str->del(strings[3494]);
21176str->del(strings[3493]);
21177strings[1932] = str->add(strings[1932]);
21178strings[3495] = str->add(strings[3495]);
21179strings[3496] = str->add(strings[3496]);
21180strings[3497] = str->add(strings[3497]);
21181str->del(strings[3494]);
21182str->del(strings[3493]);
21183strings[3496] = str->add(strings[3496]);
21184strings[3497] = str->add(strings[3497]);
21185strings[1932] = str->add(strings[1932]);
21186strings[3497] = str->add(strings[3497]);
21187str->del(strings[3494]);
21188str->del(strings[3493]);
21189str->del(strings[3494]);
21190str->del(strings[3493]);
21191str->del(strings[3494]);
21192str->del(strings[3493]);
21193str->del(strings[1932]);
21194str->del(strings[3495]);
21195str->del(strings[3496]);
21196str->del(strings[3497]);
21197str->del(strings[1932]);
21198str->del(strings[3495]);
21199str->del(strings[3496]);
21200str->del(strings[3497]);
21201str->del(strings[3496]);
21202str->del(strings[3497]);
21203str->del(strings[1932]);
21204str->del(strings[3497]);
21205str->del(strings[64]);
21206str->del(strings[3021]);
21207strings[64] = str->add(strings[64]);
21208strings[2913] = str->add(strings[2913]);
21209strings[3498] = str->add("e,action,mouse,move");
21210strings[3499] = str->add("e");
21211str->del(strings[3498]);
21212str->del(strings[3499]);
21213strings[3500] = str->add("e,action,mouse,move");
21214strings[3501] = str->add("e");
21215str->del(strings[3500]);
21216str->del(strings[3501]);
21217strings[3502] = str->add("e,action,mouse,move");
21218strings[3503] = str->add("e");
21219str->del(strings[3502]);
21220str->del(strings[3503]);
21221str->del(strings[7]);
21222str->del(strings[2466]);
21223strings[7] = str->add(strings[7]);
21224strings[2479] = str->add(strings[2479]);
21225strings[3504] = str->add("e,action,mouse,move");
21226strings[3505] = str->add("e");
21227str->del(strings[3504]);
21228str->del(strings[3505]);
21229strings[3506] = str->add("e,action,mouse,move");
21230strings[3507] = str->add("e");
21231strings[3508] = str->add("e,state,selected");
21232strings[3507] = str->add(strings[3507]);
21233strings[3508] = str->add(strings[3508]);
21234strings[3507] = str->add(strings[3507]);
21235strings[3508] = str->add(strings[3508]);
21236strings[3507] = str->add(strings[3507]);
21237strings[3508] = str->add(strings[3508]);
21238strings[3507] = str->add(strings[3507]);
21239strings[3508] = str->add(strings[3508]);
21240strings[3507] = str->add(strings[3507]);
21241strings[3508] = str->add(strings[3508]);
21242strings[3507] = str->add(strings[3507]);
21243str->del(strings[3506]);
21244str->del(strings[3507]);
21245strings[3509] = str->add("program,start");
21246strings[3510] = str->add("sel");
21247str->del(strings[3508]);
21248str->del(strings[3507]);
21249str->del(strings[3508]);
21250str->del(strings[3507]);
21251strings[3509] = str->add(strings[3509]);
21252strings[3510] = str->add(strings[3510]);
21253str->del(strings[3508]);
21254str->del(strings[3507]);
21255strings[3509] = str->add(strings[3509]);
21256strings[3510] = str->add(strings[3510]);
21257strings[1932] = str->add(strings[1932]);
21258strings[3510] = str->add(strings[3510]);
21259str->del(strings[3508]);
21260str->del(strings[3507]);
21261strings[3509] = str->add(strings[3509]);
21262strings[3511] = str->add("e_in");
21263str->del(strings[3508]);
21264str->del(strings[3507]);
21265str->del(strings[3508]);
21266str->del(strings[3507]);
21267str->del(strings[3509]);
21268str->del(strings[3510]);
21269str->del(strings[3509]);
21270str->del(strings[3510]);
21271str->del(strings[3509]);
21272str->del(strings[3510]);
21273str->del(strings[1932]);
21274str->del(strings[3510]);
21275str->del(strings[3509]);
21276str->del(strings[3511]);
21277strings[361] = str->add(strings[361]);
21278strings[362] = str->add(strings[362]);
21279strings[361] = str->add(strings[361]);
21280str->del(strings[361]);
21281strings[362] = str->add(strings[362]);
21282str->del(strings[362]);
21283strings[3512] = str->add("resize");
21284str->del(strings[3512]);
21285strings[64] = str->add(strings[64]);
21286strings[2581] = str->add(strings[2581]);
21287strings[64] = str->add(strings[64]);
21288strings[3513] = str->add("load");
21289strings[1841] = str->add(strings[1841]);
21290strings[64] = str->add(strings[64]);
21291strings[1949] = str->add(strings[1949]);
21292strings[64] = str->add(strings[64]);
21293strings[1880] = str->add(strings[1880]);
21294strings[64] = str->add(strings[64]);
21295strings[1876] = str->add(strings[1876]);
21296str->del(strings[64]);
21297strings[379] = str->add(strings[379]);
21298strings[1842] = str->add(strings[1842]);
21299strings[1842] = str->add(strings[1842]);
21300strings[64] = str->add(strings[64]);
21301strings[1874] = str->add(strings[1874]);
21302strings[64] = str->add(strings[64]);
21303strings[2583] = str->add(strings[2583]);
21304strings[3513] = str->add(strings[3513]);
21305strings[1841] = str->add(strings[1841]);
21306strings[64] = str->add(strings[64]);
21307strings[2584] = str->add(strings[2584]);
21308strings[3513] = str->add(strings[3513]);
21309strings[1841] = str->add(strings[1841]);
21310strings[469] = str->add(strings[469]);
21311strings[2671] = str->add(strings[2671]);
21312strings[3513] = str->add(strings[3513]);
21313strings[469] = str->add(strings[469]);
21314strings[2898] = str->add(strings[2898]);
21315strings[469] = str->add(strings[469]);
21316strings[2900] = str->add(strings[2900]);
21317strings[1841] = str->add(strings[1841]);
21318strings[3514] = str->add("resize");
21319strings[3514] = str->add(strings[3514]);
21320strings[64] = str->add(strings[64]);
21321strings[2585] = str->add(strings[2585]);
21322strings[64] = str->add(strings[64]);
21323strings[3513] = str->add(strings[3513]);
21324strings[2862] = str->add(strings[2862]);
21325strings[1841] = str->add(strings[1841]);
21326str->del(strings[64]);
21327strings[385] = str->add(strings[385]);
21328strings[2862] = str->add(strings[2862]);
21329strings[64] = str->add(strings[64]);
21330strings[2886] = str->add(strings[2886]);
21331strings[64] = str->add(strings[64]);
21332strings[2888] = str->add(strings[2888]);
21333strings[64] = str->add(strings[64]);
21334strings[2583] = str->add(strings[2583]);
21335strings[3513] = str->add(strings[3513]);
21336strings[1841] = str->add(strings[1841]);
21337strings[64] = str->add(strings[64]);
21338strings[2584] = str->add(strings[2584]);
21339strings[3513] = str->add(strings[3513]);
21340strings[1841] = str->add(strings[1841]);
21341strings[469] = str->add(strings[469]);
21342strings[2680] = str->add(strings[2680]);
21343strings[3513] = str->add(strings[3513]);
21344strings[469] = str->add(strings[469]);
21345strings[3094] = str->add(strings[3094]);
21346strings[1841] = str->add(strings[1841]);
21347strings[3514] = str->add(strings[3514]);
21348strings[3514] = str->add(strings[3514]);
21349strings[64] = str->add(strings[64]);
21350strings[2585] = str->add(strings[2585]);
21351strings[64] = str->add(strings[64]);
21352strings[3513] = str->add(strings[3513]);
21353strings[2514] = str->add(strings[2514]);
21354strings[1841] = str->add(strings[1841]);
21355str->del(strings[64]);
21356strings[385] = str->add(strings[385]);
21357strings[2514] = str->add(strings[2514]);
21358strings[64] = str->add(strings[64]);
21359strings[2886] = str->add(strings[2886]);
21360strings[64] = str->add(strings[64]);
21361strings[2888] = str->add(strings[2888]);
21362strings[64] = str->add(strings[64]);
21363strings[2582] = str->add(strings[2582]);
21364strings[3513] = str->add(strings[3513]);
21365strings[1841] = str->add(strings[1841]);
21366strings[64] = str->add(strings[64]);
21367strings[2583] = str->add(strings[2583]);
21368strings[3513] = str->add(strings[3513]);
21369strings[1841] = str->add(strings[1841]);
21370strings[64] = str->add(strings[64]);
21371strings[2584] = str->add(strings[2584]);
21372strings[3513] = str->add(strings[3513]);
21373strings[1841] = str->add(strings[1841]);
21374strings[469] = str->add(strings[469]);
21375strings[2672] = str->add(strings[2672]);
21376strings[3513] = str->add(strings[3513]);
21377strings[469] = str->add(strings[469]);
21378strings[3130] = str->add(strings[3130]);
21379strings[1841] = str->add(strings[1841]);
21380strings[3514] = str->add(strings[3514]);
21381strings[3514] = str->add(strings[3514]);
21382strings[64] = str->add(strings[64]);
21383strings[2585] = str->add(strings[2585]);
21384strings[64] = str->add(strings[64]);
21385strings[3513] = str->add(strings[3513]);
21386strings[1713] = str->add(strings[1713]);
21387strings[1841] = str->add(strings[1841]);
21388str->del(strings[64]);
21389strings[385] = str->add(strings[385]);
21390strings[1713] = str->add(strings[1713]);
21391strings[64] = str->add(strings[64]);
21392strings[2886] = str->add(strings[2886]);
21393strings[64] = str->add(strings[64]);
21394strings[2888] = str->add(strings[2888]);
21395strings[64] = str->add(strings[64]);
21396strings[2583] = str->add(strings[2583]);
21397strings[3513] = str->add(strings[3513]);
21398strings[1841] = str->add(strings[1841]);
21399strings[64] = str->add(strings[64]);
21400strings[2584] = str->add(strings[2584]);
21401strings[3513] = str->add(strings[3513]);
21402strings[1841] = str->add(strings[1841]);
21403strings[469] = str->add(strings[469]);
21404strings[2673] = str->add(strings[2673]);
21405strings[3513] = str->add(strings[3513]);
21406strings[469] = str->add(strings[469]);
21407strings[3132] = str->add(strings[3132]);
21408strings[1841] = str->add(strings[1841]);
21409strings[3514] = str->add(strings[3514]);
21410strings[3514] = str->add(strings[3514]);
21411strings[64] = str->add(strings[64]);
21412strings[2585] = str->add(strings[2585]);
21413strings[64] = str->add(strings[64]);
21414strings[3513] = str->add(strings[3513]);
21415strings[1714] = str->add(strings[1714]);
21416strings[1841] = str->add(strings[1841]);
21417str->del(strings[64]);
21418strings[385] = str->add(strings[385]);
21419strings[1714] = str->add(strings[1714]);
21420strings[64] = str->add(strings[64]);
21421strings[2886] = str->add(strings[2886]);
21422strings[64] = str->add(strings[64]);
21423strings[2888] = str->add(strings[2888]);
21424strings[3514] = str->add(strings[3514]);
21425strings[3514] = str->add(strings[3514]);
21426strings[3514] = str->add(strings[3514]);
21427strings[3514] = str->add(strings[3514]);
21428strings[3514] = str->add(strings[3514]);
21429strings[3514] = str->add(strings[3514]);
21430strings[3514] = str->add(strings[3514]);
21431strings[3514] = str->add(strings[3514]);
21432strings[3514] = str->add(strings[3514]);
21433strings[3514] = str->add(strings[3514]);
21434strings[3514] = str->add(strings[3514]);
21435strings[3514] = str->add(strings[3514]);
21436strings[3514] = str->add(strings[3514]);
21437strings[1933] = str->add(strings[1933]);
21438str->del(strings[1933]);
21439str->del(strings[64]);
21440str->del(strings[2583]);
21441strings[1933] = str->add(strings[1933]);
21442str->del(strings[1933]);
21443str->del(strings[3155]);
21444str->del(strings[3155]);
21445str->del(strings[3155]);
21446str->del(strings[64]);
21447str->del(strings[2585]);
21448strings[1933] = str->add(strings[1933]);
21449str->del(strings[1933]);
21450str->del(strings[64]);
21451str->del(strings[2582]);
21452strings[1933] = str->add(strings[1933]);
21453str->del(strings[1933]);
21454str->del(strings[64]);
21455str->del(strings[2583]);
21456strings[1933] = str->add(strings[1933]);
21457str->del(strings[1933]);
21458str->del(strings[64]);
21459str->del(strings[2584]);
21460strings[1933] = str->add(strings[1933]);
21461str->del(strings[1933]);
21462str->del(strings[469]);
21463str->del(strings[2682]);
21464strings[1933] = str->add(strings[1933]);
21465str->del(strings[1933]);
21466str->del(strings[1731]);
21467str->del(strings[1731]);
21468str->del(strings[1731]);
21469str->del(strings[64]);
21470str->del(strings[2585]);
21471strings[1933] = str->add(strings[1933]);
21472str->del(strings[1933]);
21473str->del(strings[64]);
21474str->del(strings[2582]);
21475strings[1933] = str->add(strings[1933]);
21476str->del(strings[1933]);
21477str->del(strings[64]);
21478str->del(strings[2634]);
21479strings[1933] = str->add(strings[1933]);
21480str->del(strings[1933]);
21481str->del(strings[64]);
21482str->del(strings[2584]);
21483strings[1933] = str->add(strings[1933]);
21484str->del(strings[1933]);
21485str->del(strings[469]);
21486str->del(strings[2683]);
21487strings[1933] = str->add(strings[1933]);
21488str->del(strings[1933]);
21489str->del(strings[3156]);
21490str->del(strings[3156]);
21491str->del(strings[3156]);
21492str->del(strings[64]);
21493str->del(strings[2585]);
21494strings[1933] = str->add(strings[1933]);
21495str->del(strings[1933]);
21496str->del(strings[64]);
21497str->del(strings[2586]);
21498strings[1933] = str->add(strings[1933]);
21499str->del(strings[1933]);
21500str->del(strings[1842]);
21501str->del(strings[1842]);
21502str->del(strings[64]);
21503str->del(strings[2581]);
21504str->del(strings[64]);
21505str->del(strings[2886]);
21506str->del(strings[64]);
21507str->del(strings[2888]);
21508str->del(strings[3155]);
21509str->del(strings[385]);
21510str->del(strings[64]);
21511str->del(strings[2915]);
21512str->del(strings[64]);
21513str->del(strings[2886]);
21514str->del(strings[64]);
21515str->del(strings[2888]);
21516str->del(strings[469]);
21517str->del(strings[2896]);
21518str->del(strings[1731]);
21519str->del(strings[385]);
21520str->del(strings[64]);
21521str->del(strings[2915]);
21522str->del(strings[64]);
21523str->del(strings[2886]);
21524str->del(strings[64]);
21525str->del(strings[2888]);
21526str->del(strings[469]);
21527str->del(strings[3162]);
21528str->del(strings[3156]);
21529str->del(strings[385]);
21530str->del(strings[64]);
21531str->del(strings[2913]);
21532str->del(strings[64]);
21533str->del(strings[1949]);
21534str->del(strings[64]);
21535str->del(strings[1880]);
21536str->del(strings[64]);
21537str->del(strings[1876]);
21538str->del(strings[379]);
21539str->del(strings[64]);
21540str->del(strings[1874]);
21541str->del(strings[361]);
21542str->del(strings[362]);
21543strings[3514] = str->add(strings[3514]);
21544strings[2862] = str->add(strings[2862]);
21545strings[2862] = str->add(strings[2862]);
21546strings[3514] = str->add(strings[3514]);
21547strings[2514] = str->add(strings[2514]);
21548strings[2514] = str->add(strings[2514]);
21549strings[64] = str->add(strings[64]);
21550strings[2915] = str->add(strings[2915]);
21551strings[3514] = str->add(strings[3514]);
21552strings[1713] = str->add(strings[1713]);
21553strings[1713] = str->add(strings[1713]);
21554strings[3514] = str->add(strings[3514]);
21555strings[1714] = str->add(strings[1714]);
21556strings[1714] = str->add(strings[1714]);
21557str->del(strings[64]);
21558str->del(strings[2913]);
21559strings[64] = str->add(strings[64]);
21560strings[3021] = str->add(strings[3021]);
21561str->del(strings[3513]);
21562str->del(strings[1841]);
21563str->del(strings[3513]);
21564str->del(strings[1841]);
21565str->del(strings[3513]);
21566str->del(strings[1841]);
21567str->del(strings[3513]);
21568str->del(strings[1841]);
21569str->del(strings[3514]);
21570str->del(strings[3514]);
21571str->del(strings[3513]);
21572str->del(strings[1841]);
21573str->del(strings[3513]);
21574str->del(strings[1841]);
21575str->del(strings[3513]);
21576str->del(strings[1841]);
21577str->del(strings[3513]);
21578str->del(strings[1841]);
21579str->del(strings[3514]);
21580str->del(strings[3514]);
21581str->del(strings[3513]);
21582str->del(strings[1841]);
21583str->del(strings[3513]);
21584str->del(strings[1841]);
21585str->del(strings[3513]);
21586str->del(strings[1841]);
21587str->del(strings[3513]);
21588str->del(strings[1841]);
21589str->del(strings[3513]);
21590str->del(strings[1841]);
21591str->del(strings[3514]);
21592str->del(strings[3514]);
21593str->del(strings[3513]);
21594str->del(strings[1841]);
21595str->del(strings[3513]);
21596str->del(strings[1841]);
21597str->del(strings[3513]);
21598str->del(strings[1841]);
21599str->del(strings[3513]);
21600str->del(strings[1841]);
21601str->del(strings[3514]);
21602str->del(strings[3514]);
21603str->del(strings[3513]);
21604str->del(strings[1841]);
21605str->del(strings[3514]);
21606str->del(strings[3514]);
21607str->del(strings[3514]);
21608str->del(strings[3514]);
21609str->del(strings[3514]);
21610str->del(strings[3514]);
21611str->del(strings[3514]);
21612str->del(strings[3514]);
21613str->del(strings[3514]);
21614str->del(strings[3514]);
21615str->del(strings[3514]);
21616str->del(strings[3514]);
21617str->del(strings[3514]);
21618str->del(strings[3514]);
21619str->del(strings[3514]);
21620str->del(strings[3514]);
21621str->del(strings[3514]);
21622strings[3515] = str->add("e,action,mouse,move");
21623strings[3516] = str->add("e");
21624str->del(strings[3515]);
21625str->del(strings[3516]);
21626strings[3517] = str->add("e,action,mouse,move");
21627strings[3518] = str->add("e");
21628str->del(strings[3517]);
21629str->del(strings[3518]);
21630strings[1932] = str->add(strings[1932]);
21631strings[1849] = str->add(strings[1849]);
21632strings[3519] = str->add("program,start");
21633strings[1850] = str->add(strings[1850]);
21634strings[1932] = str->add(strings[1932]);
21635strings[1850] = str->add(strings[1850]);
21636strings[3519] = str->add(strings[3519]);
21637strings[1849] = str->add(strings[1849]);
21638str->del(strings[1932]);
21639str->del(strings[1849]);
21640str->del(strings[3519]);
21641str->del(strings[1850]);
21642str->del(strings[1932]);
21643str->del(strings[1850]);
21644str->del(strings[3519]);
21645str->del(strings[1849]);
21646strings[3520] = str->add("e,action,mouse,move");
21647strings[3521] = str->add("e");
21648str->del(strings[3520]);
21649str->del(strings[3521]);
21650strings[3522] = str->add("e,action,mouse,move");
21651strings[3523] = str->add("e");
21652str->del(strings[3522]);
21653str->del(strings[3523]);
21654strings[3524] = str->add("e,action,mouse,move");
21655strings[3525] = str->add("e");
21656str->del(strings[3524]);
21657str->del(strings[3525]);
21658strings[3526] = str->add("e,action,mouse,move");
21659strings[3527] = str->add("e");
21660str->del(strings[3526]);
21661str->del(strings[3527]);
21662str->del(strings[7]);
21663str->del(strings[2479]);
21664strings[7] = str->add(strings[7]);
21665strings[2489] = str->add(strings[2489]);
21666strings[3528] = str->add("e,action,mouse,move");
21667strings[3529] = str->add("e");
21668str->del(strings[3528]);
21669str->del(strings[3529]);
21670strings[3530] = str->add("e,action,mouse,move");
21671strings[3531] = str->add("e");
21672str->del(strings[3530]);
21673str->del(strings[3531]);
21674strings[3532] = str->add("e,action,mouse,move");
21675strings[3533] = str->add("e");
21676str->del(strings[3532]);
21677str->del(strings[3533]);
21678strings[3534] = str->add("e,action,mouse,move");
21679strings[3535] = str->add("e");
21680str->del(strings[3534]);
21681str->del(strings[3535]);
21682strings[1932] = str->add(strings[1932]);
21683strings[3536] = str->add("unsel");
21684str->del(strings[1932]);
21685str->del(strings[3536]);
21686strings[3537] = str->add("e,action,mouse,move");
21687strings[3538] = str->add("e");
21688str->del(strings[3537]);
21689str->del(strings[3538]);
21690strings[3539] = str->add("e,action,mouse,move");
21691strings[3540] = str->add("e");
21692str->del(strings[3539]);
21693str->del(strings[3540]);
21694strings[3541] = str->add("e,action,mouse,move");
21695strings[3542] = str->add("e");
21696str->del(strings[3541]);
21697str->del(strings[3542]);
21698strings[3543] = str->add("e,action,mouse,move");
21699strings[3544] = str->add("e");
21700str->del(strings[3543]);
21701str->del(strings[3544]);
21702strings[1932] = str->add(strings[1932]);
21703strings[3545] = str->add("unsel");
21704str->del(strings[1932]);
21705str->del(strings[3545]);
21706str->del(strings[7]);
21707str->del(strings[2489]);
21708strings[7] = str->add(strings[7]);
21709strings[2508] = str->add(strings[2508]);
21710strings[3546] = str->add("e,action,mouse,move");
21711strings[3547] = str->add("e");
21712str->del(strings[3546]);
21713str->del(strings[3547]);
21714strings[3548] = str->add("e,action,mouse,move");
21715strings[3549] = str->add("e");
21716str->del(strings[3548]);
21717str->del(strings[3549]);
21718strings[3550] = str->add("e,action,mouse,move");
21719strings[3551] = str->add("e");
21720str->del(strings[3550]);
21721str->del(strings[3551]);
21722strings[3552] = str->add("e,action,mouse,move");
21723strings[3553] = str->add("e");
21724str->del(strings[3552]);
21725str->del(strings[3553]);
21726strings[3554] = str->add("e,action,mouse,move");
21727strings[3555] = str->add("e");
21728str->del(strings[3554]);
21729str->del(strings[3555]);
21730strings[3556] = str->add("e,action,mouse,move");
21731strings[3557] = str->add("e");
21732str->del(strings[3556]);
21733str->del(strings[3557]);
21734str->del(strings[7]);
21735str->del(strings[2508]);
21736strings[7] = str->add(strings[7]);
21737strings[2518] = str->add(strings[2518]);
21738strings[3558] = str->add("e,action,mouse,move");
21739strings[3559] = str->add("e");
21740str->del(strings[3558]);
21741str->del(strings[3559]);
21742strings[3560] = str->add("e,action,mouse,move");
21743strings[3561] = str->add("e");
21744strings[3562] = str->add("e,state,unselected");
21745strings[3561] = str->add(strings[3561]);
21746strings[3562] = str->add(strings[3562]);
21747strings[3561] = str->add(strings[3561]);
21748strings[3562] = str->add(strings[3562]);
21749strings[3561] = str->add(strings[3561]);
21750strings[3562] = str->add(strings[3562]);
21751strings[3561] = str->add(strings[3561]);
21752strings[3562] = str->add(strings[3562]);
21753strings[3561] = str->add(strings[3561]);
21754strings[3562] = str->add(strings[3562]);
21755strings[3561] = str->add(strings[3561]);
21756str->del(strings[3560]);
21757str->del(strings[3561]);
21758strings[1932] = str->add(strings[1932]);
21759strings[3563] = str->add("sel");
21760strings[3564] = str->add("program,start");
21761strings[3565] = str->add("unsel");
21762str->del(strings[3562]);
21763str->del(strings[3561]);
21764str->del(strings[3562]);
21765str->del(strings[3561]);
21766strings[1932] = str->add(strings[1932]);
21767strings[3563] = str->add(strings[3563]);
21768strings[3564] = str->add(strings[3564]);
21769strings[3565] = str->add(strings[3565]);
21770str->del(strings[3562]);
21771str->del(strings[3561]);
21772strings[3564] = str->add(strings[3564]);
21773strings[3565] = str->add(strings[3565]);
21774strings[1932] = str->add(strings[1932]);
21775strings[3565] = str->add(strings[3565]);
21776str->del(strings[3562]);
21777str->del(strings[3561]);
21778strings[1932] = str->add(strings[1932]);
21779strings[3566] = str->add("e_in");
21780strings[3564] = str->add(strings[3564]);
21781strings[3567] = str->add("e_out");
21782str->del(strings[3562]);
21783str->del(strings[3561]);
21784str->del(strings[3562]);
21785str->del(strings[3561]);
21786str->del(strings[1932]);
21787str->del(strings[3563]);
21788str->del(strings[3564]);
21789str->del(strings[3565]);
21790str->del(strings[1932]);
21791str->del(strings[3563]);
21792str->del(strings[3564]);
21793str->del(strings[3565]);
21794str->del(strings[3564]);
21795str->del(strings[3565]);
21796str->del(strings[1932]);
21797str->del(strings[3565]);
21798str->del(strings[1932]);
21799str->del(strings[3566]);
21800str->del(strings[3564]);
21801str->del(strings[3567]);
21802str->del(strings[64]);
21803str->del(strings[3021]);
21804strings[64] = str->add(strings[64]);
21805strings[2913] = str->add(strings[2913]);
21806strings[3568] = str->add("e,action,mouse,move");
21807strings[3569] = str->add("e");
21808str->del(strings[3568]);
21809str->del(strings[3569]);
21810strings[3570] = str->add("e,action,mouse,move");
21811strings[3571] = str->add("e");
21812str->del(strings[3570]);
21813str->del(strings[3571]);
21814str->del(strings[7]);
21815str->del(strings[2518]);
21816strings[7] = str->add(strings[7]);
21817strings[2531] = str->add(strings[2531]);
21818strings[3572] = str->add("e,action,mouse,move");
21819strings[3573] = str->add("e");
21820str->del(strings[3572]);
21821str->del(strings[3573]);
21822strings[1932] = str->add(strings[1932]);
21823strings[3574] = str->add("unsel");
21824str->del(strings[1932]);
21825str->del(strings[3574]);
21826strings[3575] = str->add("e,action,mouse,move");
21827strings[3576] = str->add("e");
21828str->del(strings[3575]);
21829str->del(strings[3576]);
21830strings[3577] = str->add("e,action,mouse,move");
21831strings[3578] = str->add("e");
21832str->del(strings[3577]);
21833str->del(strings[3578]);
21834strings[1932] = str->add(strings[1932]);
21835strings[3579] = str->add("unsel");
21836str->del(strings[1932]);
21837str->del(strings[3579]);
21838str->del(strings[7]);
21839str->del(strings[2531]);
21840strings[7] = str->add(strings[7]);
21841strings[2544] = str->add(strings[2544]);
21842str->del(strings[7]);
21843str->del(strings[2544]);
21844strings[7] = str->add(strings[7]);
21845strings[2561] = str->add(strings[2561]);
21846str->del(strings[7]);
21847str->del(strings[2561]);
21848strings[7] = str->add(strings[7]);
21849strings[3580] = str->add("images/40");
21850strings[3581] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/40");
21851strings[7] = str->add(strings[7]);
21852strings[3580] = str->add(strings[3580]);
21853strings[3582] = str->add("e,action,mouse,move");
21854strings[3583] = str->add("e");
21855str->del(strings[3582]);
21856str->del(strings[3583]);
21857strings[3584] = str->add("e,action,mouse,move");
21858strings[3585] = str->add("e");
21859str->del(strings[3584]);
21860str->del(strings[3585]);
21861strings[3586] = str->add("e,action,mouse,move");
21862strings[3587] = str->add("e");
21863str->del(strings[3586]);
21864str->del(strings[3587]);
21865strings[3588] = str->add("e,action,mouse,move");
21866strings[3589] = str->add("e");
21867str->del(strings[3588]);
21868str->del(strings[3589]);
21869strings[1932] = str->add(strings[1932]);
21870strings[3590] = str->add("unsel");
21871str->del(strings[1932]);
21872str->del(strings[3590]);
21873str->del(strings[7]);
21874str->del(strings[3580]);
21875strings[7] = str->add(strings[7]);
21876strings[1756] = str->add(strings[1756]);
21877strings[3591] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/41");
21878strings[7] = str->add(strings[7]);
21879strings[1756] = str->add(strings[1756]);
21880strings[3592] = str->add("e,action,mouse,move");
21881strings[3593] = str->add("e");
21882str->del(strings[3592]);
21883str->del(strings[3593]);
21884strings[3594] = str->add("e,action,mouse,move");
21885strings[3595] = str->add("e");
21886strings[3596] = str->add("e,state,selected");
21887strings[3595] = str->add(strings[3595]);
21888strings[3596] = str->add(strings[3596]);
21889strings[3595] = str->add(strings[3595]);
21890strings[3596] = str->add(strings[3596]);
21891strings[3595] = str->add(strings[3595]);
21892strings[3596] = str->add(strings[3596]);
21893strings[3595] = str->add(strings[3595]);
21894strings[3596] = str->add(strings[3596]);
21895strings[3595] = str->add(strings[3595]);
21896strings[3596] = str->add(strings[3596]);
21897strings[3595] = str->add(strings[3595]);
21898str->del(strings[3594]);
21899str->del(strings[3595]);
21900strings[3597] = str->add("program,start");
21901strings[3598] = str->add("sel");
21902str->del(strings[3596]);
21903str->del(strings[3595]);
21904str->del(strings[3596]);
21905str->del(strings[3595]);
21906strings[3597] = str->add(strings[3597]);
21907strings[3598] = str->add(strings[3598]);
21908str->del(strings[3596]);
21909str->del(strings[3595]);
21910strings[3597] = str->add(strings[3597]);
21911strings[3598] = str->add(strings[3598]);
21912strings[1932] = str->add(strings[1932]);
21913strings[3598] = str->add(strings[3598]);
21914str->del(strings[3596]);
21915str->del(strings[3595]);
21916strings[1932] = str->add(strings[1932]);
21917strings[3599] = str->add("e_out");
21918strings[3597] = str->add(strings[3597]);
21919strings[3600] = str->add("e_in");
21920str->del(strings[3596]);
21921str->del(strings[3595]);
21922str->del(strings[3596]);
21923str->del(strings[3595]);
21924str->del(strings[3597]);
21925str->del(strings[3598]);
21926str->del(strings[3597]);
21927str->del(strings[3598]);
21928str->del(strings[3597]);
21929str->del(strings[3598]);
21930str->del(strings[1932]);
21931str->del(strings[3598]);
21932str->del(strings[1932]);
21933str->del(strings[3599]);
21934str->del(strings[3597]);
21935str->del(strings[3600]);
21936str->del(strings[64]);
21937str->del(strings[2913]);
21938strings[64] = str->add(strings[64]);
21939strings[3021] = str->add(strings[3021]);
21940strings[3601] = str->add("e,action,mouse,move");
21941strings[3602] = str->add("e");
21942str->del(strings[3601]);
21943str->del(strings[3602]);
21944strings[3603] = str->add("e,action,mouse,move");
21945strings[3604] = str->add("e");
21946str->del(strings[3603]);
21947str->del(strings[3604]);
21948strings[3605] = str->add("e,action,mouse,move");
21949strings[3606] = str->add("e");
21950str->del(strings[3605]);
21951str->del(strings[3606]);
21952strings[3607] = str->add("e,action,mouse,move");
21953strings[3608] = str->add("e");
21954str->del(strings[3607]);
21955str->del(strings[3608]);
21956strings[3609] = str->add("e,action,mouse,move");
21957strings[3610] = str->add("e");
21958str->del(strings[3609]);
21959str->del(strings[3610]);
21960strings[3611] = str->add("e,action,mouse,move");
21961strings[3612] = str->add("e");
21962str->del(strings[3611]);
21963str->del(strings[3612]);
21964str->del(strings[7]);
21965str->del(strings[1756]);
21966strings[7] = str->add(strings[7]);
21967strings[1949] = str->add(strings[1949]);
21968strings[3613] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/42");
21969strings[7] = str->add(strings[7]);
21970strings[1949] = str->add(strings[1949]);
21971strings[3614] = str->add("e,action,mouse,move");
21972strings[3615] = str->add("e");
21973str->del(strings[3614]);
21974str->del(strings[3615]);
21975strings[3616] = str->add("e,action,mouse,move");
21976strings[3617] = str->add("e");
21977str->del(strings[3616]);
21978str->del(strings[3617]);
21979strings[3618] = str->add("e,action,mouse,move");
21980strings[3619] = str->add("e");
21981str->del(strings[3618]);
21982str->del(strings[3619]);
21983strings[3620] = str->add("e,action,mouse,move");
21984strings[3621] = str->add("e");
21985str->del(strings[3620]);
21986str->del(strings[3621]);
21987strings[1932] = str->add(strings[1932]);
21988strings[1847] = str->add(strings[1847]);
21989strings[3622] = str->add("program,start");
21990strings[1848] = str->add(strings[1848]);
21991strings[1932] = str->add(strings[1932]);
21992strings[1848] = str->add(strings[1848]);
21993strings[3622] = str->add(strings[3622]);
21994strings[1847] = str->add(strings[1847]);
21995str->del(strings[1932]);
21996str->del(strings[1847]);
21997str->del(strings[3622]);
21998str->del(strings[1848]);
21999str->del(strings[1932]);
22000str->del(strings[1848]);
22001str->del(strings[3622]);
22002str->del(strings[1847]);
22003strings[3623] = str->add("e,action,mouse,move");
22004strings[3624] = str->add("e");
22005str->del(strings[3623]);
22006str->del(strings[3624]);
22007strings[3625] = str->add("e,action,mouse,move");
22008strings[3626] = str->add("e");
22009str->del(strings[3625]);
22010str->del(strings[3626]);
22011strings[3627] = str->add("e,action,mouse,move");
22012strings[3628] = str->add("e");
22013str->del(strings[3627]);
22014str->del(strings[3628]);
22015strings[3629] = str->add("e,action,mouse,move");
22016strings[3630] = str->add("e");
22017str->del(strings[3629]);
22018str->del(strings[3630]);
22019str->del(strings[7]);
22020str->del(strings[1949]);
22021strings[7] = str->add(strings[7]);
22022strings[2915] = str->add(strings[2915]);
22023strings[3631] = str->add("e,action,mouse,move");
22024strings[3632] = str->add("e");
22025str->del(strings[3631]);
22026str->del(strings[3632]);
22027strings[3633] = str->add("e,action,mouse,move");
22028strings[3634] = str->add("e");
22029str->del(strings[3633]);
22030str->del(strings[3634]);
22031strings[3635] = str->add("e,action,mouse,move");
22032strings[3636] = str->add("e");
22033str->del(strings[3635]);
22034str->del(strings[3636]);
22035strings[3637] = str->add("e,action,mouse,move");
22036strings[3638] = str->add("e");
22037str->del(strings[3637]);
22038str->del(strings[3638]);
22039strings[3639] = str->add("e,action,mouse,move");
22040strings[3640] = str->add("e");
22041str->del(strings[3639]);
22042str->del(strings[3640]);
22043strings[3641] = str->add("e,action,mouse,move");
22044strings[3642] = str->add("e");
22045str->del(strings[3641]);
22046str->del(strings[3642]);
22047strings[3643] = str->add("e,action,mouse,move");
22048strings[3644] = str->add("e");
22049str->del(strings[3643]);
22050str->del(strings[3644]);
22051strings[3645] = str->add("e,action,mouse,move");
22052strings[3646] = str->add("e");
22053str->del(strings[3645]);
22054str->del(strings[3646]);
22055strings[3647] = str->add("e,action,mouse,move");
22056strings[3648] = str->add("e");
22057str->del(strings[3647]);
22058str->del(strings[3648]);
22059str->del(strings[7]);
22060str->del(strings[2915]);
22061strings[7] = str->add(strings[7]);
22062strings[2886] = str->add(strings[2886]);
22063strings[3649] = str->add("e,action,mouse,move");
22064strings[3650] = str->add("e");
22065str->del(strings[3649]);
22066str->del(strings[3650]);
22067strings[3651] = str->add("e,action,mouse,move");
22068strings[3652] = str->add("e");
22069str->del(strings[3651]);
22070str->del(strings[3652]);
22071strings[3653] = str->add("e,action,mouse,move");
22072strings[3654] = str->add("e");
22073str->del(strings[3653]);
22074str->del(strings[3654]);
22075strings[3655] = str->add("e,action,mouse,move");
22076strings[3656] = str->add("e");
22077str->del(strings[3655]);
22078str->del(strings[3656]);
22079strings[1932] = str->add(strings[1932]);
22080strings[3657] = str->add("sel");
22081strings[1932] = str->add(strings[1932]);
22082strings[3657] = str->add(strings[3657]);
22083str->del(strings[1932]);
22084str->del(strings[3657]);
22085str->del(strings[1932]);
22086str->del(strings[3657]);
22087strings[3658] = str->add("e,action,mouse,move");
22088strings[3659] = str->add("e");
22089str->del(strings[3658]);
22090str->del(strings[3659]);
22091strings[3660] = str->add("e,action,mouse,move");
22092strings[3661] = str->add("e");
22093str->del(strings[3660]);
22094str->del(strings[3661]);
22095strings[3662] = str->add("e,action,mouse,move");
22096strings[3663] = str->add("e");
22097str->del(strings[3662]);
22098str->del(strings[3663]);
22099strings[3664] = str->add("e,action,mouse,move");
22100strings[3665] = str->add("e");
22101str->del(strings[3664]);
22102str->del(strings[3665]);
22103str->del(strings[7]);
22104str->del(strings[2886]);
22105strings[7] = str->add(strings[7]);
22106strings[2888] = str->add(strings[2888]);
22107strings[3666] = str->add("e,action,mouse,move");
22108strings[3667] = str->add("e");
22109str->del(strings[3666]);
22110str->del(strings[3667]);
22111strings[3668] = str->add("e,action,mouse,move");
22112strings[3669] = str->add("e");
22113str->del(strings[3668]);
22114str->del(strings[3669]);
22115strings[3670] = str->add("e,action,mouse,move");
22116strings[3671] = str->add("e");
22117strings[3672] = str->add("e,state,unselected");
22118strings[3671] = str->add(strings[3671]);
22119strings[3672] = str->add(strings[3672]);
22120strings[3671] = str->add(strings[3671]);
22121strings[3672] = str->add(strings[3672]);
22122strings[3671] = str->add(strings[3671]);
22123strings[3672] = str->add(strings[3672]);
22124strings[3671] = str->add(strings[3671]);
22125strings[3672] = str->add(strings[3672]);
22126strings[3671] = str->add(strings[3671]);
22127strings[3672] = str->add(strings[3672]);
22128strings[3671] = str->add(strings[3671]);
22129strings[3673] = str->add("e,state,selected");
22130strings[3671] = str->add(strings[3671]);
22131strings[3673] = str->add(strings[3673]);
22132strings[3671] = str->add(strings[3671]);
22133strings[3673] = str->add(strings[3673]);
22134strings[3671] = str->add(strings[3671]);
22135strings[3673] = str->add(strings[3673]);
22136strings[3671] = str->add(strings[3671]);
22137strings[3673] = str->add(strings[3673]);
22138strings[3671] = str->add(strings[3671]);
22139str->del(strings[3670]);
22140str->del(strings[3671]);
22141strings[3674] = str->add("program,start");
22142strings[3675] = str->add("unsel");
22143str->del(strings[3672]);
22144str->del(strings[3671]);
22145str->del(strings[3672]);
22146str->del(strings[3671]);
22147strings[3674] = str->add(strings[3674]);
22148strings[3675] = str->add(strings[3675]);
22149str->del(strings[3672]);
22150str->del(strings[3671]);
22151strings[3674] = str->add(strings[3674]);
22152strings[3675] = str->add(strings[3675]);
22153strings[1932] = str->add(strings[1932]);
22154strings[3675] = str->add(strings[3675]);
22155str->del(strings[3672]);
22156str->del(strings[3671]);
22157strings[1932] = str->add(strings[1932]);
22158strings[3676] = str->add("e_in");
22159strings[3674] = str->add(strings[3674]);
22160strings[3677] = str->add("e_out");
22161str->del(strings[3672]);
22162str->del(strings[3671]);
22163str->del(strings[3672]);
22164str->del(strings[3671]);
22165strings[3674] = str->add(strings[3674]);
22166strings[3678] = str->add("sel");
22167str->del(strings[3673]);
22168str->del(strings[3671]);
22169str->del(strings[3673]);
22170str->del(strings[3671]);
22171strings[3674] = str->add(strings[3674]);
22172strings[3678] = str->add(strings[3678]);
22173str->del(strings[3673]);
22174str->del(strings[3671]);
22175strings[3674] = str->add(strings[3674]);
22176strings[3676] = str->add(strings[3676]);
22177str->del(strings[3673]);
22178str->del(strings[3671]);
22179str->del(strings[3673]);
22180str->del(strings[3671]);
22181str->del(strings[3674]);
22182str->del(strings[3675]);
22183str->del(strings[3674]);
22184str->del(strings[3675]);
22185str->del(strings[3674]);
22186str->del(strings[3675]);
22187str->del(strings[1932]);
22188str->del(strings[3675]);
22189str->del(strings[1932]);
22190str->del(strings[3676]);
22191str->del(strings[3674]);
22192str->del(strings[3677]);
22193str->del(strings[3674]);
22194str->del(strings[3678]);
22195str->del(strings[3674]);
22196str->del(strings[3678]);
22197str->del(strings[3674]);
22198str->del(strings[3676]);
22199str->del(strings[64]);
22200str->del(strings[3021]);
22201strings[64] = str->add(strings[64]);
22202strings[2913] = str->add(strings[2913]);
22203strings[3679] = str->add("e,action,mouse,move");
22204strings[3680] = str->add("e");
22205str->del(strings[3679]);
22206str->del(strings[3680]);
22207strings[3681] = str->add("e,action,mouse,move");
22208strings[3682] = str->add("e");
22209str->del(strings[3681]);
22210str->del(strings[3682]);
22211strings[3683] = str->add("e,action,mouse,move");
22212strings[3684] = str->add("e");
22213str->del(strings[3683]);
22214str->del(strings[3684]);
22215str->del(strings[7]);
22216str->del(strings[2888]);
22217strings[7] = str->add(strings[7]);
22218strings[2913] = str->add(strings[2913]);
22219strings[3685] = str->add("e,action,mouse,move");
22220strings[3686] = str->add("e");
22221str->del(strings[3685]);
22222str->del(strings[3686]);
22223strings[3687] = str->add("e,action,mouse,move");
22224strings[3688] = str->add("e");
22225str->del(strings[3687]);
22226str->del(strings[3688]);
22227strings[3689] = str->add("e,action,mouse,move");
22228strings[3690] = str->add("e");
22229str->del(strings[3689]);
22230str->del(strings[3690]);
22231strings[3691] = str->add("e,action,mouse,move");
22232strings[3692] = str->add("e");
22233str->del(strings[3691]);
22234str->del(strings[3692]);
22235str->del(strings[7]);
22236str->del(strings[2913]);
22237strings[7] = str->add(strings[7]);
22238strings[3021] = str->add(strings[3021]);
22239strings[3693] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/47");
22240strings[7] = str->add(strings[7]);
22241strings[3021] = str->add(strings[3021]);
22242strings[1932] = str->add(strings[1932]);
22243strings[3694] = str->add("unsel");
22244str->del(strings[1932]);
22245str->del(strings[3694]);
22246str->del(strings[7]);
22247str->del(strings[3021]);
22248strings[7] = str->add(strings[7]);
22249strings[3695] = str->add("images/48");
22250strings[3696] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/48");
22251strings[7] = str->add(strings[7]);
22252strings[3695] = str->add(strings[3695]);
22253strings[1932] = str->add(strings[1932]);
22254strings[3697] = str->add("sel");
22255strings[1932] = str->add(strings[1932]);
22256strings[3697] = str->add(strings[3697]);
22257str->del(strings[1932]);
22258str->del(strings[3697]);
22259str->del(strings[1932]);
22260str->del(strings[3697]);
22261str->del(strings[7]);
22262str->del(strings[3695]);
22263strings[7] = str->add(strings[7]);
22264strings[3698] = str->add("images/49");
22265strings[3699] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/49");
22266strings[7] = str->add(strings[7]);
22267strings[3698] = str->add(strings[3698]);
22268strings[3700] = str->add("e,action,mouse,move");
22269strings[3701] = str->add("e");
22270strings[3702] = str->add("e,action,mouse,down");
22271strings[3701] = str->add(strings[3701]);
22272str->del(strings[3700]);
22273str->del(strings[3701]);
22274str->del(strings[3702]);
22275str->del(strings[3701]);
22276str->del(strings[7]);
22277str->del(strings[3698]);
22278strings[7] = str->add(strings[7]);
22279strings[3703] = str->add("images/50");
22280strings[3704] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/50");
22281strings[7] = str->add(strings[7]);
22282strings[3703] = str->add(strings[3703]);
22283strings[3705] = str->add("e,action,mouse,move");
22284strings[3706] = str->add("e");
22285strings[3707] = str->add("e,action,mouse,up");
22286strings[3706] = str->add(strings[3706]);
22287strings[361] = str->add(strings[361]);
22288strings[362] = str->add(strings[362]);
22289strings[361] = str->add(strings[361]);
22290str->del(strings[361]);
22291strings[362] = str->add(strings[362]);
22292str->del(strings[362]);
22293strings[3708] = str->add("base/theme/about");
22294strings[64] = str->add(strings[64]);
22295strings[2769] = str->add(strings[2769]);
22296str->del(strings[64]);
22297str->del(strings[2769]);
22298strings[469] = str->add(strings[469]);
22299strings[2769] = str->add(strings[2769]);
22300strings[2769] = str->add(strings[2769]);
22301strings[469] = str->add(strings[469]);
22302strings[469] = str->add(strings[469]);
22303strings[469] = str->add(strings[469]);
22304strings[3709] = str->add("load");
22305strings[1841] = str->add(strings[1841]);
22306strings[1712] = str->add(strings[1712]);
22307strings[3710] = str->add("0.16.999.043");
22308strings[3711] = str->add("Copyright &copy; 1999-2008, by the Enlightenment Development Team.<br><br>We hope you enjoy using this software as much as we enjoyed writing it.<br><br>This software is provided as-is with no explicit or implied warranty. This software is governed by licensing conditions, so please see the COPYING and COPYING-PLAIN licence files installed on your system.<br><br>Enlightenment is under <hilight>HEAVY DEVELOPMENT</hilight> and it is not stable. Many features are incomplete or even non-existent yet and may have many bugs. You have been <hilight>WARNED!</hilight>");
22309strings[3712] = str->add("e,action,close");
22310strings[3713] = str->add("<title>The Team</title>The Rasterman (Carsten Haitzler) <br>Ibukun Olumuyiwa <br>Sebastian Dransfeld <br>HandyAndE (Andrew Williams) <br>CodeWarrior (Hisham Mardam Bey) <br>dj2 (Dan Sinclair) <br>Tilman Sauerbeck <br>Aleksej Struk <br>Brian Mattern <br>devilhorns (Christopher Michael) <br>/dev/urandom (Viktor Kojouharov) <br>ilLogict <br>Stafford Horne <br>Cedric Bail <br>onefang (David Seikel) <br>Stephen Houston <br>Byron Hillis <br>Ravenlock (Eric Schuele) <br>ManoWarrior (Luchezar Petkov) <br>morlenxus (Brian Miculcy) <br>");
22311strings[3714] = str->add("font");
22312strings[3715] = str->add("font_fallbacks");
22313strings[3716] = str->add("font_size");
22314strings[3717] = str->add("font_source");
22315strings[3718] = str->add("color");
22316strings[3719] = str->add("underline_color");
22317strings[3720] = str->add("underline2_color");
22318strings[3721] = str->add("outline_color");
22319strings[3722] = str->add("shadow_color");
22320strings[3723] = str->add("glow_color");
22321strings[3724] = str->add("glow2_color");
22322strings[3725] = str->add("backing_color");
22323strings[3726] = str->add("strikethrough_color");
22324strings[3727] = str->add("align");
22325strings[3728] = str->add("valign");
22326strings[3729] = str->add("wrap");
22327strings[3730] = str->add("left_margin");
22328strings[3731] = str->add("right_margin");
22329strings[3732] = str->add("underline");
22330strings[3733] = str->add("strikethrough");
22331strings[3734] = str->add("backing");
22332strings[3735] = str->add("style");
22333strings[3736] = str->add("tabstops");
22334strings[3727] = str->add(strings[3727]);
22335strings[3737] = str->add("center");
22336str->del(strings[3727]);
22337str->del(strings[3737]);
22338strings[3718] = str->add(strings[3718]);
22339strings[3738] = str->add("#000");
22340str->del(strings[3718]);
22341str->del(strings[3738]);
22342strings[3735] = str->add(strings[3735]);
22343strings[3739] = str->add("shadow");
22344str->del(strings[3735]);
22345str->del(strings[3739]);
22346strings[3722] = str->add(strings[3722]);
22347strings[3740] = str->add("#ffffff80");
22348str->del(strings[3722]);
22349str->del(strings[3740]);
22350strings[3729] = str->add(strings[3729]);
22351strings[3741] = str->add("word");
22352str->del(strings[3729]);
22353str->del(strings[3741]);
22354strings[3717] = str->add(strings[3717]);
22355strings[469] = str->add(strings[469]);
22356strings[469] = str->add(strings[469]);
22357str->del(strings[3717]);
22358str->del(strings[469]);
22359strings[3716] = str->add(strings[3716]);
22360strings[3742] = str->add("10.000000");
22361str->del(strings[3716]);
22362str->del(strings[3742]);
22363strings[3714] = str->add(strings[3714]);
22364strings[470] = str->add(strings[470]);
22365strings[470] = str->add(strings[470]);
22366strings[470] = str->add(strings[470]);
22367strings[3743] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj/fonts/Edje-Vera");
22368str->del(strings[470]);
22369strings[470] = str->add(strings[470]);
22370strings[469] = str->add(strings[469]);
22371str->del(strings[3714]);
22372str->del(strings[470]);
22373strings[382] = str->add(strings[382]);
22374strings[382] = str->add(strings[382]);
22375strings[382] = str->add(strings[382]);
22376strings[382] = str->add(strings[382]);
22377strings[382] = str->add(strings[382]);
22378strings[382] = str->add(strings[382]);
22379strings[470] = str->add(strings[470]);
22380strings[469] = str->add(strings[469]);
22381strings[3735] = str->add(strings[3735]);
22382strings[3744] = str->add("glow");
22383str->del(strings[3735]);
22384str->del(strings[3744]);
22385strings[3718] = str->add(strings[3718]);
22386strings[3745] = str->add("#fff");
22387str->del(strings[3718]);
22388str->del(strings[3745]);
22389strings[3724] = str->add(strings[3724]);
22390strings[3746] = str->add("#fe87");
22391str->del(strings[3724]);
22392str->del(strings[3746]);
22393strings[3723] = str->add(strings[3723]);
22394strings[3747] = str->add("#fa14");
22395str->del(strings[3723]);
22396str->del(strings[3747]);
22397strings[3714] = str->add(strings[3714]);
22398strings[471] = str->add(strings[471]);
22399str->del(strings[470]);
22400strings[471] = str->add(strings[471]);
22401str->del(strings[3714]);
22402str->del(strings[471]);
22403strings[470] = str->add(strings[470]);
22404strings[469] = str->add(strings[469]);
22405strings[3735] = str->add(strings[3735]);
22406strings[3748] = str->add("glow");
22407str->del(strings[3735]);
22408str->del(strings[3748]);
22409strings[3718] = str->add(strings[3718]);
22410strings[3749] = str->add("#fff");
22411str->del(strings[3718]);
22412str->del(strings[3749]);
22413strings[3724] = str->add(strings[3724]);
22414strings[3750] = str->add("#fe87");
22415str->del(strings[3724]);
22416str->del(strings[3750]);
22417strings[3723] = str->add(strings[3723]);
22418strings[3751] = str->add("#fa14");
22419str->del(strings[3723]);
22420str->del(strings[3751]);
22421strings[3714] = str->add(strings[3714]);
22422strings[471] = str->add(strings[471]);
22423str->del(strings[470]);
22424strings[471] = str->add(strings[471]);
22425str->del(strings[3714]);
22426str->del(strings[471]);
22427strings[3714] = str->add(strings[3714]);
22428strings[3715] = str->add(strings[3715]);
22429strings[3716] = str->add(strings[3716]);
22430strings[3717] = str->add(strings[3717]);
22431strings[3718] = str->add(strings[3718]);
22432strings[3719] = str->add(strings[3719]);
22433strings[3720] = str->add(strings[3720]);
22434strings[3721] = str->add(strings[3721]);
22435strings[3722] = str->add(strings[3722]);
22436strings[3723] = str->add(strings[3723]);
22437strings[3724] = str->add(strings[3724]);
22438strings[3725] = str->add(strings[3725]);
22439strings[3726] = str->add(strings[3726]);
22440strings[3727] = str->add(strings[3727]);
22441strings[3728] = str->add(strings[3728]);
22442strings[3729] = str->add(strings[3729]);
22443strings[3730] = str->add(strings[3730]);
22444strings[3731] = str->add(strings[3731]);
22445strings[3732] = str->add(strings[3732]);
22446strings[3733] = str->add(strings[3733]);
22447strings[3734] = str->add(strings[3734]);
22448strings[3735] = str->add(strings[3735]);
22449strings[3736] = str->add(strings[3736]);
22450strings[3727] = str->add(strings[3727]);
22451strings[3752] = str->add("center");
22452str->del(strings[3727]);
22453str->del(strings[3752]);
22454strings[3718] = str->add(strings[3718]);
22455strings[3753] = str->add("#000");
22456str->del(strings[3718]);
22457str->del(strings[3753]);
22458strings[3735] = str->add(strings[3735]);
22459strings[3754] = str->add("shadow");
22460str->del(strings[3735]);
22461str->del(strings[3754]);
22462strings[3722] = str->add(strings[3722]);
22463strings[3755] = str->add("#ffffff80");
22464str->del(strings[3722]);
22465str->del(strings[3755]);
22466strings[3729] = str->add(strings[3729]);
22467strings[3756] = str->add("word");
22468str->del(strings[3729]);
22469str->del(strings[3756]);
22470strings[3717] = str->add(strings[3717]);
22471strings[469] = str->add(strings[469]);
22472strings[469] = str->add(strings[469]);
22473str->del(strings[3717]);
22474str->del(strings[469]);
22475strings[3716] = str->add(strings[3716]);
22476strings[3757] = str->add("10.000000");
22477str->del(strings[3716]);
22478str->del(strings[3757]);
22479strings[3714] = str->add(strings[3714]);
22480strings[470] = str->add(strings[470]);
22481strings[470] = str->add(strings[470]);
22482str->del(strings[3714]);
22483str->del(strings[470]);
22484strings[382] = str->add(strings[382]);
22485strings[382] = str->add(strings[382]);
22486strings[382] = str->add(strings[382]);
22487strings[382] = str->add(strings[382]);
22488strings[382] = str->add(strings[382]);
22489strings[382] = str->add(strings[382]);
22490strings[470] = str->add(strings[470]);
22491strings[469] = str->add(strings[469]);
22492strings[3735] = str->add(strings[3735]);
22493strings[3758] = str->add("glow");
22494str->del(strings[3735]);
22495str->del(strings[3758]);
22496strings[3718] = str->add(strings[3718]);
22497strings[3759] = str->add("#fff");
22498str->del(strings[3718]);
22499str->del(strings[3759]);
22500strings[3724] = str->add(strings[3724]);
22501strings[3760] = str->add("#fe87");
22502str->del(strings[3724]);
22503str->del(strings[3760]);
22504strings[3723] = str->add(strings[3723]);
22505strings[3761] = str->add("#fa14");
22506str->del(strings[3723]);
22507str->del(strings[3761]);
22508strings[3714] = str->add(strings[3714]);
22509strings[471] = str->add(strings[471]);
22510str->del(strings[470]);
22511strings[471] = str->add(strings[471]);
22512str->del(strings[3714]);
22513str->del(strings[471]);
22514strings[470] = str->add(strings[470]);
22515strings[469] = str->add(strings[469]);
22516strings[3735] = str->add(strings[3735]);
22517strings[3762] = str->add("glow");
22518str->del(strings[3735]);
22519str->del(strings[3762]);
22520strings[3718] = str->add(strings[3718]);
22521strings[3763] = str->add("#fff");
22522str->del(strings[3718]);
22523str->del(strings[3763]);
22524strings[3724] = str->add(strings[3724]);
22525strings[3764] = str->add("#fe87");
22526str->del(strings[3724]);
22527str->del(strings[3764]);
22528strings[3723] = str->add(strings[3723]);
22529strings[3765] = str->add("#fa14");
22530str->del(strings[3723]);
22531str->del(strings[3765]);
22532strings[3714] = str->add(strings[3714]);
22533strings[471] = str->add(strings[471]);
22534str->del(strings[470]);
22535strings[471] = str->add(strings[471]);
22536str->del(strings[3714]);
22537str->del(strings[471]);
22538str->del(strings[3714]);
22539str->del(strings[3715]);
22540str->del(strings[3716]);
22541str->del(strings[3717]);
22542str->del(strings[3718]);
22543str->del(strings[3719]);
22544str->del(strings[3720]);
22545str->del(strings[3721]);
22546str->del(strings[3722]);
22547str->del(strings[3723]);
22548str->del(strings[3724]);
22549str->del(strings[3725]);
22550str->del(strings[3726]);
22551str->del(strings[3727]);
22552str->del(strings[3728]);
22553str->del(strings[3729]);
22554str->del(strings[3730]);
22555str->del(strings[3731]);
22556str->del(strings[3732]);
22557str->del(strings[3733]);
22558str->del(strings[3734]);
22559str->del(strings[3735]);
22560str->del(strings[3736]);
22561str->del(strings[382]);
22562str->del(strings[382]);
22563str->del(strings[382]);
22564str->del(strings[382]);
22565str->del(strings[382]);
22566str->del(strings[382]);
22567str->del(strings[471]);
22568str->del(strings[469]);
22569str->del(strings[470]);
22570str->del(strings[469]);
22571str->del(strings[471]);
22572str->del(strings[469]);
22573str->del(strings[3714]);
22574str->del(strings[3715]);
22575str->del(strings[3716]);
22576str->del(strings[3717]);
22577str->del(strings[3718]);
22578str->del(strings[3719]);
22579str->del(strings[3720]);
22580str->del(strings[3721]);
22581str->del(strings[3722]);
22582str->del(strings[3723]);
22583str->del(strings[3724]);
22584str->del(strings[3725]);
22585str->del(strings[3726]);
22586str->del(strings[3727]);
22587str->del(strings[3728]);
22588str->del(strings[3729]);
22589str->del(strings[3730]);
22590str->del(strings[3731]);
22591str->del(strings[3732]);
22592str->del(strings[3733]);
22593str->del(strings[3734]);
22594str->del(strings[3735]);
22595str->del(strings[3736]);
22596str->del(strings[469]);
22597strings[379] = str->add(strings[379]);
22598strings[3766] = str->add("Sans:style=Bold");
22599strings[3767] = str->add("Edje-Vera-Bold");
22600str->del(strings[3766]);
22601str->del(strings[3767]);
22602strings[379] = str->add(strings[379]);
22603strings[1712] = str->add(strings[1712]);
22604str->del(strings[469]);
22605strings[379] = str->add(strings[379]);
22606strings[3768] = str->add("Sans:style=Bold");
22607strings[3769] = str->add("Edje-Vera-Bold");
22608str->del(strings[3768]);
22609str->del(strings[3769]);
22610strings[379] = str->add(strings[379]);
22611strings[3710] = str->add(strings[3710]);
22612strings[3770] = str->add("font");
22613strings[3771] = str->add("font_fallbacks");
22614strings[3772] = str->add("font_size");
22615strings[3773] = str->add("font_source");
22616strings[3774] = str->add("color");
22617strings[3775] = str->add("underline_color");
22618strings[3776] = str->add("underline2_color");
22619strings[3777] = str->add("outline_color");
22620strings[3778] = str->add("shadow_color");
22621strings[3779] = str->add("glow_color");
22622strings[3780] = str->add("glow2_color");
22623strings[3781] = str->add("backing_color");
22624strings[3782] = str->add("strikethrough_color");
22625strings[3783] = str->add("align");
22626strings[3784] = str->add("valign");
22627strings[3785] = str->add("wrap");
22628strings[3786] = str->add("left_margin");
22629strings[3787] = str->add("right_margin");
22630strings[3788] = str->add("underline");
22631strings[3789] = str->add("strikethrough");
22632strings[3790] = str->add("backing");
22633strings[3791] = str->add("style");
22634strings[3792] = str->add("tabstops");
22635strings[3783] = str->add(strings[3783]);
22636strings[3793] = str->add("center");
22637str->del(strings[3783]);
22638str->del(strings[3793]);
22639strings[3774] = str->add(strings[3774]);
22640strings[3794] = str->add("#000");
22641str->del(strings[3774]);
22642str->del(strings[3794]);
22643strings[3791] = str->add(strings[3791]);
22644strings[3795] = str->add("shadow");
22645str->del(strings[3791]);
22646str->del(strings[3795]);
22647strings[3778] = str->add(strings[3778]);
22648strings[3796] = str->add("#ffffff80");
22649str->del(strings[3778]);
22650str->del(strings[3796]);
22651strings[3785] = str->add(strings[3785]);
22652strings[3797] = str->add("word");
22653str->del(strings[3785]);
22654str->del(strings[3797]);
22655strings[3773] = str->add(strings[3773]);
22656strings[469] = str->add(strings[469]);
22657strings[469] = str->add(strings[469]);
22658str->del(strings[3773]);
22659str->del(strings[469]);
22660strings[3772] = str->add(strings[3772]);
22661strings[3798] = str->add("10.000000");
22662str->del(strings[3772]);
22663str->del(strings[3798]);
22664strings[3770] = str->add(strings[3770]);
22665strings[470] = str->add(strings[470]);
22666strings[470] = str->add(strings[470]);
22667str->del(strings[3770]);
22668str->del(strings[470]);
22669strings[470] = str->add(strings[470]);
22670strings[469] = str->add(strings[469]);
22671strings[3791] = str->add(strings[3791]);
22672strings[3799] = str->add("soft_shadow");
22673str->del(strings[3791]);
22674str->del(strings[3799]);
22675strings[3774] = str->add(strings[3774]);
22676strings[3800] = str->add("#fff");
22677str->del(strings[3774]);
22678str->del(strings[3800]);
22679strings[3778] = str->add(strings[3778]);
22680strings[3801] = str->add("#00000020");
22681str->del(strings[3778]);
22682str->del(strings[3801]);
22683strings[3772] = str->add(strings[3772]);
22684strings[3802] = str->add("12.000000");
22685strings[470] = str->add(strings[470]);
22686str->del(strings[470]);
22687strings[470] = str->add(strings[470]);
22688strings[469] = str->add(strings[469]);
22689str->del(strings[3772]);
22690str->del(strings[3802]);
22691strings[3770] = str->add(strings[3770]);
22692strings[471] = str->add(strings[471]);
22693str->del(strings[470]);
22694strings[471] = str->add(strings[471]);
22695strings[471] = str->add(strings[471]);
22696str->del(strings[471]);
22697strings[471] = str->add(strings[471]);
22698strings[469] = str->add(strings[469]);
22699str->del(strings[3770]);
22700str->del(strings[471]);
22701strings[382] = str->add(strings[382]);
22702strings[382] = str->add(strings[382]);
22703strings[382] = str->add(strings[382]);
22704strings[382] = str->add(strings[382]);
22705strings[382] = str->add(strings[382]);
22706strings[382] = str->add(strings[382]);
22707strings[382] = str->add(strings[382]);
22708strings[382] = str->add(strings[382]);
22709strings[382] = str->add(strings[382]);
22710strings[382] = str->add(strings[382]);
22711strings[382] = str->add(strings[382]);
22712strings[382] = str->add(strings[382]);
22713strings[382] = str->add(strings[382]);
22714strings[382] = str->add(strings[382]);
22715strings[382] = str->add(strings[382]);
22716strings[382] = str->add(strings[382]);
22717strings[382] = str->add(strings[382]);
22718strings[382] = str->add(strings[382]);
22719strings[382] = str->add(strings[382]);
22720strings[382] = str->add(strings[382]);
22721strings[382] = str->add(strings[382]);
22722strings[382] = str->add(strings[382]);
22723strings[3770] = str->add(strings[3770]);
22724strings[3771] = str->add(strings[3771]);
22725strings[3772] = str->add(strings[3772]);
22726strings[3773] = str->add(strings[3773]);
22727strings[3774] = str->add(strings[3774]);
22728strings[3775] = str->add(strings[3775]);
22729strings[3776] = str->add(strings[3776]);
22730strings[3777] = str->add(strings[3777]);
22731strings[3778] = str->add(strings[3778]);
22732strings[3779] = str->add(strings[3779]);
22733strings[3780] = str->add(strings[3780]);
22734strings[3781] = str->add(strings[3781]);
22735strings[3782] = str->add(strings[3782]);
22736strings[3783] = str->add(strings[3783]);
22737strings[3784] = str->add(strings[3784]);
22738strings[3785] = str->add(strings[3785]);
22739strings[3786] = str->add(strings[3786]);
22740strings[3787] = str->add(strings[3787]);
22741strings[3788] = str->add(strings[3788]);
22742strings[3789] = str->add(strings[3789]);
22743strings[3790] = str->add(strings[3790]);
22744strings[3791] = str->add(strings[3791]);
22745strings[3792] = str->add(strings[3792]);
22746strings[3783] = str->add(strings[3783]);
22747strings[3803] = str->add("center");
22748str->del(strings[3783]);
22749str->del(strings[3803]);
22750strings[3774] = str->add(strings[3774]);
22751strings[3804] = str->add("#000");
22752str->del(strings[3774]);
22753str->del(strings[3804]);
22754strings[3791] = str->add(strings[3791]);
22755strings[3805] = str->add("shadow");
22756str->del(strings[3791]);
22757str->del(strings[3805]);
22758strings[3778] = str->add(strings[3778]);
22759strings[3806] = str->add("#ffffff80");
22760str->del(strings[3778]);
22761str->del(strings[3806]);
22762strings[3785] = str->add(strings[3785]);
22763strings[3807] = str->add("word");
22764str->del(strings[3785]);
22765str->del(strings[3807]);
22766strings[3773] = str->add(strings[3773]);
22767strings[469] = str->add(strings[469]);
22768strings[469] = str->add(strings[469]);
22769str->del(strings[3773]);
22770str->del(strings[469]);
22771strings[3772] = str->add(strings[3772]);
22772strings[3808] = str->add("10.000000");
22773str->del(strings[3772]);
22774str->del(strings[3808]);
22775strings[3770] = str->add(strings[3770]);
22776strings[470] = str->add(strings[470]);
22777strings[470] = str->add(strings[470]);
22778str->del(strings[3770]);
22779str->del(strings[470]);
22780strings[470] = str->add(strings[470]);
22781strings[469] = str->add(strings[469]);
22782strings[3791] = str->add(strings[3791]);
22783strings[3809] = str->add("soft_shadow");
22784str->del(strings[3791]);
22785str->del(strings[3809]);
22786strings[3774] = str->add(strings[3774]);
22787strings[3810] = str->add("#fff");
22788str->del(strings[3774]);
22789str->del(strings[3810]);
22790strings[3778] = str->add(strings[3778]);
22791strings[3811] = str->add("#00000020");
22792str->del(strings[3778]);
22793str->del(strings[3811]);
22794strings[3772] = str->add(strings[3772]);
22795strings[3812] = str->add("12.000000");
22796str->del(strings[3772]);
22797str->del(strings[3812]);
22798strings[3770] = str->add(strings[3770]);
22799strings[471] = str->add(strings[471]);
22800str->del(strings[470]);
22801strings[471] = str->add(strings[471]);
22802str->del(strings[3770]);
22803str->del(strings[471]);
22804strings[382] = str->add(strings[382]);
22805strings[382] = str->add(strings[382]);
22806strings[382] = str->add(strings[382]);
22807strings[382] = str->add(strings[382]);
22808strings[382] = str->add(strings[382]);
22809strings[382] = str->add(strings[382]);
22810strings[382] = str->add(strings[382]);
22811strings[382] = str->add(strings[382]);
22812strings[382] = str->add(strings[382]);
22813strings[382] = str->add(strings[382]);
22814strings[382] = str->add(strings[382]);
22815strings[382] = str->add(strings[382]);
22816strings[382] = str->add(strings[382]);
22817strings[382] = str->add(strings[382]);
22818strings[382] = str->add(strings[382]);
22819strings[382] = str->add(strings[382]);
22820strings[382] = str->add(strings[382]);
22821strings[382] = str->add(strings[382]);
22822strings[382] = str->add(strings[382]);
22823strings[382] = str->add(strings[382]);
22824strings[382] = str->add(strings[382]);
22825strings[382] = str->add(strings[382]);
22826str->del(strings[471]);
22827str->del(strings[469]);
22828str->del(strings[382]);
22829str->del(strings[382]);
22830str->del(strings[382]);
22831str->del(strings[382]);
22832str->del(strings[382]);
22833str->del(strings[382]);
22834str->del(strings[382]);
22835str->del(strings[382]);
22836str->del(strings[382]);
22837str->del(strings[382]);
22838str->del(strings[382]);
22839str->del(strings[382]);
22840str->del(strings[382]);
22841str->del(strings[382]);
22842str->del(strings[382]);
22843str->del(strings[382]);
22844str->del(strings[382]);
22845str->del(strings[382]);
22846str->del(strings[382]);
22847str->del(strings[382]);
22848str->del(strings[382]);
22849str->del(strings[470]);
22850str->del(strings[469]);
22851str->del(strings[382]);
22852str->del(strings[3770]);
22853str->del(strings[3771]);
22854str->del(strings[3772]);
22855str->del(strings[3773]);
22856str->del(strings[3774]);
22857str->del(strings[3775]);
22858str->del(strings[3776]);
22859str->del(strings[3777]);
22860str->del(strings[3778]);
22861str->del(strings[3779]);
22862str->del(strings[3780]);
22863str->del(strings[3781]);
22864str->del(strings[3782]);
22865str->del(strings[3783]);
22866str->del(strings[3784]);
22867str->del(strings[3785]);
22868str->del(strings[3786]);
22869str->del(strings[3787]);
22870str->del(strings[3788]);
22871str->del(strings[3789]);
22872str->del(strings[3790]);
22873str->del(strings[3791]);
22874str->del(strings[3792]);
22875str->del(strings[471]);
22876str->del(strings[469]);
22877str->del(strings[382]);
22878str->del(strings[382]);
22879str->del(strings[382]);
22880str->del(strings[382]);
22881str->del(strings[382]);
22882str->del(strings[382]);
22883str->del(strings[382]);
22884str->del(strings[382]);
22885str->del(strings[382]);
22886str->del(strings[382]);
22887str->del(strings[382]);
22888str->del(strings[382]);
22889str->del(strings[382]);
22890str->del(strings[382]);
22891str->del(strings[382]);
22892str->del(strings[382]);
22893str->del(strings[382]);
22894str->del(strings[382]);
22895str->del(strings[382]);
22896str->del(strings[382]);
22897str->del(strings[382]);
22898str->del(strings[470]);
22899str->del(strings[469]);
22900str->del(strings[382]);
22901str->del(strings[3770]);
22902str->del(strings[3771]);
22903str->del(strings[3772]);
22904str->del(strings[3773]);
22905str->del(strings[3774]);
22906str->del(strings[3775]);
22907str->del(strings[3776]);
22908str->del(strings[3777]);
22909str->del(strings[3778]);
22910str->del(strings[3779]);
22911str->del(strings[3780]);
22912str->del(strings[3781]);
22913str->del(strings[3782]);
22914str->del(strings[3783]);
22915str->del(strings[3784]);
22916str->del(strings[3785]);
22917str->del(strings[3786]);
22918str->del(strings[3787]);
22919str->del(strings[3788]);
22920str->del(strings[3789]);
22921str->del(strings[3790]);
22922str->del(strings[3791]);
22923str->del(strings[3792]);
22924strings[3813] = str->add("font");
22925strings[3814] = str->add("font_fallbacks");
22926strings[3815] = str->add("font_size");
22927strings[3816] = str->add("font_source");
22928strings[3817] = str->add("color");
22929strings[3818] = str->add("underline_color");
22930strings[3819] = str->add("underline2_color");
22931strings[3820] = str->add("outline_color");
22932strings[3821] = str->add("shadow_color");
22933strings[3822] = str->add("glow_color");
22934strings[3823] = str->add("glow2_color");
22935strings[3824] = str->add("backing_color");
22936strings[3825] = str->add("strikethrough_color");
22937strings[3826] = str->add("align");
22938strings[3827] = str->add("valign");
22939strings[3828] = str->add("wrap");
22940strings[3829] = str->add("left_margin");
22941strings[3830] = str->add("right_margin");
22942strings[3831] = str->add("underline");
22943strings[3832] = str->add("strikethrough");
22944strings[3833] = str->add("backing");
22945strings[3834] = str->add("style");
22946strings[3835] = str->add("tabstops");
22947strings[3826] = str->add(strings[3826]);
22948strings[3836] = str->add("center");
22949str->del(strings[3826]);
22950str->del(strings[3836]);
22951strings[3817] = str->add(strings[3817]);
22952strings[3837] = str->add("#000");
22953str->del(strings[3817]);
22954str->del(strings[3837]);
22955strings[3834] = str->add(strings[3834]);
22956strings[3838] = str->add("shadow");
22957str->del(strings[3834]);
22958str->del(strings[3838]);
22959strings[3821] = str->add(strings[3821]);
22960strings[3839] = str->add("#ffffff80");
22961str->del(strings[3821]);
22962str->del(strings[3839]);
22963strings[3828] = str->add(strings[3828]);
22964strings[3840] = str->add("word");
22965str->del(strings[3828]);
22966str->del(strings[3840]);
22967strings[3816] = str->add(strings[3816]);
22968strings[469] = str->add(strings[469]);
22969strings[469] = str->add(strings[469]);
22970str->del(strings[3816]);
22971str->del(strings[469]);
22972strings[3815] = str->add(strings[3815]);
22973strings[3841] = str->add("10.000000");
22974str->del(strings[3815]);
22975str->del(strings[3841]);
22976strings[3813] = str->add(strings[3813]);
22977strings[470] = str->add(strings[470]);
22978strings[470] = str->add(strings[470]);
22979str->del(strings[3813]);
22980str->del(strings[470]);
22981strings[470] = str->add(strings[470]);
22982strings[469] = str->add(strings[469]);
22983strings[3834] = str->add(strings[3834]);
22984strings[3842] = str->add("soft_shadow");
22985str->del(strings[3834]);
22986str->del(strings[3842]);
22987strings[3817] = str->add(strings[3817]);
22988strings[3843] = str->add("#fff");
22989str->del(strings[3817]);
22990str->del(strings[3843]);
22991strings[3821] = str->add(strings[3821]);
22992strings[3844] = str->add("#00000020");
22993str->del(strings[3821]);
22994str->del(strings[3844]);
22995strings[3815] = str->add(strings[3815]);
22996strings[3845] = str->add("12.000000");
22997str->del(strings[3815]);
22998str->del(strings[3845]);
22999strings[3813] = str->add(strings[3813]);
23000strings[471] = str->add(strings[471]);
23001str->del(strings[470]);
23002strings[471] = str->add(strings[471]);
23003str->del(strings[3813]);
23004str->del(strings[471]);
23005strings[382] = str->add(strings[382]);
23006strings[382] = str->add(strings[382]);
23007strings[382] = str->add(strings[382]);
23008strings[382] = str->add(strings[382]);
23009strings[382] = str->add(strings[382]);
23010strings[382] = str->add(strings[382]);
23011strings[382] = str->add(strings[382]);
23012strings[382] = str->add(strings[382]);
23013strings[382] = str->add(strings[382]);
23014strings[382] = str->add(strings[382]);
23015strings[382] = str->add(strings[382]);
23016strings[382] = str->add(strings[382]);
23017strings[382] = str->add(strings[382]);
23018strings[382] = str->add(strings[382]);
23019strings[382] = str->add(strings[382]);
23020strings[382] = str->add(strings[382]);
23021strings[382] = str->add(strings[382]);
23022strings[382] = str->add(strings[382]);
23023strings[382] = str->add(strings[382]);
23024strings[382] = str->add(strings[382]);
23025strings[382] = str->add(strings[382]);
23026strings[382] = str->add(strings[382]);
23027str->del(strings[3813]);
23028str->del(strings[3814]);
23029str->del(strings[3815]);
23030str->del(strings[3816]);
23031str->del(strings[3817]);
23032str->del(strings[3818]);
23033str->del(strings[3819]);
23034str->del(strings[3820]);
23035str->del(strings[3821]);
23036str->del(strings[3822]);
23037str->del(strings[3823]);
23038str->del(strings[3824]);
23039str->del(strings[3825]);
23040str->del(strings[3826]);
23041str->del(strings[3827]);
23042str->del(strings[3828]);
23043str->del(strings[3829]);
23044str->del(strings[3830]);
23045str->del(strings[3831]);
23046str->del(strings[3832]);
23047str->del(strings[3833]);
23048str->del(strings[3834]);
23049str->del(strings[3835]);
23050strings[3846] = str->add("font");
23051strings[3847] = str->add("font_fallbacks");
23052strings[3848] = str->add("font_size");
23053strings[3849] = str->add("font_source");
23054strings[3850] = str->add("color");
23055strings[3851] = str->add("underline_color");
23056strings[3852] = str->add("underline2_color");
23057strings[3853] = str->add("outline_color");
23058strings[3854] = str->add("shadow_color");
23059strings[3855] = str->add("glow_color");
23060strings[3856] = str->add("glow2_color");
23061strings[3857] = str->add("backing_color");
23062strings[3858] = str->add("strikethrough_color");
23063strings[3859] = str->add("align");
23064strings[3860] = str->add("valign");
23065strings[3861] = str->add("wrap");
23066strings[3862] = str->add("left_margin");
23067strings[3863] = str->add("right_margin");
23068strings[3864] = str->add("underline");
23069strings[3865] = str->add("strikethrough");
23070strings[3866] = str->add("backing");
23071strings[3867] = str->add("style");
23072strings[3868] = str->add("tabstops");
23073strings[3859] = str->add(strings[3859]);
23074strings[3869] = str->add("center");
23075str->del(strings[3859]);
23076str->del(strings[3869]);
23077strings[3850] = str->add(strings[3850]);
23078strings[3870] = str->add("#000");
23079str->del(strings[3850]);
23080str->del(strings[3870]);
23081strings[3867] = str->add(strings[3867]);
23082strings[3871] = str->add("shadow");
23083str->del(strings[3867]);
23084str->del(strings[3871]);
23085strings[3854] = str->add(strings[3854]);
23086strings[3872] = str->add("#ffffff80");
23087str->del(strings[3854]);
23088str->del(strings[3872]);
23089strings[3861] = str->add(strings[3861]);
23090strings[3873] = str->add("word");
23091str->del(strings[3861]);
23092str->del(strings[3873]);
23093strings[3849] = str->add(strings[3849]);
23094strings[469] = str->add(strings[469]);
23095strings[469] = str->add(strings[469]);
23096str->del(strings[3849]);
23097str->del(strings[469]);
23098strings[3848] = str->add(strings[3848]);
23099strings[3874] = str->add("10.000000");
23100str->del(strings[3848]);
23101str->del(strings[3874]);
23102strings[3846] = str->add(strings[3846]);
23103strings[470] = str->add(strings[470]);
23104strings[470] = str->add(strings[470]);
23105str->del(strings[3846]);
23106str->del(strings[470]);
23107strings[470] = str->add(strings[470]);
23108strings[469] = str->add(strings[469]);
23109strings[3867] = str->add(strings[3867]);
23110strings[3875] = str->add("soft_shadow");
23111str->del(strings[3867]);
23112str->del(strings[3875]);
23113strings[3850] = str->add(strings[3850]);
23114strings[3876] = str->add("#fff");
23115str->del(strings[3850]);
23116str->del(strings[3876]);
23117strings[3854] = str->add(strings[3854]);
23118strings[3877] = str->add("#00000020");
23119str->del(strings[3854]);
23120str->del(strings[3877]);
23121strings[3848] = str->add(strings[3848]);
23122strings[3878] = str->add("12.000000");
23123str->del(strings[3848]);
23124str->del(strings[3878]);
23125strings[3846] = str->add(strings[3846]);
23126strings[471] = str->add(strings[471]);
23127str->del(strings[470]);
23128strings[471] = str->add(strings[471]);
23129str->del(strings[3846]);
23130str->del(strings[471]);
23131strings[382] = str->add(strings[382]);
23132strings[382] = str->add(strings[382]);
23133strings[382] = str->add(strings[382]);
23134strings[382] = str->add(strings[382]);
23135strings[382] = str->add(strings[382]);
23136strings[382] = str->add(strings[382]);
23137strings[382] = str->add(strings[382]);
23138strings[382] = str->add(strings[382]);
23139strings[382] = str->add(strings[382]);
23140strings[382] = str->add(strings[382]);
23141strings[382] = str->add(strings[382]);
23142strings[382] = str->add(strings[382]);
23143strings[382] = str->add(strings[382]);
23144strings[382] = str->add(strings[382]);
23145strings[382] = str->add(strings[382]);
23146strings[382] = str->add(strings[382]);
23147strings[382] = str->add(strings[382]);
23148strings[382] = str->add(strings[382]);
23149strings[382] = str->add(strings[382]);
23150strings[382] = str->add(strings[382]);
23151strings[382] = str->add(strings[382]);
23152strings[382] = str->add(strings[382]);
23153str->del(strings[471]);
23154str->del(strings[469]);
23155str->del(strings[382]);
23156str->del(strings[382]);
23157str->del(strings[382]);
23158str->del(strings[382]);
23159str->del(strings[382]);
23160str->del(strings[382]);
23161str->del(strings[382]);
23162str->del(strings[382]);
23163str->del(strings[382]);
23164str->del(strings[382]);
23165str->del(strings[382]);
23166str->del(strings[382]);
23167str->del(strings[382]);
23168str->del(strings[382]);
23169str->del(strings[382]);
23170str->del(strings[382]);
23171str->del(strings[382]);
23172str->del(strings[382]);
23173str->del(strings[382]);
23174str->del(strings[382]);
23175str->del(strings[382]);
23176str->del(strings[470]);
23177str->del(strings[469]);
23178str->del(strings[382]);
23179str->del(strings[3846]);
23180str->del(strings[3847]);
23181str->del(strings[3848]);
23182str->del(strings[3849]);
23183str->del(strings[3850]);
23184str->del(strings[3851]);
23185str->del(strings[3852]);
23186str->del(strings[3853]);
23187str->del(strings[3854]);
23188str->del(strings[3855]);
23189str->del(strings[3856]);
23190str->del(strings[3857]);
23191str->del(strings[3858]);
23192str->del(strings[3859]);
23193str->del(strings[3860]);
23194str->del(strings[3861]);
23195str->del(strings[3862]);
23196str->del(strings[3863]);
23197str->del(strings[3864]);
23198str->del(strings[3865]);
23199str->del(strings[3866]);
23200str->del(strings[3867]);
23201str->del(strings[3868]);
23202strings[470] = str->add(strings[470]);
23203strings[3879] = str->add("OK");
23204strings[3880] = str->add("font");
23205strings[3881] = str->add("font_fallbacks");
23206strings[3882] = str->add("font_size");
23207strings[3883] = str->add("font_source");
23208strings[3884] = str->add("color");
23209strings[3885] = str->add("underline_color");
23210strings[3886] = str->add("underline2_color");
23211strings[3887] = str->add("outline_color");
23212strings[3888] = str->add("shadow_color");
23213strings[3889] = str->add("glow_color");
23214strings[3890] = str->add("glow2_color");
23215strings[3891] = str->add("backing_color");
23216strings[3892] = str->add("strikethrough_color");
23217strings[3893] = str->add("align");
23218strings[3894] = str->add("valign");
23219strings[3895] = str->add("wrap");
23220strings[3896] = str->add("left_margin");
23221strings[3897] = str->add("right_margin");
23222strings[3898] = str->add("underline");
23223strings[3899] = str->add("strikethrough");
23224strings[3900] = str->add("backing");
23225strings[3901] = str->add("style");
23226strings[3902] = str->add("tabstops");
23227strings[3893] = str->add(strings[3893]);
23228strings[3903] = str->add("center");
23229str->del(strings[3893]);
23230str->del(strings[3903]);
23231strings[3884] = str->add(strings[3884]);
23232strings[3904] = str->add("#000");
23233str->del(strings[3884]);
23234str->del(strings[3904]);
23235strings[3901] = str->add(strings[3901]);
23236strings[3905] = str->add("shadow");
23237str->del(strings[3901]);
23238str->del(strings[3905]);
23239strings[3888] = str->add(strings[3888]);
23240strings[3906] = str->add("#ffffff80");
23241str->del(strings[3888]);
23242str->del(strings[3906]);
23243strings[3895] = str->add(strings[3895]);
23244strings[3907] = str->add("word");
23245str->del(strings[3895]);
23246str->del(strings[3907]);
23247strings[3883] = str->add(strings[3883]);
23248strings[469] = str->add(strings[469]);
23249strings[469] = str->add(strings[469]);
23250str->del(strings[3883]);
23251str->del(strings[469]);
23252strings[3882] = str->add(strings[3882]);
23253strings[3908] = str->add("10.000000");
23254str->del(strings[3882]);
23255str->del(strings[3908]);
23256strings[3880] = str->add(strings[3880]);
23257strings[470] = str->add(strings[470]);
23258strings[470] = str->add(strings[470]);
23259str->del(strings[3880]);
23260str->del(strings[470]);
23261strings[382] = str->add(strings[382]);
23262strings[382] = str->add(strings[382]);
23263strings[382] = str->add(strings[382]);
23264strings[382] = str->add(strings[382]);
23265strings[382] = str->add(strings[382]);
23266strings[382] = str->add(strings[382]);
23267strings[470] = str->add(strings[470]);
23268strings[469] = str->add(strings[469]);
23269strings[3901] = str->add(strings[3901]);
23270strings[3909] = str->add("glow");
23271str->del(strings[3901]);
23272str->del(strings[3909]);
23273strings[3884] = str->add(strings[3884]);
23274strings[3910] = str->add("#fff");
23275str->del(strings[3884]);
23276str->del(strings[3910]);
23277strings[3890] = str->add(strings[3890]);
23278strings[3911] = str->add("#fe87");
23279str->del(strings[3890]);
23280str->del(strings[3911]);
23281strings[3889] = str->add(strings[3889]);
23282strings[3912] = str->add("#fa14");
23283str->del(strings[3889]);
23284str->del(strings[3912]);
23285strings[3880] = str->add(strings[3880]);
23286strings[471] = str->add(strings[471]);
23287str->del(strings[470]);
23288strings[471] = str->add(strings[471]);
23289str->del(strings[3880]);
23290str->del(strings[471]);
23291strings[470] = str->add(strings[470]);
23292strings[469] = str->add(strings[469]);
23293strings[3901] = str->add(strings[3901]);
23294strings[3913] = str->add("glow");
23295str->del(strings[3901]);
23296str->del(strings[3913]);
23297strings[3884] = str->add(strings[3884]);
23298strings[3914] = str->add("#fff");
23299str->del(strings[3884]);
23300str->del(strings[3914]);
23301strings[3890] = str->add(strings[3890]);
23302strings[3915] = str->add("#fe87");
23303str->del(strings[3890]);
23304str->del(strings[3915]);
23305strings[3889] = str->add(strings[3889]);
23306strings[3916] = str->add("#fa14");
23307str->del(strings[3889]);
23308str->del(strings[3916]);
23309strings[3880] = str->add(strings[3880]);
23310strings[471] = str->add(strings[471]);
23311str->del(strings[470]);
23312strings[471] = str->add(strings[471]);
23313str->del(strings[3880]);
23314str->del(strings[471]);
23315str->del(strings[3880]);
23316str->del(strings[3881]);
23317str->del(strings[3882]);
23318str->del(strings[3883]);
23319str->del(strings[3884]);
23320str->del(strings[3885]);
23321str->del(strings[3886]);
23322str->del(strings[3887]);
23323str->del(strings[3888]);
23324str->del(strings[3889]);
23325str->del(strings[3890]);
23326str->del(strings[3891]);
23327str->del(strings[3892]);
23328str->del(strings[3893]);
23329str->del(strings[3894]);
23330str->del(strings[3895]);
23331str->del(strings[3896]);
23332str->del(strings[3897]);
23333str->del(strings[3898]);
23334str->del(strings[3899]);
23335str->del(strings[3900]);
23336str->del(strings[3901]);
23337str->del(strings[3902]);
23338str->del(strings[382]);
23339str->del(strings[382]);
23340str->del(strings[382]);
23341str->del(strings[382]);
23342str->del(strings[382]);
23343str->del(strings[382]);
23344str->del(strings[471]);
23345str->del(strings[469]);
23346str->del(strings[470]);
23347str->del(strings[469]);
23348str->del(strings[471]);
23349str->del(strings[469]);
23350strings[3917] = str->add("font");
23351strings[3918] = str->add("font_fallbacks");
23352strings[3919] = str->add("font_size");
23353strings[3920] = str->add("font_source");
23354strings[3921] = str->add("color");
23355strings[3922] = str->add("underline_color");
23356strings[3923] = str->add("underline2_color");
23357strings[3924] = str->add("outline_color");
23358strings[3925] = str->add("shadow_color");
23359strings[3926] = str->add("glow_color");
23360strings[3927] = str->add("glow2_color");
23361strings[3928] = str->add("backing_color");
23362strings[3929] = str->add("strikethrough_color");
23363strings[3930] = str->add("align");
23364strings[3931] = str->add("valign");
23365strings[3932] = str->add("wrap");
23366strings[3933] = str->add("left_margin");
23367strings[3934] = str->add("right_margin");
23368strings[3935] = str->add("underline");
23369strings[3936] = str->add("strikethrough");
23370strings[3937] = str->add("backing");
23371strings[3938] = str->add("style");
23372strings[3939] = str->add("tabstops");
23373strings[3930] = str->add(strings[3930]);
23374strings[3940] = str->add("center");
23375str->del(strings[3930]);
23376str->del(strings[3940]);
23377strings[3921] = str->add(strings[3921]);
23378strings[3941] = str->add("#000");
23379str->del(strings[3921]);
23380str->del(strings[3941]);
23381strings[3938] = str->add(strings[3938]);
23382strings[3942] = str->add("shadow");
23383str->del(strings[3938]);
23384str->del(strings[3942]);
23385strings[3925] = str->add(strings[3925]);
23386strings[3943] = str->add("#ffffff80");
23387str->del(strings[3925]);
23388str->del(strings[3943]);
23389strings[3932] = str->add(strings[3932]);
23390strings[3944] = str->add("word");
23391str->del(strings[3932]);
23392str->del(strings[3944]);
23393strings[3920] = str->add(strings[3920]);
23394strings[469] = str->add(strings[469]);
23395strings[469] = str->add(strings[469]);
23396str->del(strings[3920]);
23397str->del(strings[469]);
23398strings[3919] = str->add(strings[3919]);
23399strings[3945] = str->add("10.000000");
23400str->del(strings[3919]);
23401str->del(strings[3945]);
23402strings[3917] = str->add(strings[3917]);
23403strings[470] = str->add(strings[470]);
23404strings[470] = str->add(strings[470]);
23405str->del(strings[3917]);
23406str->del(strings[470]);
23407strings[382] = str->add(strings[382]);
23408strings[382] = str->add(strings[382]);
23409strings[382] = str->add(strings[382]);
23410strings[382] = str->add(strings[382]);
23411strings[382] = str->add(strings[382]);
23412strings[382] = str->add(strings[382]);
23413strings[470] = str->add(strings[470]);
23414strings[469] = str->add(strings[469]);
23415strings[3938] = str->add(strings[3938]);
23416strings[3946] = str->add("glow");
23417str->del(strings[3938]);
23418str->del(strings[3946]);
23419strings[3921] = str->add(strings[3921]);
23420strings[3947] = str->add("#fff");
23421str->del(strings[3921]);
23422str->del(strings[3947]);
23423strings[3927] = str->add(strings[3927]);
23424strings[3948] = str->add("#fe87");
23425str->del(strings[3927]);
23426str->del(strings[3948]);
23427strings[3926] = str->add(strings[3926]);
23428strings[3949] = str->add("#fa14");
23429str->del(strings[3926]);
23430str->del(strings[3949]);
23431strings[3917] = str->add(strings[3917]);
23432strings[471] = str->add(strings[471]);
23433str->del(strings[470]);
23434strings[471] = str->add(strings[471]);
23435str->del(strings[3917]);
23436str->del(strings[471]);
23437strings[470] = str->add(strings[470]);
23438strings[469] = str->add(strings[469]);
23439strings[3938] = str->add(strings[3938]);
23440strings[3950] = str->add("glow");
23441str->del(strings[3938]);
23442str->del(strings[3950]);
23443strings[3921] = str->add(strings[3921]);
23444strings[3951] = str->add("#fff");
23445str->del(strings[3921]);
23446str->del(strings[3951]);
23447strings[3927] = str->add(strings[3927]);
23448strings[3952] = str->add("#fe87");
23449str->del(strings[3927]);
23450str->del(strings[3952]);
23451strings[3926] = str->add(strings[3926]);
23452strings[3953] = str->add("#fa14");
23453str->del(strings[3926]);
23454str->del(strings[3953]);
23455strings[3917] = str->add(strings[3917]);
23456strings[471] = str->add(strings[471]);
23457str->del(strings[470]);
23458strings[471] = str->add(strings[471]);
23459str->del(strings[3917]);
23460str->del(strings[471]);
23461str->del(strings[3917]);
23462str->del(strings[3918]);
23463str->del(strings[3919]);
23464str->del(strings[3920]);
23465str->del(strings[3921]);
23466str->del(strings[3922]);
23467str->del(strings[3923]);
23468str->del(strings[3924]);
23469str->del(strings[3925]);
23470str->del(strings[3926]);
23471str->del(strings[3927]);
23472str->del(strings[3928]);
23473str->del(strings[3929]);
23474str->del(strings[3930]);
23475str->del(strings[3931]);
23476str->del(strings[3932]);
23477str->del(strings[3933]);
23478str->del(strings[3934]);
23479str->del(strings[3935]);
23480str->del(strings[3936]);
23481str->del(strings[3937]);
23482str->del(strings[3938]);
23483str->del(strings[3939]);
23484str->del(strings[382]);
23485str->del(strings[382]);
23486str->del(strings[382]);
23487str->del(strings[382]);
23488str->del(strings[382]);
23489str->del(strings[382]);
23490str->del(strings[471]);
23491str->del(strings[469]);
23492str->del(strings[470]);
23493str->del(strings[469]);
23494str->del(strings[471]);
23495str->del(strings[469]);
23496strings[3954] = str->add("font");
23497strings[3955] = str->add("font_fallbacks");
23498strings[3956] = str->add("font_size");
23499strings[3957] = str->add("font_source");
23500strings[3958] = str->add("color");
23501strings[3959] = str->add("underline_color");
23502strings[3960] = str->add("underline2_color");
23503strings[3961] = str->add("outline_color");
23504strings[3962] = str->add("shadow_color");
23505strings[3963] = str->add("glow_color");
23506strings[3964] = str->add("glow2_color");
23507strings[3965] = str->add("backing_color");
23508strings[3966] = str->add("strikethrough_color");
23509strings[3967] = str->add("align");
23510strings[3968] = str->add("valign");
23511strings[3969] = str->add("wrap");
23512strings[3970] = str->add("left_margin");
23513strings[3971] = str->add("right_margin");
23514strings[3972] = str->add("underline");
23515strings[3973] = str->add("strikethrough");
23516strings[3974] = str->add("backing");
23517strings[3975] = str->add("style");
23518strings[3976] = str->add("tabstops");
23519strings[3967] = str->add(strings[3967]);
23520strings[3977] = str->add("center");
23521str->del(strings[3967]);
23522str->del(strings[3977]);
23523strings[3958] = str->add(strings[3958]);
23524strings[3978] = str->add("#000");
23525str->del(strings[3958]);
23526str->del(strings[3978]);
23527strings[3975] = str->add(strings[3975]);
23528strings[3979] = str->add("shadow");
23529str->del(strings[3975]);
23530str->del(strings[3979]);
23531strings[3962] = str->add(strings[3962]);
23532strings[3980] = str->add("#ffffff80");
23533str->del(strings[3962]);
23534str->del(strings[3980]);
23535strings[3969] = str->add(strings[3969]);
23536strings[3981] = str->add("word");
23537str->del(strings[3969]);
23538str->del(strings[3981]);
23539strings[3957] = str->add(strings[3957]);
23540strings[469] = str->add(strings[469]);
23541strings[469] = str->add(strings[469]);
23542str->del(strings[3957]);
23543str->del(strings[469]);
23544strings[3956] = str->add(strings[3956]);
23545strings[3982] = str->add("10.000000");
23546str->del(strings[3956]);
23547str->del(strings[3982]);
23548strings[3954] = str->add(strings[3954]);
23549strings[470] = str->add(strings[470]);
23550strings[470] = str->add(strings[470]);
23551str->del(strings[3954]);
23552str->del(strings[470]);
23553strings[382] = str->add(strings[382]);
23554strings[382] = str->add(strings[382]);
23555strings[382] = str->add(strings[382]);
23556strings[382] = str->add(strings[382]);
23557strings[382] = str->add(strings[382]);
23558strings[382] = str->add(strings[382]);
23559strings[470] = str->add(strings[470]);
23560strings[469] = str->add(strings[469]);
23561strings[3975] = str->add(strings[3975]);
23562strings[3983] = str->add("glow");
23563str->del(strings[3975]);
23564str->del(strings[3983]);
23565strings[3958] = str->add(strings[3958]);
23566strings[3984] = str->add("#fff");
23567str->del(strings[3958]);
23568str->del(strings[3984]);
23569strings[3964] = str->add(strings[3964]);
23570strings[3985] = str->add("#fe87");
23571str->del(strings[3964]);
23572str->del(strings[3985]);
23573strings[3963] = str->add(strings[3963]);
23574strings[3986] = str->add("#fa14");
23575str->del(strings[3963]);
23576str->del(strings[3986]);
23577strings[3954] = str->add(strings[3954]);
23578strings[471] = str->add(strings[471]);
23579str->del(strings[470]);
23580strings[471] = str->add(strings[471]);
23581str->del(strings[3954]);
23582str->del(strings[471]);
23583strings[470] = str->add(strings[470]);
23584strings[469] = str->add(strings[469]);
23585strings[3975] = str->add(strings[3975]);
23586strings[3987] = str->add("glow");
23587str->del(strings[3975]);
23588str->del(strings[3987]);
23589strings[3958] = str->add(strings[3958]);
23590strings[3988] = str->add("#fff");
23591str->del(strings[3958]);
23592str->del(strings[3988]);
23593strings[3964] = str->add(strings[3964]);
23594strings[3989] = str->add("#fe87");
23595str->del(strings[3964]);
23596str->del(strings[3989]);
23597strings[3963] = str->add(strings[3963]);
23598strings[3990] = str->add("#fa14");
23599str->del(strings[3963]);
23600str->del(strings[3990]);
23601strings[3954] = str->add(strings[3954]);
23602strings[471] = str->add(strings[471]);
23603str->del(strings[470]);
23604strings[471] = str->add(strings[471]);
23605str->del(strings[3954]);
23606str->del(strings[471]);
23607str->del(strings[3954]);
23608str->del(strings[3955]);
23609str->del(strings[3956]);
23610str->del(strings[3957]);
23611str->del(strings[3958]);
23612str->del(strings[3959]);
23613str->del(strings[3960]);
23614str->del(strings[3961]);
23615str->del(strings[3962]);
23616str->del(strings[3963]);
23617str->del(strings[3964]);
23618str->del(strings[3965]);
23619str->del(strings[3966]);
23620str->del(strings[3967]);
23621str->del(strings[3968]);
23622str->del(strings[3969]);
23623str->del(strings[3970]);
23624str->del(strings[3971]);
23625str->del(strings[3972]);
23626str->del(strings[3973]);
23627str->del(strings[3974]);
23628str->del(strings[3975]);
23629str->del(strings[3976]);
23630str->del(strings[382]);
23631str->del(strings[382]);
23632str->del(strings[382]);
23633str->del(strings[382]);
23634str->del(strings[382]);
23635str->del(strings[382]);
23636str->del(strings[471]);
23637str->del(strings[469]);
23638str->del(strings[470]);
23639str->del(strings[469]);
23640str->del(strings[471]);
23641str->del(strings[469]);
23642strings[3991] = str->add("font");
23643strings[3992] = str->add("font_fallbacks");
23644strings[3993] = str->add("font_size");
23645strings[3994] = str->add("font_source");
23646strings[3995] = str->add("color");
23647strings[3996] = str->add("underline_color");
23648strings[3997] = str->add("underline2_color");
23649strings[3998] = str->add("outline_color");
23650strings[3999] = str->add("shadow_color");
23651strings[4000] = str->add("glow_color");
23652strings[4001] = str->add("glow2_color");
23653strings[4002] = str->add("backing_color");
23654strings[4003] = str->add("strikethrough_color");
23655strings[4004] = str->add("align");
23656strings[4005] = str->add("valign");
23657strings[4006] = str->add("wrap");
23658strings[4007] = str->add("left_margin");
23659strings[4008] = str->add("right_margin");
23660strings[4009] = str->add("underline");
23661strings[4010] = str->add("strikethrough");
23662strings[4011] = str->add("backing");
23663strings[4012] = str->add("style");
23664strings[4013] = str->add("tabstops");
23665strings[4004] = str->add(strings[4004]);
23666strings[4014] = str->add("center");
23667str->del(strings[4004]);
23668str->del(strings[4014]);
23669strings[3995] = str->add(strings[3995]);
23670strings[4015] = str->add("#000");
23671str->del(strings[3995]);
23672str->del(strings[4015]);
23673strings[4012] = str->add(strings[4012]);
23674strings[4016] = str->add("shadow");
23675str->del(strings[4012]);
23676str->del(strings[4016]);
23677strings[3999] = str->add(strings[3999]);
23678strings[4017] = str->add("#ffffff80");
23679str->del(strings[3999]);
23680str->del(strings[4017]);
23681strings[4006] = str->add(strings[4006]);
23682strings[4018] = str->add("word");
23683str->del(strings[4006]);
23684str->del(strings[4018]);
23685strings[3994] = str->add(strings[3994]);
23686strings[469] = str->add(strings[469]);
23687strings[469] = str->add(strings[469]);
23688str->del(strings[3994]);
23689str->del(strings[469]);
23690strings[3993] = str->add(strings[3993]);
23691strings[4019] = str->add("10.000000");
23692str->del(strings[3993]);
23693str->del(strings[4019]);
23694strings[3991] = str->add(strings[3991]);
23695strings[470] = str->add(strings[470]);
23696strings[470] = str->add(strings[470]);
23697str->del(strings[3991]);
23698str->del(strings[470]);
23699strings[382] = str->add(strings[382]);
23700strings[382] = str->add(strings[382]);
23701strings[382] = str->add(strings[382]);
23702strings[382] = str->add(strings[382]);
23703strings[382] = str->add(strings[382]);
23704strings[382] = str->add(strings[382]);
23705strings[470] = str->add(strings[470]);
23706strings[469] = str->add(strings[469]);
23707strings[4012] = str->add(strings[4012]);
23708strings[4020] = str->add("glow");
23709str->del(strings[4012]);
23710str->del(strings[4020]);
23711strings[3995] = str->add(strings[3995]);
23712strings[4021] = str->add("#fff");
23713str->del(strings[3995]);
23714str->del(strings[4021]);
23715strings[4001] = str->add(strings[4001]);
23716strings[4022] = str->add("#fe87");
23717str->del(strings[4001]);
23718str->del(strings[4022]);
23719strings[4000] = str->add(strings[4000]);
23720strings[4023] = str->add("#fa14");
23721str->del(strings[4000]);
23722str->del(strings[4023]);
23723strings[3991] = str->add(strings[3991]);
23724strings[471] = str->add(strings[471]);
23725str->del(strings[470]);
23726strings[471] = str->add(strings[471]);
23727str->del(strings[3991]);
23728str->del(strings[471]);
23729strings[470] = str->add(strings[470]);
23730strings[469] = str->add(strings[469]);
23731strings[4012] = str->add(strings[4012]);
23732strings[4024] = str->add("glow");
23733str->del(strings[4012]);
23734str->del(strings[4024]);
23735strings[3995] = str->add(strings[3995]);
23736strings[4025] = str->add("#fff");
23737str->del(strings[3995]);
23738str->del(strings[4025]);
23739strings[4001] = str->add(strings[4001]);
23740strings[4026] = str->add("#fe87");
23741str->del(strings[4001]);
23742str->del(strings[4026]);
23743strings[4000] = str->add(strings[4000]);
23744strings[4027] = str->add("#fa14");
23745str->del(strings[4000]);
23746str->del(strings[4027]);
23747strings[3991] = str->add(strings[3991]);
23748strings[471] = str->add(strings[471]);
23749str->del(strings[470]);
23750strings[471] = str->add(strings[471]);
23751str->del(strings[3991]);
23752str->del(strings[471]);
23753str->del(strings[3991]);
23754str->del(strings[3992]);
23755str->del(strings[3993]);
23756str->del(strings[3994]);
23757str->del(strings[3995]);
23758str->del(strings[3996]);
23759str->del(strings[3997]);
23760str->del(strings[3998]);
23761str->del(strings[3999]);
23762str->del(strings[4000]);
23763str->del(strings[4001]);
23764str->del(strings[4002]);
23765str->del(strings[4003]);
23766str->del(strings[4004]);
23767str->del(strings[4005]);
23768str->del(strings[4006]);
23769str->del(strings[4007]);
23770str->del(strings[4008]);
23771str->del(strings[4009]);
23772str->del(strings[4010]);
23773str->del(strings[4011]);
23774str->del(strings[4012]);
23775str->del(strings[4013]);
23776str->del(strings[382]);
23777str->del(strings[382]);
23778str->del(strings[382]);
23779str->del(strings[382]);
23780str->del(strings[382]);
23781str->del(strings[382]);
23782str->del(strings[471]);
23783str->del(strings[469]);
23784str->del(strings[470]);
23785str->del(strings[469]);
23786str->del(strings[471]);
23787str->del(strings[469]);
23788strings[4028] = str->add("font");
23789strings[4029] = str->add("font_fallbacks");
23790strings[4030] = str->add("font_size");
23791strings[4031] = str->add("font_source");
23792strings[4032] = str->add("color");
23793strings[4033] = str->add("underline_color");
23794strings[4034] = str->add("underline2_color");
23795strings[4035] = str->add("outline_color");
23796strings[4036] = str->add("shadow_color");
23797strings[4037] = str->add("glow_color");
23798strings[4038] = str->add("glow2_color");
23799strings[4039] = str->add("backing_color");
23800strings[4040] = str->add("strikethrough_color");
23801strings[4041] = str->add("align");
23802strings[4042] = str->add("valign");
23803strings[4043] = str->add("wrap");
23804strings[4044] = str->add("left_margin");
23805strings[4045] = str->add("right_margin");
23806strings[4046] = str->add("underline");
23807strings[4047] = str->add("strikethrough");
23808strings[4048] = str->add("backing");
23809strings[4049] = str->add("style");
23810strings[4050] = str->add("tabstops");
23811strings[4041] = str->add(strings[4041]);
23812strings[4051] = str->add("center");
23813str->del(strings[4041]);
23814str->del(strings[4051]);
23815strings[4032] = str->add(strings[4032]);
23816strings[4052] = str->add("#000");
23817str->del(strings[4032]);
23818str->del(strings[4052]);
23819strings[4049] = str->add(strings[4049]);
23820strings[4053] = str->add("shadow");
23821str->del(strings[4049]);
23822str->del(strings[4053]);
23823strings[4036] = str->add(strings[4036]);
23824strings[4054] = str->add("#ffffff80");
23825str->del(strings[4036]);
23826str->del(strings[4054]);
23827strings[4043] = str->add(strings[4043]);
23828strings[4055] = str->add("word");
23829str->del(strings[4043]);
23830str->del(strings[4055]);
23831strings[4031] = str->add(strings[4031]);
23832strings[469] = str->add(strings[469]);
23833strings[469] = str->add(strings[469]);
23834str->del(strings[4031]);
23835str->del(strings[469]);
23836strings[4030] = str->add(strings[4030]);
23837strings[4056] = str->add("10.000000");
23838str->del(strings[4030]);
23839str->del(strings[4056]);
23840strings[4028] = str->add(strings[4028]);
23841strings[470] = str->add(strings[470]);
23842strings[470] = str->add(strings[470]);
23843str->del(strings[4028]);
23844str->del(strings[470]);
23845strings[382] = str->add(strings[382]);
23846strings[382] = str->add(strings[382]);
23847strings[382] = str->add(strings[382]);
23848strings[382] = str->add(strings[382]);
23849strings[382] = str->add(strings[382]);
23850strings[382] = str->add(strings[382]);
23851strings[470] = str->add(strings[470]);
23852strings[469] = str->add(strings[469]);
23853strings[4049] = str->add(strings[4049]);
23854strings[4057] = str->add("glow");
23855str->del(strings[4049]);
23856str->del(strings[4057]);
23857strings[4032] = str->add(strings[4032]);
23858strings[4058] = str->add("#fff");
23859str->del(strings[4032]);
23860str->del(strings[4058]);
23861strings[4038] = str->add(strings[4038]);
23862strings[4059] = str->add("#fe87");
23863str->del(strings[4038]);
23864str->del(strings[4059]);
23865strings[4037] = str->add(strings[4037]);
23866strings[4060] = str->add("#fa14");
23867str->del(strings[4037]);
23868str->del(strings[4060]);
23869strings[4028] = str->add(strings[4028]);
23870strings[471] = str->add(strings[471]);
23871str->del(strings[470]);
23872strings[471] = str->add(strings[471]);
23873str->del(strings[4028]);
23874str->del(strings[471]);
23875strings[470] = str->add(strings[470]);
23876strings[469] = str->add(strings[469]);
23877strings[4049] = str->add(strings[4049]);
23878strings[4061] = str->add("glow");
23879str->del(strings[4049]);
23880str->del(strings[4061]);
23881strings[4032] = str->add(strings[4032]);
23882strings[4062] = str->add("#fff");
23883str->del(strings[4032]);
23884str->del(strings[4062]);
23885strings[4038] = str->add(strings[4038]);
23886strings[4063] = str->add("#fe87");
23887str->del(strings[4038]);
23888str->del(strings[4063]);
23889strings[4037] = str->add(strings[4037]);
23890strings[4064] = str->add("#fa14");
23891str->del(strings[4037]);
23892str->del(strings[4064]);
23893strings[4028] = str->add(strings[4028]);
23894strings[471] = str->add(strings[471]);
23895str->del(strings[470]);
23896strings[471] = str->add(strings[471]);
23897str->del(strings[4028]);
23898str->del(strings[471]);
23899str->del(strings[4028]);
23900str->del(strings[4029]);
23901str->del(strings[4030]);
23902str->del(strings[4031]);
23903str->del(strings[4032]);
23904str->del(strings[4033]);
23905str->del(strings[4034]);
23906str->del(strings[4035]);
23907str->del(strings[4036]);
23908str->del(strings[4037]);
23909str->del(strings[4038]);
23910str->del(strings[4039]);
23911str->del(strings[4040]);
23912str->del(strings[4041]);
23913str->del(strings[4042]);
23914str->del(strings[4043]);
23915str->del(strings[4044]);
23916str->del(strings[4045]);
23917str->del(strings[4046]);
23918str->del(strings[4047]);
23919str->del(strings[4048]);
23920str->del(strings[4049]);
23921str->del(strings[4050]);
23922str->del(strings[382]);
23923str->del(strings[382]);
23924str->del(strings[382]);
23925str->del(strings[382]);
23926str->del(strings[382]);
23927str->del(strings[382]);
23928str->del(strings[471]);
23929str->del(strings[469]);
23930str->del(strings[470]);
23931str->del(strings[469]);
23932str->del(strings[471]);
23933str->del(strings[469]);
23934strings[4065] = str->add("font");
23935strings[4066] = str->add("font_fallbacks");
23936strings[4067] = str->add("font_size");
23937strings[4068] = str->add("font_source");
23938strings[4069] = str->add("color");
23939strings[4070] = str->add("underline_color");
23940strings[4071] = str->add("underline2_color");
23941strings[4072] = str->add("outline_color");
23942strings[4073] = str->add("shadow_color");
23943strings[4074] = str->add("glow_color");
23944strings[4075] = str->add("glow2_color");
23945strings[4076] = str->add("backing_color");
23946strings[4077] = str->add("strikethrough_color");
23947strings[4078] = str->add("align");
23948strings[4079] = str->add("valign");
23949strings[4080] = str->add("wrap");
23950strings[4081] = str->add("left_margin");
23951strings[4082] = str->add("right_margin");
23952strings[4083] = str->add("underline");
23953strings[4084] = str->add("strikethrough");
23954strings[4085] = str->add("backing");
23955strings[4086] = str->add("style");
23956strings[4087] = str->add("tabstops");
23957strings[4078] = str->add(strings[4078]);
23958strings[4088] = str->add("center");
23959str->del(strings[4078]);
23960str->del(strings[4088]);
23961strings[4069] = str->add(strings[4069]);
23962strings[4089] = str->add("#000");
23963str->del(strings[4069]);
23964str->del(strings[4089]);
23965strings[4086] = str->add(strings[4086]);
23966strings[4090] = str->add("shadow");
23967str->del(strings[4086]);
23968str->del(strings[4090]);
23969strings[4073] = str->add(strings[4073]);
23970strings[4091] = str->add("#ffffff80");
23971str->del(strings[4073]);
23972str->del(strings[4091]);
23973strings[4080] = str->add(strings[4080]);
23974strings[4092] = str->add("word");
23975str->del(strings[4080]);
23976str->del(strings[4092]);
23977strings[4068] = str->add(strings[4068]);
23978strings[469] = str->add(strings[469]);
23979strings[469] = str->add(strings[469]);
23980str->del(strings[4068]);
23981str->del(strings[469]);
23982strings[4067] = str->add(strings[4067]);
23983strings[4093] = str->add("10.000000");
23984str->del(strings[4067]);
23985str->del(strings[4093]);
23986strings[4065] = str->add(strings[4065]);
23987strings[470] = str->add(strings[470]);
23988strings[470] = str->add(strings[470]);
23989str->del(strings[4065]);
23990str->del(strings[470]);
23991strings[382] = str->add(strings[382]);
23992strings[382] = str->add(strings[382]);
23993strings[382] = str->add(strings[382]);
23994strings[382] = str->add(strings[382]);
23995strings[382] = str->add(strings[382]);
23996strings[382] = str->add(strings[382]);
23997strings[470] = str->add(strings[470]);
23998strings[469] = str->add(strings[469]);
23999strings[4086] = str->add(strings[4086]);
24000strings[4094] = str->add("glow");
24001str->del(strings[4086]);
24002str->del(strings[4094]);
24003strings[4069] = str->add(strings[4069]);
24004strings[4095] = str->add("#fff");
24005str->del(strings[4069]);
24006str->del(strings[4095]);
24007strings[4075] = str->add(strings[4075]);
24008strings[4096] = str->add("#fe87");
24009str->del(strings[4075]);
24010str->del(strings[4096]);
24011strings[4074] = str->add(strings[4074]);
24012strings[4097] = str->add("#fa14");
24013str->del(strings[4074]);
24014str->del(strings[4097]);
24015strings[4065] = str->add(strings[4065]);
24016strings[471] = str->add(strings[471]);
24017str->del(strings[470]);
24018strings[471] = str->add(strings[471]);
24019str->del(strings[4065]);
24020str->del(strings[471]);
24021strings[470] = str->add(strings[470]);
24022strings[469] = str->add(strings[469]);
24023strings[4086] = str->add(strings[4086]);
24024strings[4098] = str->add("glow");
24025str->del(strings[4086]);
24026str->del(strings[4098]);
24027strings[4069] = str->add(strings[4069]);
24028strings[4099] = str->add("#fff");
24029str->del(strings[4069]);
24030str->del(strings[4099]);
24031strings[4075] = str->add(strings[4075]);
24032strings[4100] = str->add("#fe87");
24033str->del(strings[4075]);
24034str->del(strings[4100]);
24035strings[4074] = str->add(strings[4074]);
24036strings[4101] = str->add("#fa14");
24037str->del(strings[4074]);
24038str->del(strings[4101]);
24039strings[4065] = str->add(strings[4065]);
24040strings[471] = str->add(strings[471]);
24041str->del(strings[470]);
24042strings[471] = str->add(strings[471]);
24043str->del(strings[4065]);
24044str->del(strings[471]);
24045str->del(strings[4065]);
24046str->del(strings[4066]);
24047str->del(strings[4067]);
24048str->del(strings[4068]);
24049str->del(strings[4069]);
24050str->del(strings[4070]);
24051str->del(strings[4071]);
24052str->del(strings[4072]);
24053str->del(strings[4073]);
24054str->del(strings[4074]);
24055str->del(strings[4075]);
24056str->del(strings[4076]);
24057str->del(strings[4077]);
24058str->del(strings[4078]);
24059str->del(strings[4079]);
24060str->del(strings[4080]);
24061str->del(strings[4081]);
24062str->del(strings[4082]);
24063str->del(strings[4083]);
24064str->del(strings[4084]);
24065str->del(strings[4085]);
24066str->del(strings[4086]);
24067str->del(strings[4087]);
24068str->del(strings[382]);
24069str->del(strings[382]);
24070str->del(strings[382]);
24071str->del(strings[382]);
24072str->del(strings[382]);
24073str->del(strings[382]);
24074str->del(strings[471]);
24075str->del(strings[469]);
24076str->del(strings[470]);
24077str->del(strings[469]);
24078str->del(strings[471]);
24079str->del(strings[469]);
24080strings[4102] = str->add("font");
24081strings[4103] = str->add("font_fallbacks");
24082strings[4104] = str->add("font_size");
24083strings[4105] = str->add("font_source");
24084strings[4106] = str->add("color");
24085strings[4107] = str->add("underline_color");
24086strings[4108] = str->add("underline2_color");
24087strings[4109] = str->add("outline_color");
24088strings[4110] = str->add("shadow_color");
24089strings[4111] = str->add("glow_color");
24090strings[4112] = str->add("glow2_color");
24091strings[4113] = str->add("backing_color");
24092strings[4114] = str->add("strikethrough_color");
24093strings[4115] = str->add("align");
24094strings[4116] = str->add("valign");
24095strings[4117] = str->add("wrap");
24096strings[4118] = str->add("left_margin");
24097strings[4119] = str->add("right_margin");
24098strings[4120] = str->add("underline");
24099strings[4121] = str->add("strikethrough");
24100strings[4122] = str->add("backing");
24101strings[4123] = str->add("style");
24102strings[4124] = str->add("tabstops");
24103strings[4115] = str->add(strings[4115]);
24104strings[4125] = str->add("center");
24105str->del(strings[4115]);
24106str->del(strings[4125]);
24107strings[4106] = str->add(strings[4106]);
24108strings[4126] = str->add("#000");
24109str->del(strings[4106]);
24110str->del(strings[4126]);
24111strings[4123] = str->add(strings[4123]);
24112strings[4127] = str->add("shadow");
24113str->del(strings[4123]);
24114str->del(strings[4127]);
24115strings[4110] = str->add(strings[4110]);
24116strings[4128] = str->add("#ffffff80");
24117str->del(strings[4110]);
24118str->del(strings[4128]);
24119strings[4117] = str->add(strings[4117]);
24120strings[4129] = str->add("word");
24121str->del(strings[4117]);
24122str->del(strings[4129]);
24123strings[4105] = str->add(strings[4105]);
24124strings[469] = str->add(strings[469]);
24125strings[469] = str->add(strings[469]);
24126str->del(strings[4105]);
24127str->del(strings[469]);
24128strings[4104] = str->add(strings[4104]);
24129strings[4130] = str->add("10.000000");
24130str->del(strings[4104]);
24131str->del(strings[4130]);
24132strings[4102] = str->add(strings[4102]);
24133strings[470] = str->add(strings[470]);
24134strings[470] = str->add(strings[470]);
24135str->del(strings[4102]);
24136str->del(strings[470]);
24137strings[382] = str->add(strings[382]);
24138strings[382] = str->add(strings[382]);
24139strings[382] = str->add(strings[382]);
24140strings[382] = str->add(strings[382]);
24141strings[382] = str->add(strings[382]);
24142strings[382] = str->add(strings[382]);
24143strings[470] = str->add(strings[470]);
24144strings[469] = str->add(strings[469]);
24145strings[4123] = str->add(strings[4123]);
24146strings[4131] = str->add("glow");
24147str->del(strings[4123]);
24148str->del(strings[4131]);
24149strings[4106] = str->add(strings[4106]);
24150strings[4132] = str->add("#fff");
24151str->del(strings[4106]);
24152str->del(strings[4132]);
24153strings[4112] = str->add(strings[4112]);
24154strings[4133] = str->add("#fe87");
24155str->del(strings[4112]);
24156str->del(strings[4133]);
24157strings[4111] = str->add(strings[4111]);
24158strings[4134] = str->add("#fa14");
24159str->del(strings[4111]);
24160str->del(strings[4134]);
24161strings[4102] = str->add(strings[4102]);
24162strings[471] = str->add(strings[471]);
24163str->del(strings[470]);
24164strings[471] = str->add(strings[471]);
24165str->del(strings[4102]);
24166str->del(strings[471]);
24167strings[470] = str->add(strings[470]);
24168strings[469] = str->add(strings[469]);
24169strings[4123] = str->add(strings[4123]);
24170strings[4135] = str->add("glow");
24171str->del(strings[4123]);
24172str->del(strings[4135]);
24173strings[4106] = str->add(strings[4106]);
24174strings[4136] = str->add("#fff");
24175str->del(strings[4106]);
24176str->del(strings[4136]);
24177strings[4112] = str->add(strings[4112]);
24178strings[4137] = str->add("#fe87");
24179str->del(strings[4112]);
24180str->del(strings[4137]);
24181strings[4111] = str->add(strings[4111]);
24182strings[4138] = str->add("#fa14");
24183str->del(strings[4111]);
24184str->del(strings[4138]);
24185strings[4102] = str->add(strings[4102]);
24186strings[471] = str->add(strings[471]);
24187str->del(strings[470]);
24188strings[471] = str->add(strings[471]);
24189str->del(strings[4102]);
24190str->del(strings[471]);
24191str->del(strings[4102]);
24192str->del(strings[4103]);
24193str->del(strings[4104]);
24194str->del(strings[4105]);
24195str->del(strings[4106]);
24196str->del(strings[4107]);
24197str->del(strings[4108]);
24198str->del(strings[4109]);
24199str->del(strings[4110]);
24200str->del(strings[4111]);
24201str->del(strings[4112]);
24202str->del(strings[4113]);
24203str->del(strings[4114]);
24204str->del(strings[4115]);
24205str->del(strings[4116]);
24206str->del(strings[4117]);
24207str->del(strings[4118]);
24208str->del(strings[4119]);
24209str->del(strings[4120]);
24210str->del(strings[4121]);
24211str->del(strings[4122]);
24212str->del(strings[4123]);
24213str->del(strings[4124]);
24214str->del(strings[382]);
24215str->del(strings[382]);
24216str->del(strings[382]);
24217str->del(strings[382]);
24218str->del(strings[382]);
24219str->del(strings[382]);
24220str->del(strings[471]);
24221str->del(strings[469]);
24222str->del(strings[470]);
24223str->del(strings[469]);
24224str->del(strings[471]);
24225str->del(strings[469]);
24226strings[4139] = str->add("font");
24227strings[4140] = str->add("font_fallbacks");
24228strings[4141] = str->add("font_size");
24229strings[4142] = str->add("font_source");
24230strings[4143] = str->add("color");
24231strings[4144] = str->add("underline_color");
24232strings[4145] = str->add("underline2_color");
24233strings[4146] = str->add("outline_color");
24234strings[4147] = str->add("shadow_color");
24235strings[4148] = str->add("glow_color");
24236strings[4149] = str->add("glow2_color");
24237strings[4150] = str->add("backing_color");
24238strings[4151] = str->add("strikethrough_color");
24239strings[4152] = str->add("align");
24240strings[4153] = str->add("valign");
24241strings[4154] = str->add("wrap");
24242strings[4155] = str->add("left_margin");
24243strings[4156] = str->add("right_margin");
24244strings[4157] = str->add("underline");
24245strings[4158] = str->add("strikethrough");
24246strings[4159] = str->add("backing");
24247strings[4160] = str->add("style");
24248strings[4161] = str->add("tabstops");
24249strings[4152] = str->add(strings[4152]);
24250strings[4162] = str->add("center");
24251str->del(strings[4152]);
24252str->del(strings[4162]);
24253strings[4143] = str->add(strings[4143]);
24254strings[4163] = str->add("#000");
24255str->del(strings[4143]);
24256str->del(strings[4163]);
24257strings[4160] = str->add(strings[4160]);
24258strings[4164] = str->add("shadow");
24259str->del(strings[4160]);
24260str->del(strings[4164]);
24261strings[4147] = str->add(strings[4147]);
24262strings[4165] = str->add("#ffffff80");
24263str->del(strings[4147]);
24264str->del(strings[4165]);
24265strings[4154] = str->add(strings[4154]);
24266strings[4166] = str->add("word");
24267str->del(strings[4154]);
24268str->del(strings[4166]);
24269strings[4142] = str->add(strings[4142]);
24270strings[469] = str->add(strings[469]);
24271strings[469] = str->add(strings[469]);
24272str->del(strings[4142]);
24273str->del(strings[469]);
24274strings[4141] = str->add(strings[4141]);
24275strings[4167] = str->add("10.000000");
24276str->del(strings[4141]);
24277str->del(strings[4167]);
24278strings[4139] = str->add(strings[4139]);
24279strings[470] = str->add(strings[470]);
24280strings[470] = str->add(strings[470]);
24281str->del(strings[4139]);
24282str->del(strings[470]);
24283strings[382] = str->add(strings[382]);
24284strings[382] = str->add(strings[382]);
24285strings[382] = str->add(strings[382]);
24286strings[382] = str->add(strings[382]);
24287strings[382] = str->add(strings[382]);
24288strings[382] = str->add(strings[382]);
24289strings[470] = str->add(strings[470]);
24290strings[469] = str->add(strings[469]);
24291strings[4160] = str->add(strings[4160]);
24292strings[4168] = str->add("glow");
24293str->del(strings[4160]);
24294str->del(strings[4168]);
24295strings[4143] = str->add(strings[4143]);
24296strings[4169] = str->add("#fff");
24297str->del(strings[4143]);
24298str->del(strings[4169]);
24299strings[4149] = str->add(strings[4149]);
24300strings[4170] = str->add("#fe87");
24301str->del(strings[4149]);
24302str->del(strings[4170]);
24303strings[4148] = str->add(strings[4148]);
24304strings[4171] = str->add("#fa14");
24305str->del(strings[4148]);
24306str->del(strings[4171]);
24307strings[4139] = str->add(strings[4139]);
24308strings[471] = str->add(strings[471]);
24309str->del(strings[470]);
24310strings[471] = str->add(strings[471]);
24311str->del(strings[4139]);
24312str->del(strings[471]);
24313strings[470] = str->add(strings[470]);
24314strings[469] = str->add(strings[469]);
24315strings[4160] = str->add(strings[4160]);
24316strings[4172] = str->add("glow");
24317str->del(strings[4160]);
24318str->del(strings[4172]);
24319strings[4143] = str->add(strings[4143]);
24320strings[4173] = str->add("#fff");
24321str->del(strings[4143]);
24322str->del(strings[4173]);
24323strings[4149] = str->add(strings[4149]);
24324strings[4174] = str->add("#fe87");
24325str->del(strings[4149]);
24326str->del(strings[4174]);
24327strings[4148] = str->add(strings[4148]);
24328strings[4175] = str->add("#fa14");
24329str->del(strings[4148]);
24330str->del(strings[4175]);
24331strings[4139] = str->add(strings[4139]);
24332strings[471] = str->add(strings[471]);
24333str->del(strings[470]);
24334strings[471] = str->add(strings[471]);
24335str->del(strings[4139]);
24336str->del(strings[471]);
24337str->del(strings[4139]);
24338str->del(strings[4140]);
24339str->del(strings[4141]);
24340str->del(strings[4142]);
24341str->del(strings[4143]);
24342str->del(strings[4144]);
24343str->del(strings[4145]);
24344str->del(strings[4146]);
24345str->del(strings[4147]);
24346str->del(strings[4148]);
24347str->del(strings[4149]);
24348str->del(strings[4150]);
24349str->del(strings[4151]);
24350str->del(strings[4152]);
24351str->del(strings[4153]);
24352str->del(strings[4154]);
24353str->del(strings[4155]);
24354str->del(strings[4156]);
24355str->del(strings[4157]);
24356str->del(strings[4158]);
24357str->del(strings[4159]);
24358str->del(strings[4160]);
24359str->del(strings[4161]);
24360str->del(strings[382]);
24361str->del(strings[382]);
24362str->del(strings[382]);
24363str->del(strings[382]);
24364str->del(strings[382]);
24365str->del(strings[382]);
24366str->del(strings[471]);
24367str->del(strings[469]);
24368str->del(strings[470]);
24369str->del(strings[469]);
24370str->del(strings[471]);
24371str->del(strings[469]);
24372strings[4176] = str->add("resize");
24373strings[469] = str->add(strings[469]);
24374strings[4177] = str->add("images/408");
24375strings[4178] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/408");
24376strings[469] = str->add(strings[469]);
24377strings[4177] = str->add(strings[4177]);
24378strings[469] = str->add(strings[469]);
24379strings[4179] = str->add("images/409");
24380strings[4180] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/409");
24381strings[469] = str->add(strings[469]);
24382strings[4179] = str->add(strings[4179]);
24383strings[469] = str->add(strings[469]);
24384strings[4181] = str->add("images/412");
24385strings[4182] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/412");
24386strings[469] = str->add(strings[469]);
24387strings[4181] = str->add(strings[4181]);
24388strings[469] = str->add(strings[469]);
24389strings[4183] = str->add("images/410");
24390strings[4184] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/410");
24391strings[469] = str->add(strings[469]);
24392strings[4183] = str->add(strings[4183]);
24393strings[469] = str->add(strings[469]);
24394strings[4185] = str->add("images/411");
24395strings[4186] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/411");
24396strings[469] = str->add(strings[469]);
24397strings[4185] = str->add(strings[4185]);
24398strings[469] = str->add(strings[469]);
24399strings[4187] = str->add("images/413");
24400strings[4188] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/413");
24401strings[469] = str->add(strings[469]);
24402strings[4187] = str->add(strings[4187]);
24403strings[469] = str->add(strings[469]);
24404strings[4189] = str->add("images/414");
24405strings[4190] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/414");
24406strings[469] = str->add(strings[469]);
24407strings[4189] = str->add(strings[4189]);
24408strings[469] = str->add(strings[469]);
24409strings[4191] = str->add("images/287");
24410strings[4192] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/287");
24411strings[469] = str->add(strings[469]);
24412strings[4191] = str->add(strings[4191]);
24413strings[1712] = str->add(strings[1712]);
24414strings[1712] = str->add(strings[1712]);
24415strings[3710] = str->add(strings[3710]);
24416strings[3710] = str->add(strings[3710]);
24417strings[469] = str->add(strings[469]);
24418strings[4193] = str->add("images/406");
24419strings[4194] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/406");
24420strings[469] = str->add(strings[469]);
24421strings[4193] = str->add(strings[4193]);
24422strings[4195] = str->add("font");
24423strings[4196] = str->add("font_fallbacks");
24424strings[4197] = str->add("font_size");
24425strings[4198] = str->add("font_source");
24426strings[4199] = str->add("color");
24427strings[4200] = str->add("underline_color");
24428strings[4201] = str->add("underline2_color");
24429strings[4202] = str->add("outline_color");
24430strings[4203] = str->add("shadow_color");
24431strings[4204] = str->add("glow_color");
24432strings[4205] = str->add("glow2_color");
24433strings[4206] = str->add("backing_color");
24434strings[4207] = str->add("strikethrough_color");
24435strings[4208] = str->add("align");
24436strings[4209] = str->add("valign");
24437strings[4210] = str->add("wrap");
24438strings[4211] = str->add("left_margin");
24439strings[4212] = str->add("right_margin");
24440strings[4213] = str->add("underline");
24441strings[4214] = str->add("strikethrough");
24442strings[4215] = str->add("backing");
24443strings[4216] = str->add("style");
24444strings[4217] = str->add("tabstops");
24445strings[4208] = str->add(strings[4208]);
24446strings[4218] = str->add("center");
24447str->del(strings[4208]);
24448str->del(strings[4218]);
24449strings[4199] = str->add(strings[4199]);
24450strings[4219] = str->add("#000");
24451str->del(strings[4199]);
24452str->del(strings[4219]);
24453strings[4216] = str->add(strings[4216]);
24454strings[4220] = str->add("shadow");
24455str->del(strings[4216]);
24456str->del(strings[4220]);
24457strings[4203] = str->add(strings[4203]);
24458strings[4221] = str->add("#ffffff80");
24459str->del(strings[4203]);
24460str->del(strings[4221]);
24461strings[4210] = str->add(strings[4210]);
24462strings[4222] = str->add("word");
24463str->del(strings[4210]);
24464str->del(strings[4222]);
24465strings[4198] = str->add(strings[4198]);
24466strings[469] = str->add(strings[469]);
24467strings[469] = str->add(strings[469]);
24468str->del(strings[4198]);
24469str->del(strings[469]);
24470strings[4197] = str->add(strings[4197]);
24471strings[4223] = str->add("10.000000");
24472str->del(strings[4197]);
24473str->del(strings[4223]);
24474strings[4195] = str->add(strings[4195]);
24475strings[470] = str->add(strings[470]);
24476strings[470] = str->add(strings[470]);
24477str->del(strings[4195]);
24478str->del(strings[470]);
24479strings[470] = str->add(strings[470]);
24480strings[469] = str->add(strings[469]);
24481strings[4216] = str->add(strings[4216]);
24482strings[4224] = str->add("soft_shadow");
24483str->del(strings[4216]);
24484str->del(strings[4224]);
24485strings[4199] = str->add(strings[4199]);
24486strings[4225] = str->add("#fff");
24487str->del(strings[4199]);
24488str->del(strings[4225]);
24489strings[4203] = str->add(strings[4203]);
24490strings[4226] = str->add("#00000020");
24491str->del(strings[4203]);
24492str->del(strings[4226]);
24493strings[4197] = str->add(strings[4197]);
24494strings[4227] = str->add("12.000000");
24495str->del(strings[4197]);
24496str->del(strings[4227]);
24497strings[4195] = str->add(strings[4195]);
24498strings[471] = str->add(strings[471]);
24499str->del(strings[470]);
24500strings[471] = str->add(strings[471]);
24501str->del(strings[4195]);
24502str->del(strings[471]);
24503strings[382] = str->add(strings[382]);
24504strings[382] = str->add(strings[382]);
24505strings[382] = str->add(strings[382]);
24506strings[382] = str->add(strings[382]);
24507strings[382] = str->add(strings[382]);
24508strings[382] = str->add(strings[382]);
24509strings[382] = str->add(strings[382]);
24510strings[382] = str->add(strings[382]);
24511strings[382] = str->add(strings[382]);
24512strings[382] = str->add(strings[382]);
24513strings[382] = str->add(strings[382]);
24514strings[382] = str->add(strings[382]);
24515strings[382] = str->add(strings[382]);
24516strings[382] = str->add(strings[382]);
24517strings[382] = str->add(strings[382]);
24518strings[382] = str->add(strings[382]);
24519strings[382] = str->add(strings[382]);
24520strings[382] = str->add(strings[382]);
24521strings[382] = str->add(strings[382]);
24522strings[382] = str->add(strings[382]);
24523strings[382] = str->add(strings[382]);
24524strings[382] = str->add(strings[382]);
24525str->del(strings[471]);
24526str->del(strings[469]);
24527str->del(strings[382]);
24528str->del(strings[382]);
24529str->del(strings[382]);
24530str->del(strings[382]);
24531str->del(strings[382]);
24532str->del(strings[382]);
24533str->del(strings[382]);
24534str->del(strings[382]);
24535str->del(strings[382]);
24536str->del(strings[382]);
24537str->del(strings[382]);
24538str->del(strings[382]);
24539str->del(strings[382]);
24540str->del(strings[382]);
24541str->del(strings[382]);
24542str->del(strings[382]);
24543str->del(strings[382]);
24544str->del(strings[382]);
24545str->del(strings[382]);
24546str->del(strings[382]);
24547str->del(strings[382]);
24548str->del(strings[470]);
24549str->del(strings[469]);
24550str->del(strings[382]);
24551str->del(strings[4195]);
24552str->del(strings[4196]);
24553str->del(strings[4197]);
24554str->del(strings[4198]);
24555str->del(strings[4199]);
24556str->del(strings[4200]);
24557str->del(strings[4201]);
24558str->del(strings[4202]);
24559str->del(strings[4203]);
24560str->del(strings[4204]);
24561str->del(strings[4205]);
24562str->del(strings[4206]);
24563str->del(strings[4207]);
24564str->del(strings[4208]);
24565str->del(strings[4209]);
24566str->del(strings[4210]);
24567str->del(strings[4211]);
24568str->del(strings[4212]);
24569str->del(strings[4213]);
24570str->del(strings[4214]);
24571str->del(strings[4215]);
24572str->del(strings[4216]);
24573str->del(strings[4217]);
24574strings[4228] = str->add("font");
24575strings[4229] = str->add("font_fallbacks");
24576strings[4230] = str->add("font_size");
24577strings[4231] = str->add("font_source");
24578strings[4232] = str->add("color");
24579strings[4233] = str->add("underline_color");
24580strings[4234] = str->add("underline2_color");
24581strings[4235] = str->add("outline_color");
24582strings[4236] = str->add("shadow_color");
24583strings[4237] = str->add("glow_color");
24584strings[4238] = str->add("glow2_color");
24585strings[4239] = str->add("backing_color");
24586strings[4240] = str->add("strikethrough_color");
24587strings[4241] = str->add("align");
24588strings[4242] = str->add("valign");
24589strings[4243] = str->add("wrap");
24590strings[4244] = str->add("left_margin");
24591strings[4245] = str->add("right_margin");
24592strings[4246] = str->add("underline");
24593strings[4247] = str->add("strikethrough");
24594strings[4248] = str->add("backing");
24595strings[4249] = str->add("style");
24596strings[4250] = str->add("tabstops");
24597strings[4241] = str->add(strings[4241]);
24598strings[4251] = str->add("center");
24599str->del(strings[4241]);
24600str->del(strings[4251]);
24601strings[4232] = str->add(strings[4232]);
24602strings[4252] = str->add("#000");
24603str->del(strings[4232]);
24604str->del(strings[4252]);
24605strings[4249] = str->add(strings[4249]);
24606strings[4253] = str->add("shadow");
24607str->del(strings[4249]);
24608str->del(strings[4253]);
24609strings[4236] = str->add(strings[4236]);
24610strings[4254] = str->add("#ffffff80");
24611str->del(strings[4236]);
24612str->del(strings[4254]);
24613strings[4243] = str->add(strings[4243]);
24614strings[4255] = str->add("word");
24615str->del(strings[4243]);
24616str->del(strings[4255]);
24617strings[4231] = str->add(strings[4231]);
24618strings[469] = str->add(strings[469]);
24619strings[469] = str->add(strings[469]);
24620str->del(strings[4231]);
24621str->del(strings[469]);
24622strings[4230] = str->add(strings[4230]);
24623strings[4256] = str->add("10.000000");
24624str->del(strings[4230]);
24625str->del(strings[4256]);
24626strings[4228] = str->add(strings[4228]);
24627strings[470] = str->add(strings[470]);
24628strings[470] = str->add(strings[470]);
24629str->del(strings[4228]);
24630str->del(strings[470]);
24631strings[470] = str->add(strings[470]);
24632strings[469] = str->add(strings[469]);
24633strings[4249] = str->add(strings[4249]);
24634strings[4257] = str->add("soft_shadow");
24635str->del(strings[4249]);
24636str->del(strings[4257]);
24637strings[4232] = str->add(strings[4232]);
24638strings[4258] = str->add("#fff");
24639str->del(strings[4232]);
24640str->del(strings[4258]);
24641strings[4236] = str->add(strings[4236]);
24642strings[4259] = str->add("#00000020");
24643str->del(strings[4236]);
24644str->del(strings[4259]);
24645strings[4230] = str->add(strings[4230]);
24646strings[4260] = str->add("12.000000");
24647str->del(strings[4230]);
24648str->del(strings[4260]);
24649strings[4228] = str->add(strings[4228]);
24650strings[471] = str->add(strings[471]);
24651str->del(strings[470]);
24652strings[471] = str->add(strings[471]);
24653str->del(strings[4228]);
24654str->del(strings[471]);
24655strings[382] = str->add(strings[382]);
24656strings[382] = str->add(strings[382]);
24657strings[382] = str->add(strings[382]);
24658strings[382] = str->add(strings[382]);
24659strings[382] = str->add(strings[382]);
24660strings[382] = str->add(strings[382]);
24661strings[382] = str->add(strings[382]);
24662strings[382] = str->add(strings[382]);
24663strings[382] = str->add(strings[382]);
24664strings[382] = str->add(strings[382]);
24665strings[382] = str->add(strings[382]);
24666strings[382] = str->add(strings[382]);
24667strings[382] = str->add(strings[382]);
24668strings[382] = str->add(strings[382]);
24669strings[382] = str->add(strings[382]);
24670strings[382] = str->add(strings[382]);
24671strings[382] = str->add(strings[382]);
24672strings[382] = str->add(strings[382]);
24673strings[382] = str->add(strings[382]);
24674strings[382] = str->add(strings[382]);
24675strings[382] = str->add(strings[382]);
24676strings[382] = str->add(strings[382]);
24677str->del(strings[4228]);
24678str->del(strings[4229]);
24679str->del(strings[4230]);
24680str->del(strings[4231]);
24681str->del(strings[4232]);
24682str->del(strings[4233]);
24683str->del(strings[4234]);
24684str->del(strings[4235]);
24685str->del(strings[4236]);
24686str->del(strings[4237]);
24687str->del(strings[4238]);
24688str->del(strings[4239]);
24689str->del(strings[4240]);
24690str->del(strings[4241]);
24691str->del(strings[4242]);
24692str->del(strings[4243]);
24693str->del(strings[4244]);
24694str->del(strings[4245]);
24695str->del(strings[4246]);
24696str->del(strings[4247]);
24697str->del(strings[4248]);
24698str->del(strings[4249]);
24699str->del(strings[4250]);
24700str->del(strings[471]);
24701str->del(strings[469]);
24702str->del(strings[382]);
24703str->del(strings[382]);
24704str->del(strings[382]);
24705str->del(strings[382]);
24706str->del(strings[382]);
24707str->del(strings[382]);
24708str->del(strings[382]);
24709str->del(strings[382]);
24710str->del(strings[382]);
24711str->del(strings[382]);
24712str->del(strings[382]);
24713str->del(strings[382]);
24714str->del(strings[382]);
24715str->del(strings[382]);
24716str->del(strings[382]);
24717str->del(strings[382]);
24718str->del(strings[382]);
24719str->del(strings[382]);
24720str->del(strings[382]);
24721str->del(strings[382]);
24722str->del(strings[382]);
24723str->del(strings[470]);
24724str->del(strings[469]);
24725str->del(strings[382]);
24726strings[4261] = str->add("font");
24727strings[4262] = str->add("font_fallbacks");
24728strings[4263] = str->add("font_size");
24729strings[4264] = str->add("font_source");
24730strings[4265] = str->add("color");
24731strings[4266] = str->add("underline_color");
24732strings[4267] = str->add("underline2_color");
24733strings[4268] = str->add("outline_color");
24734strings[4269] = str->add("shadow_color");
24735strings[4270] = str->add("glow_color");
24736strings[4271] = str->add("glow2_color");
24737strings[4272] = str->add("backing_color");
24738strings[4273] = str->add("strikethrough_color");
24739strings[4274] = str->add("align");
24740strings[4275] = str->add("valign");
24741strings[4276] = str->add("wrap");
24742strings[4277] = str->add("left_margin");
24743strings[4278] = str->add("right_margin");
24744strings[4279] = str->add("underline");
24745strings[4280] = str->add("strikethrough");
24746strings[4281] = str->add("backing");
24747strings[4282] = str->add("style");
24748strings[4283] = str->add("tabstops");
24749strings[4274] = str->add(strings[4274]);
24750strings[4284] = str->add("center");
24751str->del(strings[4274]);
24752str->del(strings[4284]);
24753strings[4265] = str->add(strings[4265]);
24754strings[4285] = str->add("#000");
24755str->del(strings[4265]);
24756str->del(strings[4285]);
24757strings[4282] = str->add(strings[4282]);
24758strings[4286] = str->add("shadow");
24759str->del(strings[4282]);
24760str->del(strings[4286]);
24761strings[4269] = str->add(strings[4269]);
24762strings[4287] = str->add("#ffffff80");
24763str->del(strings[4269]);
24764str->del(strings[4287]);
24765strings[4276] = str->add(strings[4276]);
24766strings[4288] = str->add("word");
24767str->del(strings[4276]);
24768str->del(strings[4288]);
24769strings[4264] = str->add(strings[4264]);
24770strings[469] = str->add(strings[469]);
24771strings[469] = str->add(strings[469]);
24772str->del(strings[4264]);
24773str->del(strings[469]);
24774strings[4263] = str->add(strings[4263]);
24775strings[4289] = str->add("10.000000");
24776str->del(strings[4263]);
24777str->del(strings[4289]);
24778strings[4261] = str->add(strings[4261]);
24779strings[470] = str->add(strings[470]);
24780strings[470] = str->add(strings[470]);
24781str->del(strings[4261]);
24782str->del(strings[470]);
24783strings[470] = str->add(strings[470]);
24784strings[469] = str->add(strings[469]);
24785strings[4282] = str->add(strings[4282]);
24786strings[4290] = str->add("soft_shadow");
24787str->del(strings[4282]);
24788str->del(strings[4290]);
24789strings[4265] = str->add(strings[4265]);
24790strings[4291] = str->add("#fff");
24791str->del(strings[4265]);
24792str->del(strings[4291]);
24793strings[4269] = str->add(strings[4269]);
24794strings[4292] = str->add("#00000020");
24795str->del(strings[4269]);
24796str->del(strings[4292]);
24797strings[4263] = str->add(strings[4263]);
24798strings[4293] = str->add("12.000000");
24799str->del(strings[4263]);
24800str->del(strings[4293]);
24801strings[4261] = str->add(strings[4261]);
24802strings[471] = str->add(strings[471]);
24803str->del(strings[470]);
24804strings[471] = str->add(strings[471]);
24805str->del(strings[4261]);
24806str->del(strings[471]);
24807strings[382] = str->add(strings[382]);
24808strings[382] = str->add(strings[382]);
24809strings[382] = str->add(strings[382]);
24810strings[382] = str->add(strings[382]);
24811strings[382] = str->add(strings[382]);
24812strings[382] = str->add(strings[382]);
24813strings[382] = str->add(strings[382]);
24814strings[382] = str->add(strings[382]);
24815strings[382] = str->add(strings[382]);
24816strings[382] = str->add(strings[382]);
24817strings[382] = str->add(strings[382]);
24818strings[382] = str->add(strings[382]);
24819strings[382] = str->add(strings[382]);
24820strings[382] = str->add(strings[382]);
24821strings[382] = str->add(strings[382]);
24822strings[382] = str->add(strings[382]);
24823strings[382] = str->add(strings[382]);
24824strings[382] = str->add(strings[382]);
24825strings[382] = str->add(strings[382]);
24826strings[382] = str->add(strings[382]);
24827strings[382] = str->add(strings[382]);
24828strings[382] = str->add(strings[382]);
24829str->del(strings[471]);
24830str->del(strings[469]);
24831str->del(strings[382]);
24832str->del(strings[382]);
24833str->del(strings[382]);
24834str->del(strings[382]);
24835str->del(strings[382]);
24836str->del(strings[382]);
24837str->del(strings[382]);
24838str->del(strings[382]);
24839str->del(strings[382]);
24840str->del(strings[382]);
24841str->del(strings[382]);
24842str->del(strings[382]);
24843str->del(strings[382]);
24844str->del(strings[382]);
24845str->del(strings[382]);
24846str->del(strings[382]);
24847str->del(strings[382]);
24848str->del(strings[382]);
24849str->del(strings[382]);
24850str->del(strings[382]);
24851str->del(strings[382]);
24852str->del(strings[470]);
24853str->del(strings[469]);
24854str->del(strings[382]);
24855str->del(strings[4261]);
24856str->del(strings[4262]);
24857str->del(strings[4263]);
24858str->del(strings[4264]);
24859str->del(strings[4265]);
24860str->del(strings[4266]);
24861str->del(strings[4267]);
24862str->del(strings[4268]);
24863str->del(strings[4269]);
24864str->del(strings[4270]);
24865str->del(strings[4271]);
24866str->del(strings[4272]);
24867str->del(strings[4273]);
24868str->del(strings[4274]);
24869str->del(strings[4275]);
24870str->del(strings[4276]);
24871str->del(strings[4277]);
24872str->del(strings[4278]);
24873str->del(strings[4279]);
24874str->del(strings[4280]);
24875str->del(strings[4281]);
24876str->del(strings[4282]);
24877str->del(strings[4283]);
24878strings[469] = str->add(strings[469]);
24879strings[4193] = str->add(strings[4193]);
24880strings[469] = str->add(strings[469]);
24881strings[4294] = str->add("images/313");
24882strings[4295] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/313");
24883strings[469] = str->add(strings[469]);
24884strings[4294] = str->add(strings[4294]);
24885strings[469] = str->add(strings[469]);
24886strings[4296] = str->add("images/254");
24887strings[4297] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/254");
24888strings[469] = str->add(strings[469]);
24889strings[4296] = str->add(strings[4296]);
24890strings[469] = str->add(strings[469]);
24891strings[4298] = str->add("images/407");
24892strings[4299] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/407");
24893strings[469] = str->add(strings[469]);
24894strings[4298] = str->add(strings[4298]);
24895strings[469] = str->add(strings[469]);
24896strings[4298] = str->add(strings[4298]);
24897strings[469] = str->add(strings[469]);
24898strings[4300] = str->add("images/288");
24899strings[4301] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/288");
24900strings[469] = str->add(strings[469]);
24901strings[4300] = str->add(strings[4300]);
24902strings[469] = str->add(strings[469]);
24903strings[4302] = str->add("images/289");
24904strings[4303] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/289");
24905strings[469] = str->add(strings[469]);
24906strings[4302] = str->add(strings[4302]);
24907strings[469] = str->add(strings[469]);
24908strings[4304] = str->add("images/290");
24909strings[4305] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/290");
24910strings[469] = str->add(strings[469]);
24911strings[4304] = str->add(strings[4304]);
24912strings[469] = str->add(strings[469]);
24913strings[4306] = str->add("images/291");
24914strings[4307] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/291");
24915strings[469] = str->add(strings[469]);
24916strings[4306] = str->add(strings[4306]);
24917strings[469] = str->add(strings[469]);
24918strings[4308] = str->add("images/292");
24919strings[4309] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/292");
24920strings[469] = str->add(strings[469]);
24921strings[4308] = str->add(strings[4308]);
24922strings[469] = str->add(strings[469]);
24923strings[4310] = str->add("images/293");
24924strings[4311] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/293");
24925strings[469] = str->add(strings[469]);
24926strings[4310] = str->add(strings[4310]);
24927strings[469] = str->add(strings[469]);
24928strings[4312] = str->add("images/294");
24929strings[4313] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/294");
24930strings[469] = str->add(strings[469]);
24931strings[4312] = str->add(strings[4312]);
24932strings[469] = str->add(strings[469]);
24933strings[4314] = str->add("images/295");
24934strings[4315] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/295");
24935strings[469] = str->add(strings[469]);
24936strings[4314] = str->add(strings[4314]);
24937strings[469] = str->add(strings[469]);
24938strings[4316] = str->add("images/296");
24939strings[4317] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/296");
24940strings[469] = str->add(strings[469]);
24941strings[4316] = str->add(strings[4316]);
24942strings[469] = str->add(strings[469]);
24943strings[4318] = str->add("images/297");
24944strings[4319] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/297");
24945strings[469] = str->add(strings[469]);
24946strings[4318] = str->add(strings[4318]);
24947strings[469] = str->add(strings[469]);
24948strings[4320] = str->add("images/298");
24949strings[4321] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/298");
24950strings[469] = str->add(strings[469]);
24951strings[4320] = str->add(strings[4320]);
24952strings[469] = str->add(strings[469]);
24953strings[4322] = str->add("images/299");
24954strings[4323] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/299");
24955strings[469] = str->add(strings[469]);
24956strings[4322] = str->add(strings[4322]);
24957strings[469] = str->add(strings[469]);
24958strings[4324] = str->add("images/300");
24959strings[4325] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/300");
24960strings[469] = str->add(strings[469]);
24961strings[4324] = str->add(strings[4324]);
24962strings[469] = str->add(strings[469]);
24963strings[4326] = str->add("images/301");
24964strings[4327] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/301");
24965strings[469] = str->add(strings[469]);
24966strings[4326] = str->add(strings[4326]);
24967strings[469] = str->add(strings[469]);
24968strings[4328] = str->add("images/302");
24969strings[4329] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/302");
24970strings[469] = str->add(strings[469]);
24971strings[4328] = str->add(strings[4328]);
24972strings[469] = str->add(strings[469]);
24973strings[4330] = str->add("images/303");
24974strings[4331] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/303");
24975strings[469] = str->add(strings[469]);
24976strings[4330] = str->add(strings[4330]);
24977strings[469] = str->add(strings[469]);
24978strings[4332] = str->add("images/304");
24979strings[4333] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/304");
24980strings[469] = str->add(strings[469]);
24981strings[4332] = str->add(strings[4332]);
24982strings[469] = str->add(strings[469]);
24983strings[4334] = str->add("images/305");
24984strings[4335] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/305");
24985strings[469] = str->add(strings[469]);
24986strings[4334] = str->add(strings[4334]);
24987strings[469] = str->add(strings[469]);
24988strings[4336] = str->add("images/268");
24989strings[4337] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/268");
24990strings[469] = str->add(strings[469]);
24991strings[4336] = str->add(strings[4336]);
24992strings[3879] = str->add(strings[3879]);
24993strings[3879] = str->add(strings[3879]);
24994strings[361] = str->add(strings[361]);
24995strings[362] = str->add(strings[362]);
24996strings[361] = str->add(strings[361]);
24997str->del(strings[361]);
24998strings[362] = str->add(strings[362]);
24999str->del(strings[362]);
25000strings[4338] = str->add("e,state,unfocused");
25001strings[3706] = str->add(strings[3706]);
25002str->del(strings[3705]);
25003str->del(strings[3706]);
25004str->del(strings[3707]);
25005str->del(strings[3706]);
25006str->del(strings[3709]);
25007strings[4339] = str->add("program,start");
25008strings[4340] = str->add("go_active_pre");
25009strings[1932] = str->add(strings[1932]);
25010strings[4340] = str->add(strings[4340]);
25011strings[4339] = str->add(strings[4339]);
25012strings[4341] = str->add("go_active1");
25013strings[1932] = str->add(strings[1932]);
25014strings[4341] = str->add(strings[4341]);
25015strings[4339] = str->add(strings[4339]);
25016strings[4342] = str->add("go_activeb1");
25017strings[4339] = str->add(strings[4339]);
25018strings[4343] = str->add("go_active29");
25019strings[1932] = str->add(strings[1932]);
25020strings[4343] = str->add(strings[4343]);
25021strings[4339] = str->add(strings[4339]);
25022strings[4344] = str->add("go_activeb29");
25023strings[4339] = str->add(strings[4339]);
25024strings[4345] = str->add("anim_sky1a");
25025strings[4339] = str->add(strings[4339]);
25026strings[4346] = str->add("anim_sky4a");
25027strings[4339] = str->add(strings[4339]);
25028strings[4347] = str->add("anim_sky2a");
25029strings[4339] = str->add(strings[4339]);
25030strings[4348] = str->add("anim_sky3a");
25031str->del(strings[1841]);
25032str->del(strings[4176]);
25033strings[4339] = str->add(strings[4339]);
25034strings[4349] = str->add("off");
25035str->del(strings[4338]);
25036str->del(strings[3706]);
25037str->del(strings[4339]);
25038str->del(strings[4340]);
25039str->del(strings[1932]);
25040str->del(strings[4340]);
25041str->del(strings[4339]);
25042str->del(strings[4341]);
25043str->del(strings[1932]);
25044str->del(strings[4341]);
25045str->del(strings[4339]);
25046str->del(strings[4342]);
25047str->del(strings[4339]);
25048str->del(strings[4343]);
25049str->del(strings[1932]);
25050str->del(strings[4343]);
25051str->del(strings[4339]);
25052str->del(strings[4344]);
25053str->del(strings[4339]);
25054str->del(strings[4345]);
25055str->del(strings[4339]);
25056str->del(strings[4346]);
25057str->del(strings[4339]);
25058str->del(strings[4347]);
25059str->del(strings[4339]);
25060str->del(strings[4348]);
25061str->del(strings[4339]);
25062str->del(strings[4349]);
25063strings[4350] = str->add("e,action,mouse,move");
25064strings[4351] = str->add("e");
25065strings[4350] = str->add(strings[4350]);
25066strings[4351] = str->add(strings[4351]);
25067strings[4350] = str->add(strings[4350]);
25068strings[4351] = str->add(strings[4351]);
25069strings[4350] = str->add(strings[4350]);
25070strings[4351] = str->add(strings[4351]);
25071str->del(strings[4350]);
25072str->del(strings[4351]);
25073str->del(strings[4350]);
25074str->del(strings[4351]);
25075str->del(strings[4350]);
25076str->del(strings[4351]);
25077str->del(strings[4350]);
25078str->del(strings[4351]);
25079strings[1933] = str->add(strings[1933]);
25080str->del(strings[1933]);
25081str->del(strings[64]);
25082str->del(strings[2634]);
25083strings[1933] = str->add(strings[1933]);
25084str->del(strings[1933]);
25085str->del(strings[64]);
25086str->del(strings[2584]);
25087strings[1933] = str->add(strings[1933]);
25088str->del(strings[1933]);
25089str->del(strings[469]);
25090str->del(strings[2686]);
25091strings[1933] = str->add(strings[1933]);
25092str->del(strings[1933]);
25093str->del(strings[2572]);
25094str->del(strings[2572]);
25095str->del(strings[2572]);
25096str->del(strings[64]);
25097str->del(strings[2585]);
25098strings[1933] = str->add(strings[1933]);
25099str->del(strings[1933]);
25100str->del(strings[64]);
25101str->del(strings[2586]);
25102strings[1933] = str->add(strings[1933]);
25103str->del(strings[1933]);
25104str->del(strings[64]);
25105str->del(strings[2634]);
25106strings[1933] = str->add(strings[1933]);
25107str->del(strings[1933]);
25108str->del(strings[64]);
25109str->del(strings[2584]);
25110strings[1933] = str->add(strings[1933]);
25111str->del(strings[1933]);
25112str->del(strings[469]);
25113str->del(strings[2715]);
25114strings[1933] = str->add(strings[1933]);
25115str->del(strings[1933]);
25116str->del(strings[2231]);
25117str->del(strings[2231]);
25118str->del(strings[2231]);
25119str->del(strings[64]);
25120str->del(strings[2585]);
25121strings[1933] = str->add(strings[1933]);
25122str->del(strings[1933]);
25123str->del(strings[64]);
25124str->del(strings[2586]);
25125strings[1933] = str->add(strings[1933]);
25126str->del(strings[1933]);
25127str->del(strings[64]);
25128str->del(strings[2583]);
25129strings[1933] = str->add(strings[1933]);
25130str->del(strings[1933]);
25131str->del(strings[64]);
25132str->del(strings[2584]);
25133strings[1933] = str->add(strings[1933]);
25134str->del(strings[1933]);
25135str->del(strings[469]);
25136str->del(strings[2691]);
25137strings[1933] = str->add(strings[1933]);
25138str->del(strings[1933]);
25139str->del(strings[2338]);
25140str->del(strings[2338]);
25141str->del(strings[2338]);
25142str->del(strings[64]);
25143str->del(strings[2585]);
25144strings[1933] = str->add(strings[1933]);
25145str->del(strings[1933]);
25146str->del(strings[64]);
25147str->del(strings[2582]);
25148strings[1933] = str->add(strings[1933]);
25149str->del(strings[1933]);
25150str->del(strings[64]);
25151str->del(strings[2634]);
25152strings[1933] = str->add(strings[1933]);
25153str->del(strings[1933]);
25154str->del(strings[64]);
25155str->del(strings[2584]);
25156strings[1933] = str->add(strings[1933]);
25157str->del(strings[1933]);
25158str->del(strings[469]);
25159str->del(strings[2687]);
25160strings[1933] = str->add(strings[1933]);
25161str->del(strings[1933]);
25162str->del(strings[1619]);
25163str->del(strings[1619]);
25164str->del(strings[1619]);
25165str->del(strings[64]);
25166str->del(strings[2585]);
25167strings[1933] = str->add(strings[1933]);
25168str->del(strings[1933]);
25169str->del(strings[64]);
25170str->del(strings[2586]);
25171strings[1933] = str->add(strings[1933]);
25172str->del(strings[1933]);
25173str->del(strings[64]);
25174str->del(strings[2634]);
25175strings[1933] = str->add(strings[1933]);
25176str->del(strings[1933]);
25177str->del(strings[64]);
25178str->del(strings[2584]);
25179strings[1933] = str->add(strings[1933]);
25180str->del(strings[1933]);
25181str->del(strings[469]);
25182str->del(strings[2682]);
25183strings[1933] = str->add(strings[1933]);
25184str->del(strings[1933]);
25185str->del(strings[2552]);
25186str->del(strings[2552]);
25187str->del(strings[2552]);
25188str->del(strings[64]);
25189str->del(strings[2585]);
25190strings[1933] = str->add(strings[1933]);
25191str->del(strings[1933]);
25192str->del(strings[64]);
25193str->del(strings[2586]);
25194strings[1933] = str->add(strings[1933]);
25195str->del(strings[1933]);
25196str->del(strings[64]);
25197str->del(strings[2582]);
25198strings[1933] = str->add(strings[1933]);
25199str->del(strings[1933]);
25200str->del(strings[64]);
25201str->del(strings[2634]);
25202strings[1933] = str->add(strings[1933]);
25203str->del(strings[1933]);
25204str->del(strings[64]);
25205str->del(strings[2584]);
25206strings[1933] = str->add(strings[1933]);
25207str->del(strings[1933]);
25208str->del(strings[469]);
25209str->del(strings[2671]);
25210strings[1933] = str->add(strings[1933]);
25211str->del(strings[1933]);
25212str->del(strings[1712]);
25213str->del(strings[1712]);
25214str->del(strings[1712]);
25215str->del(strings[64]);
25216str->del(strings[2585]);
25217strings[1933] = str->add(strings[1933]);
25218str->del(strings[1933]);
25219str->del(strings[64]);
25220str->del(strings[2586]);
25221strings[1933] = str->add(strings[1933]);
25222str->del(strings[1933]);
25223str->del(strings[64]);
25224str->del(strings[2582]);
25225strings[1933] = str->add(strings[1933]);
25226str->del(strings[1933]);
25227str->del(strings[64]);
25228str->del(strings[2634]);
25229strings[1933] = str->add(strings[1933]);
25230str->del(strings[1933]);
25231str->del(strings[64]);
25232str->del(strings[2584]);
25233strings[1933] = str->add(strings[1933]);
25234str->del(strings[1933]);
25235str->del(strings[469]);
25236str->del(strings[2688]);
25237strings[1933] = str->add(strings[1933]);
25238str->del(strings[1933]);
25239str->del(strings[2863]);
25240str->del(strings[2863]);
25241str->del(strings[2863]);
25242str->del(strings[64]);
25243str->del(strings[2585]);
25244strings[1933] = str->add(strings[1933]);
25245str->del(strings[1933]);
25246str->del(strings[64]);
25247str->del(strings[2586]);
25248strings[1933] = str->add(strings[1933]);
25249str->del(strings[1933]);
25250str->del(strings[64]);
25251str->del(strings[2582]);
25252strings[1933] = str->add(strings[1933]);
25253str->del(strings[1933]);
25254str->del(strings[64]);
25255str->del(strings[2634]);
25256strings[1933] = str->add(strings[1933]);
25257str->del(strings[1933]);
25258str->del(strings[64]);
25259str->del(strings[2584]);
25260strings[1933] = str->add(strings[1933]);
25261str->del(strings[1933]);
25262str->del(strings[469]);
25263str->del(strings[2690]);
25264strings[1933] = str->add(strings[1933]);
25265str->del(strings[1933]);
25266str->del(strings[1721]);
25267str->del(strings[1721]);
25268str->del(strings[1721]);
25269str->del(strings[64]);
25270str->del(strings[2585]);
25271strings[1933] = str->add(strings[1933]);
25272str->del(strings[1933]);
25273str->del(strings[64]);
25274str->del(strings[2586]);
25275strings[1933] = str->add(strings[1933]);
25276str->del(strings[1933]);
25277str->del(strings[2571]);
25278str->del(strings[2571]);
25279str->del(strings[2571]);
25280str->del(strings[64]);
25281str->del(strings[2581]);
25282str->del(strings[64]);
25283str->del(strings[2886]);
25284str->del(strings[64]);
25285str->del(strings[2888]);
25286str->del(strings[469]);
25287str->del(strings[2871]);
25288str->del(strings[2572]);
25289str->del(strings[385]);
25290str->del(strings[64]);
25291str->del(strings[2913]);
25292str->del(strings[64]);
25293str->del(strings[2886]);
25294str->del(strings[64]);
25295str->del(strings[2888]);
25296str->del(strings[469]);
25297str->del(strings[2890]);
25298str->del(strings[2231]);
25299str->del(strings[385]);
25300str->del(strings[64]);
25301str->del(strings[2913]);
25302str->del(strings[64]);
25303str->del(strings[2886]);
25304str->del(strings[64]);
25305str->del(strings[2888]);
25306str->del(strings[469]);
25307str->del(strings[2892]);
25308str->del(strings[2338]);
25309str->del(strings[385]);
25310str->del(strings[64]);
25311str->del(strings[2915]);
25312str->del(strings[64]);
25313str->del(strings[2886]);
25314str->del(strings[64]);
25315str->del(strings[2888]);
25316str->del(strings[469]);
25317str->del(strings[2894]);
25318str->del(strings[1619]);
25319str->del(strings[385]);
25320str->del(strings[64]);
25321str->del(strings[2913]);
25322str->del(strings[64]);
25323str->del(strings[2886]);
25324str->del(strings[64]);
25325str->del(strings[2888]);
25326str->del(strings[469]);
25327str->del(strings[2896]);
25328str->del(strings[2552]);
25329str->del(strings[385]);
25330str->del(strings[64]);
25331str->del(strings[2913]);
25332str->del(strings[64]);
25333str->del(strings[2915]);
25334str->del(strings[64]);
25335str->del(strings[2886]);
25336str->del(strings[64]);
25337str->del(strings[2888]);
25338str->del(strings[469]);
25339str->del(strings[2898]);
25340str->del(strings[469]);
25341str->del(strings[2900]);
25342str->del(strings[1712]);
25343str->del(strings[385]);
25344str->del(strings[64]);
25345str->del(strings[2913]);
25346str->del(strings[64]);
25347str->del(strings[2915]);
25348str->del(strings[64]);
25349str->del(strings[2886]);
25350str->del(strings[64]);
25351str->del(strings[2888]);
25352str->del(strings[469]);
25353str->del(strings[2902]);
25354str->del(strings[2863]);
25355str->del(strings[385]);
25356str->del(strings[64]);
25357str->del(strings[2913]);
25358str->del(strings[64]);
25359str->del(strings[2915]);
25360str->del(strings[64]);
25361str->del(strings[2886]);
25362str->del(strings[64]);
25363str->del(strings[2888]);
25364str->del(strings[469]);
25365str->del(strings[2904]);
25366str->del(strings[1721]);
25367str->del(strings[385]);
25368str->del(strings[64]);
25369str->del(strings[2913]);
25370str->del(strings[64]);
25371str->del(strings[1949]);
25372str->del(strings[64]);
25373str->del(strings[1880]);
25374str->del(strings[64]);
25375str->del(strings[1876]);
25376str->del(strings[2571]);
25377str->del(strings[379]);
25378str->del(strings[64]);
25379str->del(strings[1874]);
25380str->del(strings[361]);
25381str->del(strings[362]);
25382strings[1933] = str->add(strings[1933]);
25383str->del(strings[1933]);
25384str->del(strings[64]);
25385str->del(strings[2583]);
25386strings[1933] = str->add(strings[1933]);
25387str->del(strings[1933]);
25388str->del(strings[64]);
25389str->del(strings[2584]);
25390strings[1933] = str->add(strings[1933]);
25391str->del(strings[1933]);
25392str->del(strings[469]);
25393str->del(strings[2671]);
25394strings[1933] = str->add(strings[1933]);
25395str->del(strings[1933]);
25396str->del(strings[2862]);
25397str->del(strings[2862]);
25398str->del(strings[2862]);
25399str->del(strings[64]);
25400str->del(strings[2585]);
25401strings[1933] = str->add(strings[1933]);
25402str->del(strings[1933]);
25403str->del(strings[64]);
25404str->del(strings[2583]);
25405strings[1933] = str->add(strings[1933]);
25406str->del(strings[1933]);
25407str->del(strings[64]);
25408str->del(strings[2584]);
25409strings[1933] = str->add(strings[1933]);
25410str->del(strings[1933]);
25411str->del(strings[469]);
25412str->del(strings[2680]);
25413strings[1933] = str->add(strings[1933]);
25414str->del(strings[1933]);
25415str->del(strings[2514]);
25416str->del(strings[2514]);
25417str->del(strings[2514]);
25418str->del(strings[64]);
25419str->del(strings[2585]);
25420strings[1933] = str->add(strings[1933]);
25421str->del(strings[1933]);
25422str->del(strings[64]);
25423str->del(strings[2582]);
25424strings[1933] = str->add(strings[1933]);
25425str->del(strings[1933]);
25426str->del(strings[64]);
25427str->del(strings[2583]);
25428strings[1933] = str->add(strings[1933]);
25429str->del(strings[1933]);
25430str->del(strings[64]);
25431str->del(strings[2584]);
25432strings[1933] = str->add(strings[1933]);
25433str->del(strings[1933]);
25434str->del(strings[469]);
25435str->del(strings[2672]);
25436strings[1933] = str->add(strings[1933]);
25437str->del(strings[1933]);
25438str->del(strings[1713]);
25439str->del(strings[1713]);
25440str->del(strings[1713]);
25441str->del(strings[64]);
25442str->del(strings[2585]);
25443strings[1933] = str->add(strings[1933]);
25444str->del(strings[1933]);
25445str->del(strings[64]);
25446str->del(strings[2583]);
25447strings[1933] = str->add(strings[1933]);
25448str->del(strings[1933]);
25449str->del(strings[64]);
25450str->del(strings[2584]);
25451strings[1933] = str->add(strings[1933]);
25452str->del(strings[1933]);
25453str->del(strings[469]);
25454str->del(strings[2673]);
25455strings[1933] = str->add(strings[1933]);
25456str->del(strings[1933]);
25457str->del(strings[1714]);
25458str->del(strings[1714]);
25459str->del(strings[1714]);
25460str->del(strings[64]);
25461str->del(strings[2585]);
25462strings[1933] = str->add(strings[1933]);
25463str->del(strings[1933]);
25464str->del(strings[1842]);
25465str->del(strings[1842]);
25466str->del(strings[64]);
25467str->del(strings[2581]);
25468str->del(strings[64]);
25469str->del(strings[2886]);
25470str->del(strings[64]);
25471str->del(strings[2888]);
25472str->del(strings[469]);
25473str->del(strings[2898]);
25474str->del(strings[469]);
25475str->del(strings[2900]);
25476str->del(strings[2862]);
25477str->del(strings[385]);
25478str->del(strings[64]);
25479str->del(strings[2886]);
25480str->del(strings[64]);
25481str->del(strings[2888]);
25482str->del(strings[469]);
25483str->del(strings[3094]);
25484str->del(strings[2514]);
25485str->del(strings[385]);
25486str->del(strings[64]);
25487str->del(strings[2915]);
25488str->del(strings[64]);
25489str->del(strings[2886]);
25490str->del(strings[64]);
25491str->del(strings[2888]);
25492str->del(strings[469]);
25493str->del(strings[3130]);
25494str->del(strings[1713]);
25495str->del(strings[385]);
25496str->del(strings[64]);
25497str->del(strings[2886]);
25498str->del(strings[64]);
25499str->del(strings[2888]);
25500str->del(strings[469]);
25501str->del(strings[3132]);
25502str->del(strings[1714]);
25503str->del(strings[385]);
25504str->del(strings[64]);
25505str->del(strings[1949]);
25506str->del(strings[64]);
25507str->del(strings[1880]);
25508str->del(strings[64]);
25509str->del(strings[1876]);
25510str->del(strings[379]);
25511str->del(strings[64]);
25512str->del(strings[1874]);
25513str->del(strings[361]);
25514str->del(strings[362]);
25515str->del(strings[2074]);
25516str->del(strings[3237]);
25517str->del(strings[2077]);
25518str->del(strings[3238]);
25519str->del(strings[2070]);
25520str->del(strings[3239]);
25521str->del(strings[469]);
25522str->del(strings[2686]);
25523str->del(strings[2572]);
25524str->del(strings[3220]);
25525str->del(strings[3221]);
25526str->del(strings[3222]);
25527str->del(strings[3224]);
25528str->del(strings[3223]);
25529str->del(strings[3225]);
25530str->del(strings[3226]);
25531str->del(strings[3227]);
25532str->del(strings[3228]);
25533str->del(strings[1721]);
25534str->del(strings[3229]);
25535str->del(strings[469]);
25536str->del(strings[2715]);
25537str->del(strings[2231]);
25538str->del(strings[469]);
25539str->del(strings[2691]);
25540str->del(strings[2338]);
25541str->del(strings[469]);
25542str->del(strings[2687]);
25543str->del(strings[2860]);
25544str->del(strings[469]);
25545str->del(strings[2711]);
25546str->del(strings[2494]);
25547str->del(strings[2861]);
25548str->del(strings[469]);
25549str->del(strings[2687]);
25550str->del(strings[1619]);
25551str->del(strings[3155]);
25552str->del(strings[469]);
25553str->del(strings[2682]);
25554str->del(strings[1731]);
25555str->del(strings[469]);
25556str->del(strings[2683]);
25557str->del(strings[3156]);
25558str->del(strings[469]);
25559str->del(strings[2682]);
25560str->del(strings[2552]);
25561str->del(strings[469]);
25562str->del(strings[2671]);
25563str->del(strings[1712]);
25564str->del(strings[469]);
25565str->del(strings[2688]);
25566str->del(strings[2224]);
25567str->del(strings[469]);
25568str->del(strings[2685]);
25569str->del(strings[4]);
25570str->del(strings[1926]);
25571str->del(strings[3083]);
25572str->del(strings[1925]);
25573str->del(strings[469]);
25574str->del(strings[2711]);
25575str->del(strings[2494]);
25576str->del(strings[469]);
25577str->del(strings[2680]);
25578str->del(strings[2514]);
25579str->del(strings[469]);
25580str->del(strings[2713]);
25581str->del(strings[2536]);
25582str->del(strings[469]);
25583str->del(strings[2688]);
25584str->del(strings[2863]);
25585str->del(strings[469]);
25586str->del(strings[2708]);
25587str->del(strings[3001]);
25588str->del(strings[469]);
25589str->del(strings[2677]);
25590str->del(strings[1726]);
25591str->del(strings[469]);
25592str->del(strings[2678]);
25593str->del(strings[3002]);
25594str->del(strings[469]);
25595str->del(strings[2676]);
25596str->del(strings[1724]);
25597str->del(strings[469]);
25598str->del(strings[2675]);
25599str->del(strings[1722]);
25600str->del(strings[469]);
25601str->del(strings[2674]);
25602str->del(strings[3003]);
25603str->del(strings[469]);
25604str->del(strings[2690]);
25605str->del(strings[1721]);
25606str->del(strings[2571]);
25607str->del(strings[469]);
25608str->del(strings[2671]);
25609str->del(strings[2862]);
25610str->del(strings[469]);
25611str->del(strings[2680]);
25612str->del(strings[2514]);
25613str->del(strings[469]);
25614str->del(strings[2672]);
25615str->del(strings[1713]);
25616str->del(strings[469]);
25617str->del(strings[2673]);
25618str->del(strings[1714]);
25619strings[863] = str->add(strings[863]);
25620strings[4352] = str->add("base/theme/borders");
25621strings[64] = str->add(strings[64]);
25622strings[2578] = str->add(strings[2578]);
25623strings[2578] = str->add(strings[2578]);
25624strings[64] = str->add(strings[64]);
25625strings[64] = str->add(strings[64]);
25626strings[4353] = str->add("load");
25627strings[332] = str->add(strings[332]);
25628strings[4354] = str->add("resize");
25629str->del(strings[64]);
25630strings[379] = str->add(strings[379]);
25631strings[332] = str->add(strings[332]);
25632strings[332] = str->add(strings[332]);
25633strings[1842] = str->add(strings[1842]);
25634str->del(strings[332]);
25635strings[64] = str->add(strings[64]);
25636strings[1865] = str->add(strings[1865]);
25637strings[4355] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/2");
25638strings[64] = str->add(strings[64]);
25639strings[1865] = str->add(strings[1865]);
25640strings[332] = str->add(strings[332]);
25641str->del(strings[332]);
25642strings[64] = str->add(strings[64]);
25643strings[2276] = str->add(strings[2276]);
25644strings[4356] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/16");
25645strings[64] = str->add(strings[64]);
25646strings[2276] = str->add(strings[2276]);
25647strings[64] = str->add(strings[64]);
25648strings[3259] = str->add(strings[3259]);
25649strings[4357] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/17");
25650strings[64] = str->add(strings[64]);
25651strings[3259] = str->add(strings[3259]);
25652strings[64] = str->add(strings[64]);
25653strings[3259] = str->add(strings[3259]);
25654strings[64] = str->add(strings[64]);
25655strings[2292] = str->add(strings[2292]);
25656strings[4358] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/18");
25657strings[64] = str->add(strings[64]);
25658strings[2292] = str->add(strings[2292]);
25659strings[332] = str->add(strings[332]);
25660str->del(strings[332]);
25661strings[332] = str->add(strings[332]);
25662str->del(strings[1842]);
25663strings[332] = str->add(strings[332]);
25664strings[64] = str->add(strings[64]);
25665strings[1880] = str->add(strings[1880]);
25666strings[64] = str->add(strings[64]);
25667strings[3279] = str->add(strings[3279]);
25668strings[4359] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/20");
25669strings[64] = str->add(strings[64]);
25670strings[3279] = str->add(strings[3279]);
25671strings[64] = str->add(strings[64]);
25672strings[2310] = str->add(strings[2310]);
25673strings[4360] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/19");
25674strings[64] = str->add(strings[64]);
25675strings[2310] = str->add(strings[2310]);
25676strings[64] = str->add(strings[64]);
25677strings[1876] = str->add(strings[1876]);
25678str->del(strings[64]);
25679strings[379] = str->add(strings[379]);
25680strings[332] = str->add(strings[332]);
25681strings[332] = str->add(strings[332]);
25682strings[332] = str->add(strings[332]);
25683strings[64] = str->add(strings[64]);
25684strings[1874] = str->add(strings[1874]);
25685strings[2085] = str->add(strings[2085]);
25686strings[2085] = str->add(strings[2085]);
25687strings[4354] = str->add(strings[4354]);
25688strings[1841] = str->add(strings[1841]);
25689strings[469] = str->add(strings[469]);
25690strings[2671] = str->add(strings[2671]);
25691strings[4353] = str->add(strings[4353]);
25692strings[1841] = str->add(strings[1841]);
25693str->del(strings[332]);
25694strings[332] = str->add(strings[332]);
25695str->del(strings[332]);
25696strings[332] = str->add(strings[332]);
25697str->del(strings[332]);
25698strings[332] = str->add(strings[332]);
25699str->del(strings[332]);
25700strings[332] = str->add(strings[332]);
25701strings[469] = str->add(strings[469]);
25702strings[2898] = str->add(strings[2898]);
25703strings[469] = str->add(strings[469]);
25704strings[2900] = str->add(strings[2900]);
25705strings[4354] = str->add(strings[4354]);
25706strings[4361] = str->add("e,state,focused");
25707strings[4362] = str->add("e");
25708strings[4361] = str->add(strings[4361]);
25709strings[4362] = str->add(strings[4362]);
25710str->del(strings[190]);
25711str->del(strings[331]);
25712str->del(strings[332]);
25713str->del(strings[193]);
25714strings[190] = str->add(strings[190]);
25715strings[4363] = str->add("_about");
25716strings[332] = str->add(strings[332]);
25717strings[193] = str->add(strings[193]);
25718strings[4364] = str->add("font");
25719strings[4365] = str->add("font_fallbacks");
25720strings[4366] = str->add("font_size");
25721strings[4367] = str->add("font_source");
25722strings[4368] = str->add("color");
25723strings[4369] = str->add("underline_color");
25724strings[4370] = str->add("underline2_color");
25725strings[4371] = str->add("outline_color");
25726strings[4372] = str->add("shadow_color");
25727strings[4373] = str->add("glow_color");
25728strings[4374] = str->add("glow2_color");
25729strings[4375] = str->add("backing_color");
25730strings[4376] = str->add("strikethrough_color");
25731strings[4377] = str->add("align");
25732strings[4378] = str->add("valign");
25733strings[4379] = str->add("wrap");
25734strings[4380] = str->add("left_margin");
25735strings[4381] = str->add("right_margin");
25736strings[4382] = str->add("underline");
25737strings[4383] = str->add("strikethrough");
25738strings[4384] = str->add("backing");
25739strings[4385] = str->add("style");
25740strings[4386] = str->add("tabstops");
25741strings[4377] = str->add(strings[4377]);
25742strings[4387] = str->add("center");
25743str->del(strings[4377]);
25744str->del(strings[4387]);
25745strings[4368] = str->add(strings[4368]);
25746strings[4388] = str->add("#000");
25747str->del(strings[4368]);
25748str->del(strings[4388]);
25749strings[4385] = str->add(strings[4385]);
25750strings[4389] = str->add("shadow");
25751str->del(strings[4385]);
25752str->del(strings[4389]);
25753strings[4372] = str->add(strings[4372]);
25754strings[4390] = str->add("#ffffff80");
25755str->del(strings[4372]);
25756str->del(strings[4390]);
25757strings[4379] = str->add(strings[4379]);
25758strings[4391] = str->add("word");
25759str->del(strings[4379]);
25760str->del(strings[4391]);
25761strings[4367] = str->add(strings[4367]);
25762strings[469] = str->add(strings[469]);
25763strings[469] = str->add(strings[469]);
25764str->del(strings[4367]);
25765str->del(strings[469]);
25766strings[4366] = str->add(strings[4366]);
25767strings[4392] = str->add("10.000000");
25768str->del(strings[4366]);
25769str->del(strings[4392]);
25770strings[4364] = str->add(strings[4364]);
25771strings[470] = str->add(strings[470]);
25772strings[470] = str->add(strings[470]);
25773str->del(strings[4364]);
25774str->del(strings[470]);
25775strings[382] = str->add(strings[382]);
25776strings[382] = str->add(strings[382]);
25777strings[382] = str->add(strings[382]);
25778strings[382] = str->add(strings[382]);
25779strings[382] = str->add(strings[382]);
25780strings[382] = str->add(strings[382]);
25781strings[470] = str->add(strings[470]);
25782strings[469] = str->add(strings[469]);
25783strings[4385] = str->add(strings[4385]);
25784strings[4393] = str->add("glow");
25785str->del(strings[4385]);
25786str->del(strings[4393]);
25787strings[4368] = str->add(strings[4368]);
25788strings[4394] = str->add("#fff");
25789str->del(strings[4368]);
25790str->del(strings[4394]);
25791strings[4374] = str->add(strings[4374]);
25792strings[4395] = str->add("#fe87");
25793str->del(strings[4374]);
25794str->del(strings[4395]);
25795strings[4373] = str->add(strings[4373]);
25796strings[4396] = str->add("#fa14");
25797str->del(strings[4373]);
25798str->del(strings[4396]);
25799strings[4364] = str->add(strings[4364]);
25800strings[471] = str->add(strings[471]);
25801str->del(strings[470]);
25802strings[471] = str->add(strings[471]);
25803str->del(strings[4364]);
25804str->del(strings[471]);
25805strings[470] = str->add(strings[470]);
25806strings[469] = str->add(strings[469]);
25807strings[4385] = str->add(strings[4385]);
25808strings[4397] = str->add("glow");
25809str->del(strings[4385]);
25810str->del(strings[4397]);
25811strings[4368] = str->add(strings[4368]);
25812strings[4398] = str->add("#fff");
25813str->del(strings[4368]);
25814str->del(strings[4398]);
25815strings[4374] = str->add(strings[4374]);
25816strings[4399] = str->add("#fe87");
25817str->del(strings[4374]);
25818str->del(strings[4399]);
25819strings[4373] = str->add(strings[4373]);
25820strings[4400] = str->add("#fa14");
25821str->del(strings[4373]);
25822str->del(strings[4400]);
25823strings[4364] = str->add(strings[4364]);
25824strings[471] = str->add(strings[471]);
25825str->del(strings[470]);
25826strings[471] = str->add(strings[471]);
25827str->del(strings[4364]);
25828str->del(strings[471]);
25829str->del(strings[4364]);
25830str->del(strings[4365]);
25831str->del(strings[4366]);
25832str->del(strings[4367]);
25833str->del(strings[4368]);
25834str->del(strings[4369]);
25835str->del(strings[4370]);
25836str->del(strings[4371]);
25837str->del(strings[4372]);
25838str->del(strings[4373]);
25839str->del(strings[4374]);
25840str->del(strings[4375]);
25841str->del(strings[4376]);
25842str->del(strings[4377]);
25843str->del(strings[4378]);
25844str->del(strings[4379]);
25845str->del(strings[4380]);
25846str->del(strings[4381]);
25847str->del(strings[4382]);
25848str->del(strings[4383]);
25849str->del(strings[4384]);
25850str->del(strings[4385]);
25851str->del(strings[4386]);
25852str->del(strings[382]);
25853str->del(strings[382]);
25854str->del(strings[382]);
25855str->del(strings[382]);
25856str->del(strings[382]);
25857str->del(strings[382]);
25858str->del(strings[471]);
25859str->del(strings[469]);
25860str->del(strings[470]);
25861str->del(strings[469]);
25862str->del(strings[471]);
25863str->del(strings[469]);
25864strings[4401] = str->add("font");
25865strings[4402] = str->add("font_fallbacks");
25866strings[4403] = str->add("font_size");
25867strings[4404] = str->add("font_source");
25868strings[4405] = str->add("color");
25869strings[4406] = str->add("underline_color");
25870strings[4407] = str->add("underline2_color");
25871strings[4408] = str->add("outline_color");
25872strings[4409] = str->add("shadow_color");
25873strings[4410] = str->add("glow_color");
25874strings[4411] = str->add("glow2_color");
25875strings[4412] = str->add("backing_color");
25876strings[4413] = str->add("strikethrough_color");
25877strings[4414] = str->add("align");
25878strings[4415] = str->add("valign");
25879strings[4416] = str->add("wrap");
25880strings[4417] = str->add("left_margin");
25881strings[4418] = str->add("right_margin");
25882strings[4419] = str->add("underline");
25883strings[4420] = str->add("strikethrough");
25884strings[4421] = str->add("backing");
25885strings[4422] = str->add("style");
25886strings[4423] = str->add("tabstops");
25887strings[4414] = str->add(strings[4414]);
25888strings[4424] = str->add("center");
25889str->del(strings[4414]);
25890str->del(strings[4424]);
25891strings[4405] = str->add(strings[4405]);
25892strings[4425] = str->add("#000");
25893str->del(strings[4405]);
25894str->del(strings[4425]);
25895strings[4422] = str->add(strings[4422]);
25896strings[4426] = str->add("shadow");
25897str->del(strings[4422]);
25898str->del(strings[4426]);
25899strings[4409] = str->add(strings[4409]);
25900strings[4427] = str->add("#ffffff80");
25901str->del(strings[4409]);
25902str->del(strings[4427]);
25903strings[4416] = str->add(strings[4416]);
25904strings[4428] = str->add("word");
25905str->del(strings[4416]);
25906str->del(strings[4428]);
25907strings[4404] = str->add(strings[4404]);
25908strings[469] = str->add(strings[469]);
25909strings[469] = str->add(strings[469]);
25910str->del(strings[4404]);
25911str->del(strings[469]);
25912strings[4403] = str->add(strings[4403]);
25913strings[4429] = str->add("10.000000");
25914str->del(strings[4403]);
25915str->del(strings[4429]);
25916strings[4401] = str->add(strings[4401]);
25917strings[470] = str->add(strings[470]);
25918strings[470] = str->add(strings[470]);
25919str->del(strings[4401]);
25920str->del(strings[470]);
25921strings[470] = str->add(strings[470]);
25922strings[469] = str->add(strings[469]);
25923strings[4422] = str->add(strings[4422]);
25924strings[4430] = str->add("soft_shadow");
25925str->del(strings[4422]);
25926str->del(strings[4430]);
25927strings[4405] = str->add(strings[4405]);
25928strings[4431] = str->add("#fff");
25929str->del(strings[4405]);
25930str->del(strings[4431]);
25931strings[4409] = str->add(strings[4409]);
25932strings[4432] = str->add("#00000020");
25933str->del(strings[4409]);
25934str->del(strings[4432]);
25935strings[4403] = str->add(strings[4403]);
25936strings[4433] = str->add("12.000000");
25937str->del(strings[4403]);
25938str->del(strings[4433]);
25939strings[4401] = str->add(strings[4401]);
25940strings[471] = str->add(strings[471]);
25941str->del(strings[470]);
25942strings[471] = str->add(strings[471]);
25943str->del(strings[4401]);
25944str->del(strings[471]);
25945strings[382] = str->add(strings[382]);
25946strings[382] = str->add(strings[382]);
25947strings[382] = str->add(strings[382]);
25948strings[382] = str->add(strings[382]);
25949strings[382] = str->add(strings[382]);
25950strings[382] = str->add(strings[382]);
25951strings[382] = str->add(strings[382]);
25952strings[382] = str->add(strings[382]);
25953strings[382] = str->add(strings[382]);
25954strings[382] = str->add(strings[382]);
25955strings[382] = str->add(strings[382]);
25956strings[382] = str->add(strings[382]);
25957strings[382] = str->add(strings[382]);
25958strings[382] = str->add(strings[382]);
25959strings[382] = str->add(strings[382]);
25960strings[382] = str->add(strings[382]);
25961strings[382] = str->add(strings[382]);
25962strings[382] = str->add(strings[382]);
25963strings[382] = str->add(strings[382]);
25964strings[382] = str->add(strings[382]);
25965strings[382] = str->add(strings[382]);
25966strings[382] = str->add(strings[382]);
25967str->del(strings[471]);
25968str->del(strings[469]);
25969str->del(strings[382]);
25970str->del(strings[382]);
25971str->del(strings[382]);
25972str->del(strings[382]);
25973str->del(strings[382]);
25974str->del(strings[382]);
25975str->del(strings[382]);
25976str->del(strings[382]);
25977str->del(strings[382]);
25978str->del(strings[382]);
25979str->del(strings[382]);
25980str->del(strings[382]);
25981str->del(strings[382]);
25982str->del(strings[382]);
25983str->del(strings[382]);
25984str->del(strings[382]);
25985str->del(strings[382]);
25986str->del(strings[382]);
25987str->del(strings[382]);
25988str->del(strings[382]);
25989str->del(strings[382]);
25990str->del(strings[470]);
25991str->del(strings[469]);
25992str->del(strings[382]);
25993str->del(strings[4401]);
25994str->del(strings[4402]);
25995str->del(strings[4403]);
25996str->del(strings[4404]);
25997str->del(strings[4405]);
25998str->del(strings[4406]);
25999str->del(strings[4407]);
26000str->del(strings[4408]);
26001str->del(strings[4409]);
26002str->del(strings[4410]);
26003str->del(strings[4411]);
26004str->del(strings[4412]);
26005str->del(strings[4413]);
26006str->del(strings[4414]);
26007str->del(strings[4415]);
26008str->del(strings[4416]);
26009str->del(strings[4417]);
26010str->del(strings[4418]);
26011str->del(strings[4419]);
26012str->del(strings[4420]);
26013str->del(strings[4421]);
26014str->del(strings[4422]);
26015str->del(strings[4423]);
26016strings[4434] = str->add("font");
26017strings[4435] = str->add("font_fallbacks");
26018strings[4436] = str->add("font_size");
26019strings[4437] = str->add("font_source");
26020strings[4438] = str->add("color");
26021strings[4439] = str->add("underline_color");
26022strings[4440] = str->add("underline2_color");
26023strings[4441] = str->add("outline_color");
26024strings[4442] = str->add("shadow_color");
26025strings[4443] = str->add("glow_color");
26026strings[4444] = str->add("glow2_color");
26027strings[4445] = str->add("backing_color");
26028strings[4446] = str->add("strikethrough_color");
26029strings[4447] = str->add("align");
26030strings[4448] = str->add("valign");
26031strings[4449] = str->add("wrap");
26032strings[4450] = str->add("left_margin");
26033strings[4451] = str->add("right_margin");
26034strings[4452] = str->add("underline");
26035strings[4453] = str->add("strikethrough");
26036strings[4454] = str->add("backing");
26037strings[4455] = str->add("style");
26038strings[4456] = str->add("tabstops");
26039strings[4447] = str->add(strings[4447]);
26040strings[4457] = str->add("center");
26041str->del(strings[4447]);
26042str->del(strings[4457]);
26043strings[4438] = str->add(strings[4438]);
26044strings[4458] = str->add("#000");
26045str->del(strings[4438]);
26046str->del(strings[4458]);
26047strings[4455] = str->add(strings[4455]);
26048strings[4459] = str->add("shadow");
26049str->del(strings[4455]);
26050str->del(strings[4459]);
26051strings[4442] = str->add(strings[4442]);
26052strings[4460] = str->add("#ffffff80");
26053str->del(strings[4442]);
26054str->del(strings[4460]);
26055strings[4449] = str->add(strings[4449]);
26056strings[4461] = str->add("word");
26057str->del(strings[4449]);
26058str->del(strings[4461]);
26059strings[4437] = str->add(strings[4437]);
26060strings[469] = str->add(strings[469]);
26061strings[469] = str->add(strings[469]);
26062str->del(strings[4437]);
26063str->del(strings[469]);
26064strings[4436] = str->add(strings[4436]);
26065strings[4462] = str->add("10.000000");
26066str->del(strings[4436]);
26067str->del(strings[4462]);
26068strings[4434] = str->add(strings[4434]);
26069strings[470] = str->add(strings[470]);
26070strings[470] = str->add(strings[470]);
26071str->del(strings[4434]);
26072str->del(strings[470]);
26073strings[470] = str->add(strings[470]);
26074strings[469] = str->add(strings[469]);
26075strings[4455] = str->add(strings[4455]);
26076strings[4463] = str->add("soft_shadow");
26077str->del(strings[4455]);
26078str->del(strings[4463]);
26079strings[4438] = str->add(strings[4438]);
26080strings[4464] = str->add("#fff");
26081str->del(strings[4438]);
26082str->del(strings[4464]);
26083strings[4442] = str->add(strings[4442]);
26084strings[4465] = str->add("#00000020");
26085str->del(strings[4442]);
26086str->del(strings[4465]);
26087strings[4436] = str->add(strings[4436]);
26088strings[4466] = str->add("12.000000");
26089str->del(strings[4436]);
26090str->del(strings[4466]);
26091strings[4434] = str->add(strings[4434]);
26092strings[471] = str->add(strings[471]);
26093str->del(strings[470]);
26094strings[471] = str->add(strings[471]);
26095str->del(strings[4434]);
26096str->del(strings[471]);
26097strings[382] = str->add(strings[382]);
26098strings[382] = str->add(strings[382]);
26099strings[382] = str->add(strings[382]);
26100strings[382] = str->add(strings[382]);
26101strings[382] = str->add(strings[382]);
26102strings[382] = str->add(strings[382]);
26103strings[382] = str->add(strings[382]);
26104strings[382] = str->add(strings[382]);
26105strings[382] = str->add(strings[382]);
26106strings[382] = str->add(strings[382]);
26107strings[382] = str->add(strings[382]);
26108strings[382] = str->add(strings[382]);
26109strings[382] = str->add(strings[382]);
26110strings[382] = str->add(strings[382]);
26111strings[382] = str->add(strings[382]);
26112strings[382] = str->add(strings[382]);
26113strings[382] = str->add(strings[382]);
26114strings[382] = str->add(strings[382]);
26115strings[382] = str->add(strings[382]);
26116strings[382] = str->add(strings[382]);
26117strings[382] = str->add(strings[382]);
26118strings[382] = str->add(strings[382]);
26119str->del(strings[4434]);
26120str->del(strings[4435]);
26121str->del(strings[4436]);
26122str->del(strings[4437]);
26123str->del(strings[4438]);
26124str->del(strings[4439]);
26125str->del(strings[4440]);
26126str->del(strings[4441]);
26127str->del(strings[4442]);
26128str->del(strings[4443]);
26129str->del(strings[4444]);
26130str->del(strings[4445]);
26131str->del(strings[4446]);
26132str->del(strings[4447]);
26133str->del(strings[4448]);
26134str->del(strings[4449]);
26135str->del(strings[4450]);
26136str->del(strings[4451]);
26137str->del(strings[4452]);
26138str->del(strings[4453]);
26139str->del(strings[4454]);
26140str->del(strings[4455]);
26141str->del(strings[4456]);
26142str->del(strings[471]);
26143str->del(strings[469]);
26144str->del(strings[382]);
26145str->del(strings[382]);
26146str->del(strings[382]);
26147str->del(strings[382]);
26148str->del(strings[382]);
26149str->del(strings[382]);
26150str->del(strings[382]);
26151str->del(strings[382]);
26152str->del(strings[382]);
26153str->del(strings[382]);
26154str->del(strings[382]);
26155str->del(strings[382]);
26156str->del(strings[382]);
26157str->del(strings[382]);
26158str->del(strings[382]);
26159str->del(strings[382]);
26160str->del(strings[382]);
26161str->del(strings[382]);
26162str->del(strings[382]);
26163str->del(strings[382]);
26164str->del(strings[382]);
26165str->del(strings[470]);
26166str->del(strings[469]);
26167str->del(strings[382]);
26168strings[4467] = str->add("font");
26169strings[4468] = str->add("font_fallbacks");
26170strings[4469] = str->add("font_size");
26171strings[4470] = str->add("font_source");
26172strings[4471] = str->add("color");
26173strings[4472] = str->add("underline_color");
26174strings[4473] = str->add("underline2_color");
26175strings[4474] = str->add("outline_color");
26176strings[4475] = str->add("shadow_color");
26177strings[4476] = str->add("glow_color");
26178strings[4477] = str->add("glow2_color");
26179strings[4478] = str->add("backing_color");
26180strings[4479] = str->add("strikethrough_color");
26181strings[4480] = str->add("align");
26182strings[4481] = str->add("valign");
26183strings[4482] = str->add("wrap");
26184strings[4483] = str->add("left_margin");
26185strings[4484] = str->add("right_margin");
26186strings[4485] = str->add("underline");
26187strings[4486] = str->add("strikethrough");
26188strings[4487] = str->add("backing");
26189strings[4488] = str->add("style");
26190strings[4489] = str->add("tabstops");
26191strings[4480] = str->add(strings[4480]);
26192strings[4490] = str->add("center");
26193str->del(strings[4480]);
26194str->del(strings[4490]);
26195strings[4471] = str->add(strings[4471]);
26196strings[4491] = str->add("#000");
26197str->del(strings[4471]);
26198str->del(strings[4491]);
26199strings[4488] = str->add(strings[4488]);
26200strings[4492] = str->add("shadow");
26201str->del(strings[4488]);
26202str->del(strings[4492]);
26203strings[4475] = str->add(strings[4475]);
26204strings[4493] = str->add("#ffffff80");
26205str->del(strings[4475]);
26206str->del(strings[4493]);
26207strings[4482] = str->add(strings[4482]);
26208strings[4494] = str->add("word");
26209str->del(strings[4482]);
26210str->del(strings[4494]);
26211strings[4470] = str->add(strings[4470]);
26212strings[469] = str->add(strings[469]);
26213strings[469] = str->add(strings[469]);
26214str->del(strings[4470]);
26215str->del(strings[469]);
26216strings[4469] = str->add(strings[4469]);
26217strings[4495] = str->add("10.000000");
26218str->del(strings[4469]);
26219str->del(strings[4495]);
26220strings[4467] = str->add(strings[4467]);
26221strings[470] = str->add(strings[470]);
26222strings[470] = str->add(strings[470]);
26223str->del(strings[4467]);
26224str->del(strings[470]);
26225strings[470] = str->add(strings[470]);
26226strings[469] = str->add(strings[469]);
26227strings[4488] = str->add(strings[4488]);
26228strings[4496] = str->add("soft_shadow");
26229str->del(strings[4488]);
26230str->del(strings[4496]);
26231strings[4471] = str->add(strings[4471]);
26232strings[4497] = str->add("#fff");
26233str->del(strings[4471]);
26234str->del(strings[4497]);
26235strings[4475] = str->add(strings[4475]);
26236strings[4498] = str->add("#00000020");
26237str->del(strings[4475]);
26238str->del(strings[4498]);
26239strings[4469] = str->add(strings[4469]);
26240strings[4499] = str->add("12.000000");
26241str->del(strings[4469]);
26242str->del(strings[4499]);
26243strings[4467] = str->add(strings[4467]);
26244strings[471] = str->add(strings[471]);
26245str->del(strings[470]);
26246strings[471] = str->add(strings[471]);
26247str->del(strings[4467]);
26248str->del(strings[471]);
26249strings[382] = str->add(strings[382]);
26250strings[382] = str->add(strings[382]);
26251strings[382] = str->add(strings[382]);
26252strings[382] = str->add(strings[382]);
26253strings[382] = str->add(strings[382]);
26254strings[382] = str->add(strings[382]);
26255strings[382] = str->add(strings[382]);
26256strings[382] = str->add(strings[382]);
26257strings[382] = str->add(strings[382]);
26258strings[382] = str->add(strings[382]);
26259strings[382] = str->add(strings[382]);
26260strings[382] = str->add(strings[382]);
26261strings[382] = str->add(strings[382]);
26262strings[382] = str->add(strings[382]);
26263strings[382] = str->add(strings[382]);
26264strings[382] = str->add(strings[382]);
26265strings[382] = str->add(strings[382]);
26266strings[382] = str->add(strings[382]);
26267strings[382] = str->add(strings[382]);
26268strings[382] = str->add(strings[382]);
26269strings[382] = str->add(strings[382]);
26270strings[382] = str->add(strings[382]);
26271str->del(strings[471]);
26272str->del(strings[469]);
26273str->del(strings[382]);
26274str->del(strings[382]);
26275str->del(strings[382]);
26276str->del(strings[382]);
26277str->del(strings[382]);
26278str->del(strings[382]);
26279str->del(strings[382]);
26280str->del(strings[382]);
26281str->del(strings[382]);
26282str->del(strings[382]);
26283str->del(strings[382]);
26284str->del(strings[382]);
26285str->del(strings[382]);
26286str->del(strings[382]);
26287str->del(strings[382]);
26288str->del(strings[382]);
26289str->del(strings[382]);
26290str->del(strings[382]);
26291str->del(strings[382]);
26292str->del(strings[382]);
26293str->del(strings[382]);
26294str->del(strings[470]);
26295str->del(strings[469]);
26296str->del(strings[382]);
26297str->del(strings[4467]);
26298str->del(strings[4468]);
26299str->del(strings[4469]);
26300str->del(strings[4470]);
26301str->del(strings[4471]);
26302str->del(strings[4472]);
26303str->del(strings[4473]);
26304str->del(strings[4474]);
26305str->del(strings[4475]);
26306str->del(strings[4476]);
26307str->del(strings[4477]);
26308str->del(strings[4478]);
26309str->del(strings[4479]);
26310str->del(strings[4480]);
26311str->del(strings[4481]);
26312str->del(strings[4482]);
26313str->del(strings[4483]);
26314str->del(strings[4484]);
26315str->del(strings[4485]);
26316str->del(strings[4486]);
26317str->del(strings[4487]);
26318str->del(strings[4488]);
26319str->del(strings[4489]);
26320str->del(strings[4353]);
26321str->del(strings[4354]);
26322str->del(strings[4354]);
26323str->del(strings[1841]);
26324str->del(strings[4353]);
26325str->del(strings[1841]);
26326str->del(strings[4354]);
26327strings[4500] = str->add("program,start");
26328strings[4501] = str->add("focus_in");
26329str->del(strings[4361]);
26330str->del(strings[4362]);
26331str->del(strings[4361]);
26332str->del(strings[4362]);
26333str->del(strings[4500]);
26334str->del(strings[4501]);
26335strings[64] = str->add(strings[64]);
26336strings[2595] = str->add(strings[2595]);
26337strings[2595] = str->add(strings[2595]);
26338strings[4502] = str->add("load");
26339strings[1841] = str->add(strings[1841]);
26340strings[469] = str->add(strings[469]);
26341strings[2671] = str->add(strings[2671]);
26342strings[4502] = str->add(strings[4502]);
26343strings[1841] = str->add(strings[1841]);
26344strings[64] = str->add(strings[64]);
26345strings[4503] = str->add("images/68");
26346strings[4504] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/68");
26347strings[64] = str->add(strings[64]);
26348strings[4503] = str->add(strings[4503]);
26349strings[64] = str->add(strings[64]);
26350strings[3259] = str->add(strings[3259]);
26351strings[64] = str->add(strings[64]);
26352strings[3259] = str->add(strings[3259]);
26353strings[469] = str->add(strings[469]);
26354strings[2898] = str->add(strings[2898]);
26355strings[469] = str->add(strings[469]);
26356strings[2900] = str->add(strings[2900]);
26357strings[4505] = str->add("resize");
26358strings[1933] = str->add(strings[1933]);
26359str->del(strings[4502]);
26360str->del(strings[1841]);
26361str->del(strings[1933]);
26362str->del(strings[469]);
26363str->del(strings[2671]);
26364strings[469] = str->add(strings[469]);
26365strings[2671] = str->add(strings[2671]);
26366strings[4502] = str->add(strings[4502]);
26367strings[1841] = str->add(strings[1841]);
26368strings[469] = str->add(strings[469]);
26369strings[2898] = str->add(strings[2898]);
26370strings[469] = str->add(strings[469]);
26371strings[2900] = str->add(strings[2900]);
26372strings[4505] = str->add(strings[4505]);
26373strings[4506] = str->add("e,state,focused");
26374strings[4507] = str->add("e");
26375strings[4508] = str->add("e,action,mouse,move");
26376strings[4507] = str->add(strings[4507]);
26377strings[4508] = str->add(strings[4508]);
26378strings[4507] = str->add(strings[4507]);
26379strings[4508] = str->add(strings[4508]);
26380strings[4507] = str->add(strings[4507]);
26381strings[4508] = str->add(strings[4508]);
26382strings[4507] = str->add(strings[4507]);
26383strings[4508] = str->add(strings[4508]);
26384strings[4507] = str->add(strings[4507]);
26385strings[1737] = str->add(strings[1737]);
26386strings[1853] = str->add(strings[1853]);
26387strings[4508] = str->add(strings[4508]);
26388strings[4507] = str->add(strings[4507]);
26389strings[4509] = str->add("mouse,move");
26390strings[1853] = str->add(strings[1853]);
26391str->del(strings[4502]);
26392str->del(strings[1841]);
26393str->del(strings[4505]);
26394str->del(strings[4502]);
26395str->del(strings[1841]);
26396str->del(strings[4505]);
26397strings[4510] = str->add("program,start");
26398strings[4511] = str->add("focus_in");
26399strings[1932] = str->add(strings[1932]);
26400strings[4511] = str->add(strings[4511]);
26401str->del(strings[4506]);
26402str->del(strings[4507]);
26403str->del(strings[4508]);
26404str->del(strings[4507]);
26405str->del(strings[4508]);
26406str->del(strings[4507]);
26407str->del(strings[4508]);
26408str->del(strings[4507]);
26409str->del(strings[4508]);
26410str->del(strings[4507]);
26411str->del(strings[4508]);
26412str->del(strings[4507]);
26413str->del(strings[1737]);
26414str->del(strings[1853]);
26415str->del(strings[4508]);
26416str->del(strings[4507]);
26417str->del(strings[4509]);
26418str->del(strings[1853]);
26419str->del(strings[4510]);
26420str->del(strings[4511]);
26421str->del(strings[1932]);
26422str->del(strings[4511]);
26423strings[4512] = str->add("e,action,mouse,move");
26424strings[4513] = str->add("e");
26425strings[4514] = str->add("mouse,move");
26426strings[1853] = str->add(strings[1853]);
26427str->del(strings[4512]);
26428str->del(strings[4513]);
26429str->del(strings[4514]);
26430str->del(strings[1853]);
26431str->del(strings[190]);
26432str->del(strings[4363]);
26433str->del(strings[332]);
26434str->del(strings[193]);
26435strings[190] = str->add(strings[190]);
26436strings[4515] = str->add("_about");
26437strings[332] = str->add(strings[332]);
26438strings[193] = str->add(strings[193]);
26439strings[4516] = str->add("font");
26440strings[4517] = str->add("font_fallbacks");
26441strings[4518] = str->add("font_size");
26442strings[4519] = str->add("font_source");
26443strings[4520] = str->add("color");
26444strings[4521] = str->add("underline_color");
26445strings[4522] = str->add("underline2_color");
26446strings[4523] = str->add("outline_color");
26447strings[4524] = str->add("shadow_color");
26448strings[4525] = str->add("glow_color");
26449strings[4526] = str->add("glow2_color");
26450strings[4527] = str->add("backing_color");
26451strings[4528] = str->add("strikethrough_color");
26452strings[4529] = str->add("align");
26453strings[4530] = str->add("valign");
26454strings[4531] = str->add("wrap");
26455strings[4532] = str->add("left_margin");
26456strings[4533] = str->add("right_margin");
26457strings[4534] = str->add("underline");
26458strings[4535] = str->add("strikethrough");
26459strings[4536] = str->add("backing");
26460strings[4537] = str->add("style");
26461strings[4538] = str->add("tabstops");
26462strings[4529] = str->add(strings[4529]);
26463strings[4539] = str->add("center");
26464str->del(strings[4529]);
26465str->del(strings[4539]);
26466strings[4520] = str->add(strings[4520]);
26467strings[4540] = str->add("#000");
26468str->del(strings[4520]);
26469str->del(strings[4540]);
26470strings[4537] = str->add(strings[4537]);
26471strings[4541] = str->add("shadow");
26472str->del(strings[4537]);
26473str->del(strings[4541]);
26474strings[4524] = str->add(strings[4524]);
26475strings[4542] = str->add("#ffffff80");
26476str->del(strings[4524]);
26477str->del(strings[4542]);
26478strings[4531] = str->add(strings[4531]);
26479strings[4543] = str->add("word");
26480str->del(strings[4531]);
26481str->del(strings[4543]);
26482strings[4519] = str->add(strings[4519]);
26483strings[469] = str->add(strings[469]);
26484strings[469] = str->add(strings[469]);
26485str->del(strings[4519]);
26486str->del(strings[469]);
26487strings[4518] = str->add(strings[4518]);
26488strings[4544] = str->add("10.000000");
26489str->del(strings[4518]);
26490str->del(strings[4544]);
26491strings[4516] = str->add(strings[4516]);
26492strings[470] = str->add(strings[470]);
26493strings[470] = str->add(strings[470]);
26494str->del(strings[4516]);
26495str->del(strings[470]);
26496strings[382] = str->add(strings[382]);
26497strings[382] = str->add(strings[382]);
26498strings[382] = str->add(strings[382]);
26499strings[382] = str->add(strings[382]);
26500strings[382] = str->add(strings[382]);
26501strings[382] = str->add(strings[382]);
26502strings[470] = str->add(strings[470]);
26503strings[469] = str->add(strings[469]);
26504strings[4537] = str->add(strings[4537]);
26505strings[4545] = str->add("glow");
26506str->del(strings[4537]);
26507str->del(strings[4545]);
26508strings[4520] = str->add(strings[4520]);
26509strings[4546] = str->add("#fff");
26510str->del(strings[4520]);
26511str->del(strings[4546]);
26512strings[4526] = str->add(strings[4526]);
26513strings[4547] = str->add("#fe87");
26514str->del(strings[4526]);
26515str->del(strings[4547]);
26516strings[4525] = str->add(strings[4525]);
26517strings[4548] = str->add("#fa14");
26518str->del(strings[4525]);
26519str->del(strings[4548]);
26520strings[4516] = str->add(strings[4516]);
26521strings[471] = str->add(strings[471]);
26522str->del(strings[470]);
26523strings[471] = str->add(strings[471]);
26524str->del(strings[4516]);
26525str->del(strings[471]);
26526strings[470] = str->add(strings[470]);
26527strings[469] = str->add(strings[469]);
26528strings[4537] = str->add(strings[4537]);
26529strings[4549] = str->add("glow");
26530str->del(strings[4537]);
26531str->del(strings[4549]);
26532strings[4520] = str->add(strings[4520]);
26533strings[4550] = str->add("#fff");
26534str->del(strings[4520]);
26535str->del(strings[4550]);
26536strings[4526] = str->add(strings[4526]);
26537strings[4551] = str->add("#fe87");
26538str->del(strings[4526]);
26539str->del(strings[4551]);
26540strings[4525] = str->add(strings[4525]);
26541strings[4552] = str->add("#fa14");
26542str->del(strings[4525]);
26543str->del(strings[4552]);
26544strings[4516] = str->add(strings[4516]);
26545strings[471] = str->add(strings[471]);
26546str->del(strings[470]);
26547strings[471] = str->add(strings[471]);
26548str->del(strings[4516]);
26549str->del(strings[471]);
26550str->del(strings[4516]);
26551str->del(strings[4517]);
26552str->del(strings[4518]);
26553str->del(strings[4519]);
26554str->del(strings[4520]);
26555str->del(strings[4521]);
26556str->del(strings[4522]);
26557str->del(strings[4523]);
26558str->del(strings[4524]);
26559str->del(strings[4525]);
26560str->del(strings[4526]);
26561str->del(strings[4527]);
26562str->del(strings[4528]);
26563str->del(strings[4529]);
26564str->del(strings[4530]);
26565str->del(strings[4531]);
26566str->del(strings[4532]);
26567str->del(strings[4533]);
26568str->del(strings[4534]);
26569str->del(strings[4535]);
26570str->del(strings[4536]);
26571str->del(strings[4537]);
26572str->del(strings[4538]);
26573str->del(strings[382]);
26574str->del(strings[382]);
26575str->del(strings[382]);
26576str->del(strings[382]);
26577str->del(strings[382]);
26578str->del(strings[382]);
26579str->del(strings[471]);
26580str->del(strings[469]);
26581str->del(strings[470]);
26582str->del(strings[469]);
26583str->del(strings[471]);
26584str->del(strings[469]);
26585strings[4553] = str->add("font");
26586strings[4554] = str->add("font_fallbacks");
26587strings[4555] = str->add("font_size");
26588strings[4556] = str->add("font_source");
26589strings[4557] = str->add("color");
26590strings[4558] = str->add("underline_color");
26591strings[4559] = str->add("underline2_color");
26592strings[4560] = str->add("outline_color");
26593strings[4561] = str->add("shadow_color");
26594strings[4562] = str->add("glow_color");
26595strings[4563] = str->add("glow2_color");
26596strings[4564] = str->add("backing_color");
26597strings[4565] = str->add("strikethrough_color");
26598strings[4566] = str->add("align");
26599strings[4567] = str->add("valign");
26600strings[4568] = str->add("wrap");
26601strings[4569] = str->add("left_margin");
26602strings[4570] = str->add("right_margin");
26603strings[4571] = str->add("underline");
26604strings[4572] = str->add("strikethrough");
26605strings[4573] = str->add("backing");
26606strings[4574] = str->add("style");
26607strings[4575] = str->add("tabstops");
26608strings[4566] = str->add(strings[4566]);
26609strings[4576] = str->add("center");
26610str->del(strings[4566]);
26611str->del(strings[4576]);
26612strings[4557] = str->add(strings[4557]);
26613strings[4577] = str->add("#000");
26614str->del(strings[4557]);
26615str->del(strings[4577]);
26616strings[4574] = str->add(strings[4574]);
26617strings[4578] = str->add("shadow");
26618str->del(strings[4574]);
26619str->del(strings[4578]);
26620strings[4561] = str->add(strings[4561]);
26621strings[4579] = str->add("#ffffff80");
26622str->del(strings[4561]);
26623str->del(strings[4579]);
26624strings[4568] = str->add(strings[4568]);
26625strings[4580] = str->add("word");
26626str->del(strings[4568]);
26627str->del(strings[4580]);
26628strings[4556] = str->add(strings[4556]);
26629strings[469] = str->add(strings[469]);
26630strings[469] = str->add(strings[469]);
26631str->del(strings[4556]);
26632str->del(strings[469]);
26633strings[4555] = str->add(strings[4555]);
26634strings[4581] = str->add("10.000000");
26635str->del(strings[4555]);
26636str->del(strings[4581]);
26637strings[4553] = str->add(strings[4553]);
26638strings[470] = str->add(strings[470]);
26639strings[470] = str->add(strings[470]);
26640str->del(strings[4553]);
26641str->del(strings[470]);
26642strings[470] = str->add(strings[470]);
26643strings[469] = str->add(strings[469]);
26644strings[4574] = str->add(strings[4574]);
26645strings[4582] = str->add("soft_shadow");
26646str->del(strings[4574]);
26647str->del(strings[4582]);
26648strings[4557] = str->add(strings[4557]);
26649strings[4583] = str->add("#fff");
26650str->del(strings[4557]);
26651str->del(strings[4583]);
26652strings[4561] = str->add(strings[4561]);
26653strings[4584] = str->add("#00000020");
26654str->del(strings[4561]);
26655str->del(strings[4584]);
26656strings[4555] = str->add(strings[4555]);
26657strings[4585] = str->add("12.000000");
26658str->del(strings[4555]);
26659str->del(strings[4585]);
26660strings[4553] = str->add(strings[4553]);
26661strings[471] = str->add(strings[471]);
26662str->del(strings[470]);
26663strings[471] = str->add(strings[471]);
26664str->del(strings[4553]);
26665str->del(strings[471]);
26666strings[382] = str->add(strings[382]);
26667strings[382] = str->add(strings[382]);
26668strings[382] = str->add(strings[382]);
26669strings[382] = str->add(strings[382]);
26670strings[382] = str->add(strings[382]);
26671strings[382] = str->add(strings[382]);
26672strings[382] = str->add(strings[382]);
26673strings[382] = str->add(strings[382]);
26674strings[382] = str->add(strings[382]);
26675strings[382] = str->add(strings[382]);
26676strings[382] = str->add(strings[382]);
26677strings[382] = str->add(strings[382]);
26678strings[382] = str->add(strings[382]);
26679strings[382] = str->add(strings[382]);
26680strings[382] = str->add(strings[382]);
26681strings[382] = str->add(strings[382]);
26682strings[382] = str->add(strings[382]);
26683strings[382] = str->add(strings[382]);
26684strings[382] = str->add(strings[382]);
26685strings[382] = str->add(strings[382]);
26686strings[382] = str->add(strings[382]);
26687strings[382] = str->add(strings[382]);
26688str->del(strings[471]);
26689str->del(strings[469]);
26690str->del(strings[382]);
26691str->del(strings[382]);
26692str->del(strings[382]);
26693str->del(strings[382]);
26694str->del(strings[382]);
26695str->del(strings[382]);
26696str->del(strings[382]);
26697str->del(strings[382]);
26698str->del(strings[382]);
26699str->del(strings[382]);
26700str->del(strings[382]);
26701str->del(strings[382]);
26702str->del(strings[382]);
26703str->del(strings[382]);
26704str->del(strings[382]);
26705str->del(strings[382]);
26706str->del(strings[382]);
26707str->del(strings[382]);
26708str->del(strings[382]);
26709str->del(strings[382]);
26710str->del(strings[382]);
26711str->del(strings[470]);
26712str->del(strings[469]);
26713str->del(strings[382]);
26714str->del(strings[4553]);
26715str->del(strings[4554]);
26716str->del(strings[4555]);
26717str->del(strings[4556]);
26718str->del(strings[4557]);
26719str->del(strings[4558]);
26720str->del(strings[4559]);
26721str->del(strings[4560]);
26722str->del(strings[4561]);
26723str->del(strings[4562]);
26724str->del(strings[4563]);
26725str->del(strings[4564]);
26726str->del(strings[4565]);
26727str->del(strings[4566]);
26728str->del(strings[4567]);
26729str->del(strings[4568]);
26730str->del(strings[4569]);
26731str->del(strings[4570]);
26732str->del(strings[4571]);
26733str->del(strings[4572]);
26734str->del(strings[4573]);
26735str->del(strings[4574]);
26736str->del(strings[4575]);
26737strings[4586] = str->add("font");
26738strings[4587] = str->add("font_fallbacks");
26739strings[4588] = str->add("font_size");
26740strings[4589] = str->add("font_source");
26741strings[4590] = str->add("color");
26742strings[4591] = str->add("underline_color");
26743strings[4592] = str->add("underline2_color");
26744strings[4593] = str->add("outline_color");
26745strings[4594] = str->add("shadow_color");
26746strings[4595] = str->add("glow_color");
26747strings[4596] = str->add("glow2_color");
26748strings[4597] = str->add("backing_color");
26749strings[4598] = str->add("strikethrough_color");
26750strings[4599] = str->add("align");
26751strings[4600] = str->add("valign");
26752strings[4601] = str->add("wrap");
26753strings[4602] = str->add("left_margin");
26754strings[4603] = str->add("right_margin");
26755strings[4604] = str->add("underline");
26756strings[4605] = str->add("strikethrough");
26757strings[4606] = str->add("backing");
26758strings[4607] = str->add("style");
26759strings[4608] = str->add("tabstops");
26760strings[4599] = str->add(strings[4599]);
26761strings[4609] = str->add("center");
26762str->del(strings[4599]);
26763str->del(strings[4609]);
26764strings[4590] = str->add(strings[4590]);
26765strings[4610] = str->add("#000");
26766str->del(strings[4590]);
26767str->del(strings[4610]);
26768strings[4607] = str->add(strings[4607]);
26769strings[4611] = str->add("shadow");
26770str->del(strings[4607]);
26771str->del(strings[4611]);
26772strings[4594] = str->add(strings[4594]);
26773strings[4612] = str->add("#ffffff80");
26774str->del(strings[4594]);
26775str->del(strings[4612]);
26776strings[4601] = str->add(strings[4601]);
26777strings[4613] = str->add("word");
26778str->del(strings[4601]);
26779str->del(strings[4613]);
26780strings[4589] = str->add(strings[4589]);
26781strings[469] = str->add(strings[469]);
26782strings[469] = str->add(strings[469]);
26783str->del(strings[4589]);
26784str->del(strings[469]);
26785strings[4588] = str->add(strings[4588]);
26786strings[4614] = str->add("10.000000");
26787str->del(strings[4588]);
26788str->del(strings[4614]);
26789strings[4586] = str->add(strings[4586]);
26790strings[470] = str->add(strings[470]);
26791strings[470] = str->add(strings[470]);
26792str->del(strings[4586]);
26793str->del(strings[470]);
26794strings[470] = str->add(strings[470]);
26795strings[469] = str->add(strings[469]);
26796strings[4607] = str->add(strings[4607]);
26797strings[4615] = str->add("soft_shadow");
26798str->del(strings[4607]);
26799str->del(strings[4615]);
26800strings[4590] = str->add(strings[4590]);
26801strings[4616] = str->add("#fff");
26802str->del(strings[4590]);
26803str->del(strings[4616]);
26804strings[4594] = str->add(strings[4594]);
26805strings[4617] = str->add("#00000020");
26806str->del(strings[4594]);
26807str->del(strings[4617]);
26808strings[4588] = str->add(strings[4588]);
26809strings[4618] = str->add("12.000000");
26810str->del(strings[4588]);
26811str->del(strings[4618]);
26812strings[4586] = str->add(strings[4586]);
26813strings[471] = str->add(strings[471]);
26814str->del(strings[470]);
26815strings[471] = str->add(strings[471]);
26816str->del(strings[4586]);
26817str->del(strings[471]);
26818strings[382] = str->add(strings[382]);
26819strings[382] = str->add(strings[382]);
26820strings[382] = str->add(strings[382]);
26821strings[382] = str->add(strings[382]);
26822strings[382] = str->add(strings[382]);
26823strings[382] = str->add(strings[382]);
26824strings[382] = str->add(strings[382]);
26825strings[382] = str->add(strings[382]);
26826strings[382] = str->add(strings[382]);
26827strings[382] = str->add(strings[382]);
26828strings[382] = str->add(strings[382]);
26829strings[382] = str->add(strings[382]);
26830strings[382] = str->add(strings[382]);
26831strings[382] = str->add(strings[382]);
26832strings[382] = str->add(strings[382]);
26833strings[382] = str->add(strings[382]);
26834strings[382] = str->add(strings[382]);
26835strings[382] = str->add(strings[382]);
26836strings[382] = str->add(strings[382]);
26837strings[382] = str->add(strings[382]);
26838strings[382] = str->add(strings[382]);
26839strings[382] = str->add(strings[382]);
26840str->del(strings[4586]);
26841str->del(strings[4587]);
26842str->del(strings[4588]);
26843str->del(strings[4589]);
26844str->del(strings[4590]);
26845str->del(strings[4591]);
26846str->del(strings[4592]);
26847str->del(strings[4593]);
26848str->del(strings[4594]);
26849str->del(strings[4595]);
26850str->del(strings[4596]);
26851str->del(strings[4597]);
26852str->del(strings[4598]);
26853str->del(strings[4599]);
26854str->del(strings[4600]);
26855str->del(strings[4601]);
26856str->del(strings[4602]);
26857str->del(strings[4603]);
26858str->del(strings[4604]);
26859str->del(strings[4605]);
26860str->del(strings[4606]);
26861str->del(strings[4607]);
26862str->del(strings[4608]);
26863str->del(strings[471]);
26864str->del(strings[469]);
26865str->del(strings[382]);
26866str->del(strings[382]);
26867str->del(strings[382]);
26868str->del(strings[382]);
26869str->del(strings[382]);
26870str->del(strings[382]);
26871str->del(strings[382]);
26872str->del(strings[382]);
26873str->del(strings[382]);
26874str->del(strings[382]);
26875str->del(strings[382]);
26876str->del(strings[382]);
26877str->del(strings[382]);
26878str->del(strings[382]);
26879str->del(strings[382]);
26880str->del(strings[382]);
26881str->del(strings[382]);
26882str->del(strings[382]);
26883str->del(strings[382]);
26884str->del(strings[382]);
26885str->del(strings[382]);
26886str->del(strings[470]);
26887str->del(strings[469]);
26888str->del(strings[382]);
26889strings[4619] = str->add("font");
26890strings[4620] = str->add("font_fallbacks");
26891strings[4621] = str->add("font_size");
26892strings[4622] = str->add("font_source");
26893strings[4623] = str->add("color");
26894strings[4624] = str->add("underline_color");
26895strings[4625] = str->add("underline2_color");
26896strings[4626] = str->add("outline_color");
26897strings[4627] = str->add("shadow_color");
26898strings[4628] = str->add("glow_color");
26899strings[4629] = str->add("glow2_color");
26900strings[4630] = str->add("backing_color");
26901strings[4631] = str->add("strikethrough_color");
26902strings[4632] = str->add("align");
26903strings[4633] = str->add("valign");
26904strings[4634] = str->add("wrap");
26905strings[4635] = str->add("left_margin");
26906strings[4636] = str->add("right_margin");
26907strings[4637] = str->add("underline");
26908strings[4638] = str->add("strikethrough");
26909strings[4639] = str->add("backing");
26910strings[4640] = str->add("style");
26911strings[4641] = str->add("tabstops");
26912strings[4632] = str->add(strings[4632]);
26913strings[4642] = str->add("center");
26914str->del(strings[4632]);
26915str->del(strings[4642]);
26916strings[4623] = str->add(strings[4623]);
26917strings[4643] = str->add("#000");
26918str->del(strings[4623]);
26919str->del(strings[4643]);
26920strings[4640] = str->add(strings[4640]);
26921strings[4644] = str->add("shadow");
26922str->del(strings[4640]);
26923str->del(strings[4644]);
26924strings[4627] = str->add(strings[4627]);
26925strings[4645] = str->add("#ffffff80");
26926str->del(strings[4627]);
26927str->del(strings[4645]);
26928strings[4634] = str->add(strings[4634]);
26929strings[4646] = str->add("word");
26930str->del(strings[4634]);
26931str->del(strings[4646]);
26932strings[4622] = str->add(strings[4622]);
26933strings[469] = str->add(strings[469]);
26934strings[469] = str->add(strings[469]);
26935str->del(strings[4622]);
26936str->del(strings[469]);
26937strings[4621] = str->add(strings[4621]);
26938strings[4647] = str->add("10.000000");
26939str->del(strings[4621]);
26940str->del(strings[4647]);
26941strings[4619] = str->add(strings[4619]);
26942strings[470] = str->add(strings[470]);
26943strings[470] = str->add(strings[470]);
26944str->del(strings[4619]);
26945str->del(strings[470]);
26946strings[470] = str->add(strings[470]);
26947strings[469] = str->add(strings[469]);
26948strings[4640] = str->add(strings[4640]);
26949strings[4648] = str->add("soft_shadow");
26950str->del(strings[4640]);
26951str->del(strings[4648]);
26952strings[4623] = str->add(strings[4623]);
26953strings[4649] = str->add("#fff");
26954str->del(strings[4623]);
26955str->del(strings[4649]);
26956strings[4627] = str->add(strings[4627]);
26957strings[4650] = str->add("#00000020");
26958str->del(strings[4627]);
26959str->del(strings[4650]);
26960strings[4621] = str->add(strings[4621]);
26961strings[4651] = str->add("12.000000");
26962str->del(strings[4621]);
26963str->del(strings[4651]);
26964strings[4619] = str->add(strings[4619]);
26965strings[471] = str->add(strings[471]);
26966str->del(strings[470]);
26967strings[471] = str->add(strings[471]);
26968str->del(strings[4619]);
26969str->del(strings[471]);
26970strings[382] = str->add(strings[382]);
26971strings[382] = str->add(strings[382]);
26972strings[382] = str->add(strings[382]);
26973strings[382] = str->add(strings[382]);
26974strings[382] = str->add(strings[382]);
26975strings[382] = str->add(strings[382]);
26976strings[382] = str->add(strings[382]);
26977strings[382] = str->add(strings[382]);
26978strings[382] = str->add(strings[382]);
26979strings[382] = str->add(strings[382]);
26980strings[382] = str->add(strings[382]);
26981strings[382] = str->add(strings[382]);
26982strings[382] = str->add(strings[382]);
26983strings[382] = str->add(strings[382]);
26984strings[382] = str->add(strings[382]);
26985strings[382] = str->add(strings[382]);
26986strings[382] = str->add(strings[382]);
26987strings[382] = str->add(strings[382]);
26988strings[382] = str->add(strings[382]);
26989strings[382] = str->add(strings[382]);
26990strings[382] = str->add(strings[382]);
26991strings[382] = str->add(strings[382]);
26992str->del(strings[471]);
26993str->del(strings[469]);
26994str->del(strings[382]);
26995str->del(strings[382]);
26996str->del(strings[382]);
26997str->del(strings[382]);
26998str->del(strings[382]);
26999str->del(strings[382]);
27000str->del(strings[382]);
27001str->del(strings[382]);
27002str->del(strings[382]);
27003str->del(strings[382]);
27004str->del(strings[382]);
27005str->del(strings[382]);
27006str->del(strings[382]);
27007str->del(strings[382]);
27008str->del(strings[382]);
27009str->del(strings[382]);
27010str->del(strings[382]);
27011str->del(strings[382]);
27012str->del(strings[382]);
27013str->del(strings[382]);
27014str->del(strings[382]);
27015str->del(strings[470]);
27016str->del(strings[469]);
27017str->del(strings[382]);
27018str->del(strings[4619]);
27019str->del(strings[4620]);
27020str->del(strings[4621]);
27021str->del(strings[4622]);
27022str->del(strings[4623]);
27023str->del(strings[4624]);
27024str->del(strings[4625]);
27025str->del(strings[4626]);
27026str->del(strings[4627]);
27027str->del(strings[4628]);
27028str->del(strings[4629]);
27029str->del(strings[4630]);
27030str->del(strings[4631]);
27031str->del(strings[4632]);
27032str->del(strings[4633]);
27033str->del(strings[4634]);
27034str->del(strings[4635]);
27035str->del(strings[4636]);
27036str->del(strings[4637]);
27037str->del(strings[4638]);
27038str->del(strings[4639]);
27039str->del(strings[4640]);
27040str->del(strings[4641]);
27041str->del(strings[64]);
27042str->del(strings[4503]);
27043strings[64] = str->add(strings[64]);
27044strings[1869] = str->add(strings[1869]);
27045strings[4652] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/67");
27046strings[64] = str->add(strings[64]);
27047strings[1869] = str->add(strings[1869]);
27048str->del(strings[7]);
27049str->del(strings[3703]);
27050strings[7] = str->add(strings[7]);
27051strings[3027] = str->add(strings[3027]);
27052strings[4653] = str->add("e,action,mouse,move");
27053strings[4654] = str->add("e");
27054strings[4655] = str->add("mouse,move");
27055strings[1853] = str->add(strings[1853]);
27056strings[4653] = str->add(strings[4653]);
27057strings[4654] = str->add(strings[4654]);
27058strings[4655] = str->add(strings[4655]);
27059strings[1853] = str->add(strings[1853]);
27060strings[4653] = str->add(strings[4653]);
27061strings[4654] = str->add(strings[4654]);
27062strings[4655] = str->add(strings[4655]);
27063strings[1853] = str->add(strings[1853]);
27064strings[4653] = str->add(strings[4653]);
27065strings[4654] = str->add(strings[4654]);
27066strings[4655] = str->add(strings[4655]);
27067strings[1853] = str->add(strings[1853]);
27068str->del(strings[4653]);
27069str->del(strings[4654]);
27070str->del(strings[4655]);
27071str->del(strings[1853]);
27072str->del(strings[4653]);
27073str->del(strings[4654]);
27074str->del(strings[4655]);
27075str->del(strings[1853]);
27076str->del(strings[4653]);
27077str->del(strings[4654]);
27078str->del(strings[4655]);
27079str->del(strings[1853]);
27080str->del(strings[4653]);
27081str->del(strings[4654]);
27082str->del(strings[4655]);
27083str->del(strings[1853]);
27084str->del(strings[469]);
27085str->del(strings[2898]);
27086str->del(strings[469]);
27087str->del(strings[2900]);
27088str->del(strings[7]);
27089str->del(strings[3027]);
27090strings[7] = str->add(strings[7]);
27091strings[3033] = str->add(strings[3033]);
27092strings[4656] = str->add("e,action,mouse,move");
27093strings[4657] = str->add("e");
27094strings[4658] = str->add("mouse,move");
27095strings[1853] = str->add(strings[1853]);
27096strings[4656] = str->add(strings[4656]);
27097strings[4657] = str->add(strings[4657]);
27098strings[4658] = str->add(strings[4658]);
27099strings[1853] = str->add(strings[1853]);
27100str->del(strings[4656]);
27101str->del(strings[4657]);
27102str->del(strings[4658]);
27103str->del(strings[1853]);
27104str->del(strings[4656]);
27105str->del(strings[4657]);
27106str->del(strings[4658]);
27107str->del(strings[1853]);
27108strings[4659] = str->add("e,action,mouse,move");
27109strings[4660] = str->add("e");
27110strings[4661] = str->add("mouse,move");
27111strings[1853] = str->add(strings[1853]);
27112str->del(strings[4659]);
27113str->del(strings[4660]);
27114str->del(strings[4661]);
27115str->del(strings[1853]);
27116strings[4662] = str->add("e,action,mouse,move");
27117strings[4663] = str->add("e");
27118strings[4664] = str->add("mouse,move");
27119strings[1853] = str->add(strings[1853]);
27120str->del(strings[4662]);
27121str->del(strings[4663]);
27122str->del(strings[4664]);
27123str->del(strings[1853]);
27124strings[4665] = str->add("e,action,mouse,move");
27125strings[4666] = str->add("e");
27126strings[4667] = str->add("mouse,move");
27127strings[1853] = str->add(strings[1853]);
27128str->del(strings[4665]);
27129str->del(strings[4666]);
27130str->del(strings[4667]);
27131str->del(strings[1853]);
27132strings[4668] = str->add("e,action,mouse,move");
27133strings[4669] = str->add("e");
27134strings[4670] = str->add("mouse,move");
27135strings[1853] = str->add(strings[1853]);
27136str->del(strings[4668]);
27137str->del(strings[4669]);
27138str->del(strings[4670]);
27139str->del(strings[1853]);
27140strings[4671] = str->add("e,action,mouse,move");
27141strings[4672] = str->add("e");
27142strings[4673] = str->add("mouse,move");
27143strings[1853] = str->add(strings[1853]);
27144str->del(strings[4671]);
27145str->del(strings[4672]);
27146str->del(strings[4673]);
27147str->del(strings[1853]);
27148strings[4674] = str->add("e,action,mouse,move");
27149strings[4675] = str->add("e");
27150strings[4676] = str->add("mouse,move");
27151strings[1853] = str->add(strings[1853]);
27152str->del(strings[4674]);
27153str->del(strings[4675]);
27154str->del(strings[4676]);
27155str->del(strings[1853]);
27156strings[4677] = str->add("e,action,mouse,move");
27157strings[4678] = str->add("e");
27158strings[4679] = str->add("mouse,move");
27159strings[1853] = str->add(strings[1853]);
27160str->del(strings[4677]);
27161str->del(strings[4678]);
27162str->del(strings[4679]);
27163str->del(strings[1853]);
27164strings[4680] = str->add("e,action,mouse,move");
27165strings[4681] = str->add("e");
27166strings[4682] = str->add("mouse,move");
27167strings[1853] = str->add(strings[1853]);
27168str->del(strings[4680]);
27169str->del(strings[4681]);
27170str->del(strings[4682]);
27171str->del(strings[1853]);
27172strings[4683] = str->add("e,action,mouse,move");
27173strings[4684] = str->add("e");
27174strings[4685] = str->add("mouse,move");
27175strings[1853] = str->add(strings[1853]);
27176str->del(strings[4683]);
27177str->del(strings[4684]);
27178str->del(strings[4685]);
27179str->del(strings[1853]);
27180str->del(strings[7]);
27181str->del(strings[3033]);
27182strings[7] = str->add(strings[7]);
27183strings[2062] = str->add(strings[2062]);
27184strings[4686] = str->add("e,action,mouse,move");
27185strings[4687] = str->add("e");
27186strings[4688] = str->add("mouse,move");
27187strings[1853] = str->add(strings[1853]);
27188str->del(strings[4686]);
27189str->del(strings[4687]);
27190str->del(strings[4688]);
27191str->del(strings[1853]);
27192strings[4689] = str->add("e,action,mouse,move");
27193strings[4690] = str->add("e");
27194strings[4691] = str->add("mouse,move");
27195strings[1853] = str->add(strings[1853]);
27196str->del(strings[4689]);
27197str->del(strings[4690]);
27198str->del(strings[4691]);
27199str->del(strings[1853]);
27200strings[4692] = str->add("e,action,mouse,move");
27201strings[4693] = str->add("e");
27202strings[4694] = str->add("mouse,move");
27203strings[1853] = str->add(strings[1853]);
27204str->del(strings[4692]);
27205str->del(strings[4693]);
27206str->del(strings[4694]);
27207str->del(strings[1853]);
27208strings[4695] = str->add("e,action,mouse,move");
27209strings[4696] = str->add("e");
27210strings[4697] = str->add("mouse,move");
27211strings[1853] = str->add(strings[1853]);
27212str->del(strings[4695]);
27213str->del(strings[4696]);
27214str->del(strings[4697]);
27215str->del(strings[1853]);
27216strings[4698] = str->add("e,action,mouse,move");
27217strings[4699] = str->add("e");
27218strings[4700] = str->add("mouse,move");
27219strings[1853] = str->add(strings[1853]);
27220str->del(strings[4698]);
27221str->del(strings[4699]);
27222str->del(strings[4700]);
27223str->del(strings[1853]);
27224strings[4701] = str->add("e,action,mouse,move");
27225strings[4702] = str->add("e");
27226strings[4703] = str->add("mouse,move");
27227strings[1853] = str->add(strings[1853]);
27228str->del(strings[4701]);
27229str->del(strings[4702]);
27230str->del(strings[4703]);
27231str->del(strings[1853]);
27232strings[4704] = str->add("e,action,mouse,move");
27233strings[4705] = str->add("e");
27234strings[1740] = str->add(strings[1740]);
27235strings[1853] = str->add(strings[1853]);
27236strings[1737] = str->add(strings[1737]);
27237strings[1856] = str->add(strings[1856]);
27238str->del(strings[4704]);
27239str->del(strings[4705]);
27240str->del(strings[1740]);
27241str->del(strings[1853]);
27242str->del(strings[1737]);
27243str->del(strings[1856]);
27244strings[4706] = str->add("e,action,mouse,move");
27245strings[4707] = str->add("e");
27246strings[4708] = str->add("mouse,move");
27247strings[1856] = str->add(strings[1856]);
27248str->del(strings[4706]);
27249str->del(strings[4707]);
27250str->del(strings[4708]);
27251str->del(strings[1856]);
27252strings[4709] = str->add("program,start");
27253strings[4710] = str->add("go_active28");
27254strings[1932] = str->add(strings[1932]);
27255strings[4710] = str->add(strings[4710]);
27256strings[4709] = str->add(strings[4709]);
27257strings[4711] = str->add("go_activeb28");
27258strings[4709] = str->add(strings[4709]);
27259strings[4712] = str->add("go_active2");
27260strings[1932] = str->add(strings[1932]);
27261strings[4712] = str->add(strings[4712]);
27262strings[4709] = str->add(strings[4709]);
27263strings[4713] = str->add("go_activeb2");
27264str->del(strings[4709]);
27265str->del(strings[4710]);
27266str->del(strings[1932]);
27267str->del(strings[4710]);
27268str->del(strings[4709]);
27269str->del(strings[4711]);
27270str->del(strings[4709]);
27271str->del(strings[4712]);
27272str->del(strings[1932]);
27273str->del(strings[4712]);
27274str->del(strings[4709]);
27275str->del(strings[4713]);
27276str->del(strings[7]);
27277str->del(strings[2062]);
27278strings[7] = str->add(strings[7]);
27279strings[3100] = str->add(strings[3100]);
27280strings[4714] = str->add("e,action,mouse,move");
27281strings[4715] = str->add("e");
27282strings[4716] = str->add("mouse,move");
27283strings[1856] = str->add(strings[1856]);
27284str->del(strings[4714]);
27285str->del(strings[4715]);
27286str->del(strings[4716]);
27287str->del(strings[1856]);
27288strings[4717] = str->add("e,action,mouse,move");
27289strings[4718] = str->add("e");
27290strings[4719] = str->add("mouse,move");
27291strings[1856] = str->add(strings[1856]);
27292str->del(strings[4717]);
27293str->del(strings[4718]);
27294str->del(strings[4719]);
27295str->del(strings[1856]);
27296strings[4720] = str->add("e,action,mouse,move");
27297strings[4721] = str->add("e");
27298strings[4722] = str->add("mouse,move");
27299strings[1856] = str->add(strings[1856]);
27300str->del(strings[4720]);
27301str->del(strings[4721]);
27302str->del(strings[4722]);
27303str->del(strings[1856]);
27304strings[4723] = str->add("e,action,mouse,move");
27305strings[4724] = str->add("e");
27306strings[1740] = str->add(strings[1740]);
27307strings[1856] = str->add(strings[1856]);
27308strings[1737] = str->add(strings[1737]);
27309strings[1862] = str->add(strings[1862]);
27310str->del(strings[4723]);
27311str->del(strings[4724]);
27312str->del(strings[1740]);
27313str->del(strings[1856]);
27314str->del(strings[1737]);
27315str->del(strings[1862]);
27316strings[1932] = str->add(strings[1932]);
27317strings[4725] = str->add("focus_in");
27318str->del(strings[1932]);
27319str->del(strings[4725]);
27320strings[4726] = str->add("e,action,mouse,move");
27321strings[4727] = str->add("e");
27322strings[4728] = str->add("mouse,move");
27323strings[1862] = str->add(strings[1862]);
27324str->del(strings[4726]);
27325str->del(strings[4727]);
27326str->del(strings[4728]);
27327str->del(strings[1862]);
27328strings[4729] = str->add("e,action,mouse,move");
27329strings[4730] = str->add("e");
27330strings[4731] = str->add("mouse,move");
27331strings[1862] = str->add(strings[1862]);
27332str->del(strings[4729]);
27333str->del(strings[4730]);
27334str->del(strings[4731]);
27335str->del(strings[1862]);
27336strings[4732] = str->add("e,action,mouse,move");
27337strings[4733] = str->add("e");
27338strings[4734] = str->add("mouse,move");
27339strings[1862] = str->add(strings[1862]);
27340str->del(strings[4732]);
27341str->del(strings[4733]);
27342str->del(strings[4734]);
27343str->del(strings[1862]);
27344strings[4735] = str->add("e,action,mouse,move");
27345strings[4736] = str->add("e");
27346strings[4737] = str->add("mouse,move");
27347strings[1862] = str->add(strings[1862]);
27348str->del(strings[4735]);
27349str->del(strings[4736]);
27350str->del(strings[4737]);
27351str->del(strings[1862]);
27352strings[4738] = str->add("e,action,mouse,move");
27353strings[4739] = str->add("e");
27354strings[4740] = str->add("mouse,move");
27355strings[1862] = str->add(strings[1862]);
27356str->del(strings[4738]);
27357str->del(strings[4739]);
27358str->del(strings[4740]);
27359str->del(strings[1862]);
27360str->del(strings[7]);
27361str->del(strings[3100]);
27362strings[7] = str->add(strings[7]);
27363strings[3111] = str->add(strings[3111]);
27364strings[4741] = str->add("e,action,mouse,move");
27365strings[4742] = str->add("e");
27366strings[4743] = str->add("mouse,move");
27367strings[1862] = str->add(strings[1862]);
27368str->del(strings[4741]);
27369str->del(strings[4742]);
27370str->del(strings[4743]);
27371str->del(strings[1862]);
27372strings[4744] = str->add("e,action,mouse,move");
27373strings[4745] = str->add("e");
27374strings[4746] = str->add("mouse,move");
27375strings[1862] = str->add(strings[1862]);
27376str->del(strings[4744]);
27377str->del(strings[4745]);
27378str->del(strings[4746]);
27379str->del(strings[1862]);
27380strings[4747] = str->add("e,action,mouse,move");
27381strings[4748] = str->add("e");
27382strings[4749] = str->add("mouse,move");
27383strings[1862] = str->add(strings[1862]);
27384str->del(strings[4747]);
27385str->del(strings[4748]);
27386str->del(strings[4749]);
27387str->del(strings[1862]);
27388strings[4750] = str->add("e,action,mouse,move");
27389strings[4751] = str->add("e");
27390strings[4752] = str->add("mouse,move");
27391strings[1862] = str->add(strings[1862]);
27392str->del(strings[4750]);
27393str->del(strings[4751]);
27394str->del(strings[4752]);
27395str->del(strings[1862]);
27396strings[1932] = str->add(strings[1932]);
27397strings[4753] = str->add("off");
27398str->del(strings[1932]);
27399str->del(strings[4753]);
27400str->del(strings[7]);
27401str->del(strings[3111]);
27402strings[7] = str->add(strings[7]);
27403strings[3136] = str->add(strings[3136]);
27404strings[4754] = str->add("e,action,mouse,move");
27405strings[4755] = str->add("e");
27406strings[4756] = str->add("mouse,move");
27407strings[1862] = str->add(strings[1862]);
27408str->del(strings[4754]);
27409str->del(strings[4755]);
27410str->del(strings[4756]);
27411str->del(strings[1862]);
27412strings[4757] = str->add("e,action,mouse,move");
27413strings[4758] = str->add("e");
27414strings[4759] = str->add("mouse,move");
27415strings[1862] = str->add(strings[1862]);
27416str->del(strings[4757]);
27417str->del(strings[4758]);
27418str->del(strings[4759]);
27419str->del(strings[1862]);
27420strings[4760] = str->add("e,action,mouse,move");
27421strings[4761] = str->add("e");
27422strings[4762] = str->add("mouse,move");
27423strings[1862] = str->add(strings[1862]);
27424str->del(strings[4760]);
27425str->del(strings[4761]);
27426str->del(strings[4762]);
27427str->del(strings[1862]);
27428strings[4763] = str->add("e,action,mouse,move");
27429strings[4764] = str->add("e");
27430strings[4765] = str->add("mouse,move");
27431strings[1862] = str->add(strings[1862]);
27432str->del(strings[4763]);
27433str->del(strings[4764]);
27434str->del(strings[4765]);
27435str->del(strings[1862]);
27436strings[4766] = str->add("e,action,mouse,move");
27437strings[4767] = str->add("e");
27438strings[4768] = str->add("mouse,move");
27439strings[1862] = str->add(strings[1862]);
27440str->del(strings[4766]);
27441str->del(strings[4767]);
27442str->del(strings[4768]);
27443str->del(strings[1862]);
27444strings[4769] = str->add("e,action,mouse,move");
27445strings[4770] = str->add("e");
27446strings[4771] = str->add("mouse,move");
27447strings[1862] = str->add(strings[1862]);
27448str->del(strings[4769]);
27449str->del(strings[4770]);
27450str->del(strings[4771]);
27451str->del(strings[1862]);
27452strings[4772] = str->add("e,action,mouse,move");
27453strings[4773] = str->add("e");
27454strings[4774] = str->add("mouse,move");
27455strings[1862] = str->add(strings[1862]);
27456str->del(strings[4772]);
27457str->del(strings[4773]);
27458str->del(strings[4774]);
27459str->del(strings[1862]);
27460strings[4775] = str->add("e,action,mouse,move");
27461strings[4776] = str->add("e");
27462strings[4777] = str->add("mouse,move");
27463strings[1862] = str->add(strings[1862]);
27464str->del(strings[4775]);
27465str->del(strings[4776]);
27466str->del(strings[4777]);
27467str->del(strings[1862]);
27468strings[4778] = str->add("e,action,mouse,move");
27469strings[4779] = str->add("e");
27470strings[4780] = str->add("mouse,move");
27471strings[1862] = str->add(strings[1862]);
27472str->del(strings[4778]);
27473str->del(strings[4779]);
27474str->del(strings[4780]);
27475str->del(strings[1862]);
27476strings[4781] = str->add("e,action,mouse,move");
27477strings[4782] = str->add("e");
27478strings[4783] = str->add("mouse,move");
27479strings[1862] = str->add(strings[1862]);
27480str->del(strings[4781]);
27481str->del(strings[4782]);
27482str->del(strings[4783]);
27483str->del(strings[1862]);
27484strings[4784] = str->add("e,action,mouse,move");
27485strings[4785] = str->add("e");
27486strings[4786] = str->add("mouse,move");
27487strings[1862] = str->add(strings[1862]);
27488str->del(strings[4784]);
27489str->del(strings[4785]);
27490str->del(strings[4786]);
27491str->del(strings[1862]);
27492strings[4787] = str->add("e,action,mouse,move");
27493strings[4788] = str->add("e");
27494strings[4789] = str->add("mouse,move");
27495strings[1862] = str->add(strings[1862]);
27496str->del(strings[4787]);
27497str->del(strings[4788]);
27498str->del(strings[4789]);
27499str->del(strings[1862]);
27500strings[4790] = str->add("program,start");
27501strings[4791] = str->add("go_active27");
27502strings[1932] = str->add(strings[1932]);
27503strings[4791] = str->add(strings[4791]);
27504strings[4790] = str->add(strings[4790]);
27505strings[4792] = str->add("go_activeb27");
27506strings[4790] = str->add(strings[4790]);
27507strings[4793] = str->add("go_active3");
27508strings[1932] = str->add(strings[1932]);
27509strings[4793] = str->add(strings[4793]);
27510strings[4790] = str->add(strings[4790]);
27511strings[4794] = str->add("go_activeb3");
27512str->del(strings[4790]);
27513str->del(strings[4791]);
27514str->del(strings[1932]);
27515str->del(strings[4791]);
27516str->del(strings[4790]);
27517str->del(strings[4792]);
27518str->del(strings[4790]);
27519str->del(strings[4793]);
27520str->del(strings[1932]);
27521str->del(strings[4793]);
27522str->del(strings[4790]);
27523str->del(strings[4794]);
27524str->del(strings[7]);
27525str->del(strings[3136]);
27526strings[7] = str->add(strings[7]);
27527strings[3167] = str->add(strings[3167]);
27528strings[4795] = str->add("e,action,mouse,move");
27529strings[4796] = str->add("e");
27530strings[4797] = str->add("mouse,move");
27531strings[1862] = str->add(strings[1862]);
27532str->del(strings[4795]);
27533str->del(strings[4796]);
27534str->del(strings[4797]);
27535str->del(strings[1862]);
27536strings[4798] = str->add("e,action,mouse,move");
27537strings[4799] = str->add("e");
27538strings[1740] = str->add(strings[1740]);
27539strings[1862] = str->add(strings[1862]);
27540strings[1737] = str->add(strings[1737]);
27541strings[1856] = str->add(strings[1856]);
27542str->del(strings[4798]);
27543str->del(strings[4799]);
27544str->del(strings[1740]);
27545str->del(strings[1862]);
27546str->del(strings[1737]);
27547str->del(strings[1856]);
27548strings[4800] = str->add("e,action,mouse,move");
27549strings[4801] = str->add("e");
27550strings[4802] = str->add("mouse,move");
27551strings[1856] = str->add(strings[1856]);
27552str->del(strings[4800]);
27553str->del(strings[4801]);
27554str->del(strings[4802]);
27555str->del(strings[1856]);
27556strings[4803] = str->add("e,action,mouse,move");
27557strings[4804] = str->add("e");
27558strings[4805] = str->add("mouse,move");
27559strings[1856] = str->add(strings[1856]);
27560str->del(strings[4803]);
27561str->del(strings[4804]);
27562str->del(strings[4805]);
27563str->del(strings[1856]);
27564strings[4806] = str->add("e,action,mouse,move");
27565strings[4807] = str->add("e");
27566strings[4808] = str->add("mouse,move");
27567strings[1856] = str->add(strings[1856]);
27568str->del(strings[4806]);
27569str->del(strings[4807]);
27570str->del(strings[4808]);
27571str->del(strings[1856]);
27572strings[4809] = str->add("e,action,mouse,move");
27573strings[4810] = str->add("e");
27574strings[4811] = str->add("mouse,move");
27575strings[1856] = str->add(strings[1856]);
27576str->del(strings[4809]);
27577str->del(strings[4810]);
27578str->del(strings[4811]);
27579str->del(strings[1856]);
27580strings[4812] = str->add("e,action,mouse,move");
27581strings[4813] = str->add("e");
27582strings[1740] = str->add(strings[1740]);
27583strings[1856] = str->add(strings[1856]);
27584strings[1737] = str->add(strings[1737]);
27585strings[1853] = str->add(strings[1853]);
27586str->del(strings[4812]);
27587str->del(strings[4813]);
27588str->del(strings[1740]);
27589str->del(strings[1856]);
27590str->del(strings[1737]);
27591str->del(strings[1853]);
27592strings[4814] = str->add("e,action,mouse,move");
27593strings[4815] = str->add("e");
27594strings[4816] = str->add("mouse,move");
27595strings[1853] = str->add(strings[1853]);
27596str->del(strings[4814]);
27597str->del(strings[4815]);
27598str->del(strings[4816]);
27599str->del(strings[1853]);
27600str->del(strings[7]);
27601str->del(strings[3167]);
27602strings[7] = str->add(strings[7]);
27603strings[3190] = str->add(strings[3190]);
27604strings[4817] = str->add("e,action,mouse,move");
27605strings[4818] = str->add("e");
27606strings[4819] = str->add("mouse,move");
27607strings[1853] = str->add(strings[1853]);
27608strings[1740] = str->add(strings[1740]);
27609strings[1853] = str->add(strings[1853]);
27610strings[4817] = str->add(strings[4817]);
27611strings[4818] = str->add(strings[4818]);
27612strings[4817] = str->add(strings[4817]);
27613strings[4818] = str->add(strings[4818]);
27614strings[4820] = str->add("e,state,focused");
27615strings[4818] = str->add(strings[4818]);
27616str->del(strings[4817]);
27617str->del(strings[4818]);
27618str->del(strings[4819]);
27619str->del(strings[1853]);
27620str->del(strings[1740]);
27621str->del(strings[1853]);
27622str->del(strings[4817]);
27623str->del(strings[4818]);
27624str->del(strings[4817]);
27625str->del(strings[4818]);
27626str->del(strings[4820]);
27627str->del(strings[4818]);
27628strings[4821] = str->add("e,action,mouse,move");
27629strings[4822] = str->add("e");
27630str->del(strings[4821]);
27631str->del(strings[4822]);
27632strings[4823] = str->add("e,action,mouse,move");
27633strings[4824] = str->add("e");
27634str->del(strings[4823]);
27635str->del(strings[4824]);
27636strings[4825] = str->add("e,action,mouse,move");
27637strings[4826] = str->add("e");
27638str->del(strings[4825]);
27639str->del(strings[4826]);
27640strings[1932] = str->add(strings[1932]);
27641strings[4827] = str->add("go_activeb1");
27642strings[4828] = str->add("program,start");
27643strings[4829] = str->add("go_activec1");
27644strings[1932] = str->add(strings[1932]);
27645strings[4830] = str->add("go_activeb29");
27646strings[4828] = str->add(strings[4828]);
27647strings[4831] = str->add("go_activec29");
27648str->del(strings[1932]);
27649str->del(strings[4827]);
27650str->del(strings[4828]);
27651str->del(strings[4829]);
27652str->del(strings[1932]);
27653str->del(strings[4830]);
27654str->del(strings[4828]);
27655str->del(strings[4831]);
27656str->del(strings[7]);
27657str->del(strings[3190]);
27658strings[7] = str->add(strings[7]);
27659strings[2148] = str->add(strings[2148]);
27660strings[4832] = str->add("e,action,mouse,move");
27661strings[4833] = str->add("e");
27662strings[1737] = str->add(strings[1737]);
27663strings[4834] = str->add("base2");
27664strings[1737] = str->add(strings[1737]);
27665strings[1946] = str->add(strings[1946]);
27666strings[1737] = str->add(strings[1737]);
27667strings[1946] = str->add(strings[1946]);
27668str->del(strings[4832]);
27669str->del(strings[4833]);
27670str->del(strings[1737]);
27671str->del(strings[4834]);
27672str->del(strings[1737]);
27673str->del(strings[1946]);
27674str->del(strings[1737]);
27675str->del(strings[1946]);
27676strings[4835] = str->add("e,action,mouse,move");
27677strings[4836] = str->add("e");
27678strings[4837] = str->add("mouse,move");
27679strings[4838] = str->add("base2");
27680strings[4837] = str->add(strings[4837]);
27681strings[1946] = str->add(strings[1946]);
27682strings[4837] = str->add(strings[4837]);
27683strings[1946] = str->add(strings[1946]);
27684str->del(strings[4835]);
27685str->del(strings[4836]);
27686str->del(strings[4837]);
27687str->del(strings[4838]);
27688str->del(strings[4837]);
27689str->del(strings[1946]);
27690str->del(strings[4837]);
27691str->del(strings[1946]);
27692strings[4839] = str->add("e,action,mouse,move");
27693strings[4840] = str->add("e");
27694strings[4841] = str->add("mouse,move");
27695strings[4842] = str->add("base2");
27696strings[4841] = str->add(strings[4841]);
27697strings[1946] = str->add(strings[1946]);
27698strings[4841] = str->add(strings[4841]);
27699strings[1946] = str->add(strings[1946]);
27700str->del(strings[4839]);
27701str->del(strings[4840]);
27702str->del(strings[4841]);
27703str->del(strings[4842]);
27704str->del(strings[4841]);
27705str->del(strings[1946]);
27706str->del(strings[4841]);
27707str->del(strings[1946]);
27708strings[4843] = str->add("e,action,mouse,move");
27709strings[4844] = str->add("e");
27710strings[4845] = str->add("mouse,move");
27711strings[4846] = str->add("base2");
27712strings[4845] = str->add(strings[4845]);
27713strings[1946] = str->add(strings[1946]);
27714strings[4845] = str->add(strings[4845]);
27715strings[1946] = str->add(strings[1946]);
27716str->del(strings[4843]);
27717str->del(strings[4844]);
27718str->del(strings[4845]);
27719str->del(strings[4846]);
27720str->del(strings[4845]);
27721str->del(strings[1946]);
27722str->del(strings[4845]);
27723str->del(strings[1946]);
27724strings[4847] = str->add("e,action,mouse,move");
27725strings[4848] = str->add("e");
27726strings[1740] = str->add(strings[1740]);
27727strings[4849] = str->add("base2");
27728strings[1740] = str->add(strings[1740]);
27729strings[1946] = str->add(strings[1946]);
27730strings[1740] = str->add(strings[1740]);
27731strings[1946] = str->add(strings[1946]);
27732strings[1737] = str->add(strings[1737]);
27733strings[4850] = str->add("icon_area");
27734strings[1737] = str->add(strings[1737]);
27735strings[1946] = str->add(strings[1946]);
27736strings[1737] = str->add(strings[1737]);
27737strings[1946] = str->add(strings[1946]);
27738strings[1737] = str->add(strings[1737]);
27739strings[1946] = str->add(strings[1946]);
27740str->del(strings[4847]);
27741str->del(strings[4848]);
27742str->del(strings[1740]);
27743str->del(strings[4849]);
27744str->del(strings[1740]);
27745str->del(strings[1946]);
27746str->del(strings[1740]);
27747str->del(strings[1946]);
27748str->del(strings[1737]);
27749str->del(strings[4850]);
27750str->del(strings[1737]);
27751str->del(strings[1946]);
27752str->del(strings[1737]);
27753str->del(strings[1946]);
27754str->del(strings[1737]);
27755str->del(strings[1946]);
27756strings[4851] = str->add("e,action,mouse,move");
27757strings[4852] = str->add("e");
27758strings[4853] = str->add("mouse,move");
27759strings[4854] = str->add("icon_area");
27760strings[4853] = str->add(strings[4853]);
27761strings[1946] = str->add(strings[1946]);
27762strings[4853] = str->add(strings[4853]);
27763strings[1946] = str->add(strings[1946]);
27764strings[4853] = str->add(strings[4853]);
27765strings[1946] = str->add(strings[1946]);
27766str->del(strings[4851]);
27767str->del(strings[4852]);
27768str->del(strings[4853]);
27769str->del(strings[4854]);
27770str->del(strings[4853]);
27771str->del(strings[1946]);
27772str->del(strings[4853]);
27773str->del(strings[1946]);
27774str->del(strings[4853]);
27775str->del(strings[1946]);
27776strings[4855] = str->add("e,action,mouse,move");
27777strings[4856] = str->add("e");
27778strings[1740] = str->add(strings[1740]);
27779strings[4857] = str->add("icon_area");
27780strings[1740] = str->add(strings[1740]);
27781strings[1946] = str->add(strings[1946]);
27782strings[1740] = str->add(strings[1740]);
27783strings[1946] = str->add(strings[1946]);
27784strings[1740] = str->add(strings[1740]);
27785strings[1946] = str->add(strings[1946]);
27786strings[1737] = str->add(strings[1737]);
27787strings[4858] = str->add("base2");
27788strings[1737] = str->add(strings[1737]);
27789strings[1946] = str->add(strings[1946]);
27790strings[1737] = str->add(strings[1737]);
27791strings[1946] = str->add(strings[1946]);
27792str->del(strings[4855]);
27793str->del(strings[4856]);
27794str->del(strings[1740]);
27795str->del(strings[4857]);
27796str->del(strings[1740]);
27797str->del(strings[1946]);
27798str->del(strings[1740]);
27799str->del(strings[1946]);
27800str->del(strings[1740]);
27801str->del(strings[1946]);
27802str->del(strings[1737]);
27803str->del(strings[4858]);
27804str->del(strings[1737]);
27805str->del(strings[1946]);
27806str->del(strings[1737]);
27807str->del(strings[1946]);
27808strings[4859] = str->add("e,action,mouse,move");
27809strings[4860] = str->add("e");
27810strings[4861] = str->add("mouse,move");
27811strings[4862] = str->add("base2");
27812strings[4861] = str->add(strings[4861]);
27813strings[1946] = str->add(strings[1946]);
27814strings[4861] = str->add(strings[4861]);
27815strings[1946] = str->add(strings[1946]);
27816str->del(strings[4859]);
27817str->del(strings[4860]);
27818str->del(strings[4861]);
27819str->del(strings[4862]);
27820str->del(strings[4861]);
27821str->del(strings[1946]);
27822str->del(strings[4861]);
27823str->del(strings[1946]);
27824str->del(strings[7]);
27825str->del(strings[2148]);
27826strings[7] = str->add(strings[7]);
27827strings[2150] = str->add(strings[2150]);
27828strings[4863] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/61");
27829strings[7] = str->add(strings[7]);
27830strings[2150] = str->add(strings[2150]);
27831strings[4864] = str->add("e,action,mouse,move");
27832strings[4865] = str->add("e");
27833strings[4866] = str->add("mouse,move");
27834strings[4867] = str->add("base2");
27835strings[4866] = str->add(strings[4866]);
27836strings[1946] = str->add(strings[1946]);
27837strings[4866] = str->add(strings[4866]);
27838strings[1946] = str->add(strings[1946]);
27839str->del(strings[4864]);
27840str->del(strings[4865]);
27841str->del(strings[4866]);
27842str->del(strings[4867]);
27843str->del(strings[4866]);
27844str->del(strings[1946]);
27845str->del(strings[4866]);
27846str->del(strings[1946]);
27847strings[4868] = str->add("e,action,mouse,move");
27848strings[4869] = str->add("e");
27849strings[4870] = str->add("mouse,move");
27850strings[4871] = str->add("base2");
27851strings[4870] = str->add(strings[4870]);
27852strings[1946] = str->add(strings[1946]);
27853strings[4870] = str->add(strings[4870]);
27854strings[1946] = str->add(strings[1946]);
27855str->del(strings[4868]);
27856str->del(strings[4869]);
27857str->del(strings[4870]);
27858str->del(strings[4871]);
27859str->del(strings[4870]);
27860str->del(strings[1946]);
27861str->del(strings[4870]);
27862str->del(strings[1946]);
27863strings[4872] = str->add("e,action,mouse,move");
27864strings[4873] = str->add("e");
27865strings[4874] = str->add("mouse,move");
27866strings[4875] = str->add("base2");
27867strings[4874] = str->add(strings[4874]);
27868strings[1946] = str->add(strings[1946]);
27869strings[4874] = str->add(strings[4874]);
27870strings[1946] = str->add(strings[1946]);
27871str->del(strings[4872]);
27872str->del(strings[4873]);
27873str->del(strings[4874]);
27874str->del(strings[4875]);
27875str->del(strings[4874]);
27876str->del(strings[1946]);
27877str->del(strings[4874]);
27878str->del(strings[1946]);
27879strings[4876] = str->add("e,action,mouse,move");
27880strings[4877] = str->add("e");
27881strings[4878] = str->add("mouse,move");
27882strings[4879] = str->add("base2");
27883strings[4878] = str->add(strings[4878]);
27884strings[1946] = str->add(strings[1946]);
27885strings[4878] = str->add(strings[4878]);
27886strings[1946] = str->add(strings[1946]);
27887str->del(strings[4876]);
27888str->del(strings[4877]);
27889str->del(strings[4878]);
27890str->del(strings[4879]);
27891str->del(strings[4878]);
27892str->del(strings[1946]);
27893str->del(strings[4878]);
27894str->del(strings[1946]);
27895strings[4880] = str->add("program,start");
27896strings[4881] = str->add("go_active26");
27897strings[1932] = str->add(strings[1932]);
27898strings[4881] = str->add(strings[4881]);
27899strings[4880] = str->add(strings[4880]);
27900strings[4882] = str->add("go_activeb26");
27901strings[4880] = str->add(strings[4880]);
27902strings[4883] = str->add("go_active4");
27903strings[1932] = str->add(strings[1932]);
27904strings[4883] = str->add(strings[4883]);
27905strings[4880] = str->add(strings[4880]);
27906strings[4884] = str->add("go_activeb4");
27907str->del(strings[4880]);
27908str->del(strings[4881]);
27909str->del(strings[1932]);
27910str->del(strings[4881]);
27911str->del(strings[4880]);
27912str->del(strings[4882]);
27913str->del(strings[4880]);
27914str->del(strings[4883]);
27915str->del(strings[1932]);
27916str->del(strings[4883]);
27917str->del(strings[4880]);
27918str->del(strings[4884]);
27919strings[4885] = str->add("e,action,mouse,move");
27920strings[4886] = str->add("e");
27921strings[4887] = str->add("mouse,move");
27922strings[4888] = str->add("base2");
27923strings[4887] = str->add(strings[4887]);
27924strings[1946] = str->add(strings[1946]);
27925strings[4887] = str->add(strings[4887]);
27926strings[1946] = str->add(strings[1946]);
27927str->del(strings[4885]);
27928str->del(strings[4886]);
27929str->del(strings[4887]);
27930str->del(strings[4888]);
27931str->del(strings[4887]);
27932str->del(strings[1946]);
27933str->del(strings[4887]);
27934str->del(strings[1946]);
27935strings[4889] = str->add("e,action,mouse,move");
27936strings[4890] = str->add("e");
27937strings[4891] = str->add("mouse,move");
27938strings[4892] = str->add("base2");
27939strings[4891] = str->add(strings[4891]);
27940strings[1946] = str->add(strings[1946]);
27941strings[4891] = str->add(strings[4891]);
27942strings[1946] = str->add(strings[1946]);
27943str->del(strings[4889]);
27944str->del(strings[4890]);
27945str->del(strings[4891]);
27946str->del(strings[4892]);
27947str->del(strings[4891]);
27948str->del(strings[1946]);
27949str->del(strings[4891]);
27950str->del(strings[1946]);
27951strings[4893] = str->add("e,action,mouse,move");
27952strings[4894] = str->add("e");
27953strings[1740] = str->add(strings[1740]);
27954strings[4895] = str->add("base2");
27955strings[1740] = str->add(strings[1740]);
27956strings[1946] = str->add(strings[1946]);
27957strings[1740] = str->add(strings[1740]);
27958strings[1946] = str->add(strings[1946]);
27959strings[1737] = str->add(strings[1737]);
27960strings[377] = str->add(strings[377]);
27961strings[1737] = str->add(strings[1737]);
27962strings[1946] = str->add(strings[1946]);
27963strings[1737] = str->add(strings[1737]);
27964strings[1946] = str->add(strings[1946]);
27965str->del(strings[4893]);
27966str->del(strings[4894]);
27967str->del(strings[1740]);
27968str->del(strings[4895]);
27969str->del(strings[1740]);
27970str->del(strings[1946]);
27971str->del(strings[1740]);
27972str->del(strings[1946]);
27973str->del(strings[1737]);
27974str->del(strings[377]);
27975str->del(strings[1737]);
27976str->del(strings[1946]);
27977str->del(strings[1737]);
27978str->del(strings[1946]);
27979strings[4896] = str->add("e,action,mouse,move");
27980strings[4897] = str->add("e");
27981strings[1740] = str->add(strings[1740]);
27982strings[377] = str->add(strings[377]);
27983strings[1740] = str->add(strings[1740]);
27984strings[1946] = str->add(strings[1946]);
27985strings[1740] = str->add(strings[1740]);
27986strings[1946] = str->add(strings[1946]);
27987str->del(strings[4896]);
27988str->del(strings[4897]);
27989str->del(strings[1740]);
27990str->del(strings[377]);
27991str->del(strings[1740]);
27992str->del(strings[1946]);
27993str->del(strings[1740]);
27994str->del(strings[1946]);
27995strings[4898] = str->add("e,action,mouse,move");
27996strings[4899] = str->add("e");
27997str->del(strings[4898]);
27998str->del(strings[4899]);
27999strings[4900] = str->add("e,action,mouse,move");
28000strings[4901] = str->add("e");
28001str->del(strings[4900]);
28002str->del(strings[4901]);
28003strings[4902] = str->add("e,action,mouse,move");
28004strings[4903] = str->add("e");
28005strings[1737] = str->add(strings[1737]);
28006strings[377] = str->add(strings[377]);
28007strings[1737] = str->add(strings[1737]);
28008strings[1946] = str->add(strings[1946]);
28009strings[1737] = str->add(strings[1737]);
28010strings[1946] = str->add(strings[1946]);
28011str->del(strings[4902]);
28012str->del(strings[4903]);
28013str->del(strings[1737]);
28014str->del(strings[377]);
28015str->del(strings[1737]);
28016str->del(strings[1946]);
28017str->del(strings[1737]);
28018str->del(strings[1946]);
28019strings[4904] = str->add("e,action,mouse,move");
28020strings[4905] = str->add("e");
28021strings[4906] = str->add("mouse,move");
28022strings[377] = str->add(strings[377]);
28023strings[4906] = str->add(strings[4906]);
28024strings[1946] = str->add(strings[1946]);
28025strings[4906] = str->add(strings[4906]);
28026strings[1946] = str->add(strings[1946]);
28027str->del(strings[4904]);
28028str->del(strings[4905]);
28029str->del(strings[4906]);
28030str->del(strings[377]);
28031str->del(strings[4906]);
28032str->del(strings[1946]);
28033str->del(strings[4906]);
28034str->del(strings[1946]);
28035strings[4907] = str->add("e,action,mouse,move");
28036strings[4908] = str->add("e");
28037strings[4909] = str->add("mouse,move");
28038strings[377] = str->add(strings[377]);
28039strings[4909] = str->add(strings[4909]);
28040strings[1946] = str->add(strings[1946]);
28041strings[4909] = str->add(strings[4909]);
28042strings[1946] = str->add(strings[1946]);
28043str->del(strings[4907]);
28044str->del(strings[4908]);
28045str->del(strings[4909]);
28046str->del(strings[377]);
28047str->del(strings[4909]);
28048str->del(strings[1946]);
28049str->del(strings[4909]);
28050str->del(strings[1946]);
28051str->del(strings[7]);
28052str->del(strings[2150]);
28053strings[7] = str->add(strings[7]);
28054strings[1966] = str->add(strings[1966]);
28055strings[4910] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/62");
28056strings[7] = str->add(strings[7]);
28057strings[1966] = str->add(strings[1966]);
28058strings[4911] = str->add("e,action,mouse,move");
28059strings[4912] = str->add("e");
28060strings[4913] = str->add("mouse,move");
28061strings[377] = str->add(strings[377]);
28062strings[4913] = str->add(strings[4913]);
28063strings[1946] = str->add(strings[1946]);
28064strings[4913] = str->add(strings[4913]);
28065strings[1946] = str->add(strings[1946]);
28066str->del(strings[4911]);
28067str->del(strings[4912]);
28068str->del(strings[4913]);
28069str->del(strings[377]);
28070str->del(strings[4913]);
28071str->del(strings[1946]);
28072str->del(strings[4913]);
28073str->del(strings[1946]);
28074strings[4914] = str->add("e,action,mouse,move");
28075strings[4915] = str->add("e");
28076strings[4916] = str->add("mouse,move");
28077strings[377] = str->add(strings[377]);
28078strings[4916] = str->add(strings[4916]);
28079strings[1946] = str->add(strings[1946]);
28080strings[4916] = str->add(strings[4916]);
28081strings[1946] = str->add(strings[1946]);
28082str->del(strings[4914]);
28083str->del(strings[4915]);
28084str->del(strings[4916]);
28085str->del(strings[377]);
28086str->del(strings[4916]);
28087str->del(strings[1946]);
28088str->del(strings[4916]);
28089str->del(strings[1946]);
28090strings[4917] = str->add("e,action,mouse,move");
28091strings[4918] = str->add("e");
28092strings[4919] = str->add("mouse,move");
28093strings[377] = str->add(strings[377]);
28094strings[4919] = str->add(strings[4919]);
28095strings[1946] = str->add(strings[1946]);
28096strings[4919] = str->add(strings[4919]);
28097strings[1946] = str->add(strings[1946]);
28098str->del(strings[4917]);
28099str->del(strings[4918]);
28100str->del(strings[4919]);
28101str->del(strings[377]);
28102str->del(strings[4919]);
28103str->del(strings[1946]);
28104str->del(strings[4919]);
28105str->del(strings[1946]);
28106strings[4920] = str->add("e,action,mouse,move");
28107strings[4921] = str->add("e");
28108strings[4922] = str->add("mouse,move");
28109strings[377] = str->add(strings[377]);
28110strings[4922] = str->add(strings[4922]);
28111strings[1946] = str->add(strings[1946]);
28112strings[4922] = str->add(strings[4922]);
28113strings[1946] = str->add(strings[1946]);
28114str->del(strings[4920]);
28115str->del(strings[4921]);
28116str->del(strings[4922]);
28117str->del(strings[377]);
28118str->del(strings[4922]);
28119str->del(strings[1946]);
28120str->del(strings[4922]);
28121str->del(strings[1946]);
28122strings[1932] = str->add(strings[1932]);
28123strings[4923] = str->add("go_activeb28");
28124strings[4924] = str->add("program,start");
28125strings[4925] = str->add("go_activec28");
28126strings[1932] = str->add(strings[1932]);
28127strings[4926] = str->add("go_activeb2");
28128strings[4924] = str->add(strings[4924]);
28129strings[4927] = str->add("go_activec2");
28130str->del(strings[1932]);
28131str->del(strings[4923]);
28132str->del(strings[4924]);
28133str->del(strings[4925]);
28134str->del(strings[1932]);
28135str->del(strings[4926]);
28136str->del(strings[4924]);
28137str->del(strings[4927]);
28138str->del(strings[7]);
28139str->del(strings[1966]);
28140strings[7] = str->add(strings[7]);
28141strings[1964] = str->add(strings[1964]);
28142strings[4928] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/63");
28143strings[7] = str->add(strings[7]);
28144strings[1964] = str->add(strings[1964]);
28145strings[4929] = str->add("e,action,mouse,move");
28146strings[4930] = str->add("e");
28147strings[4931] = str->add("mouse,move");
28148strings[377] = str->add(strings[377]);
28149strings[4931] = str->add(strings[4931]);
28150strings[1946] = str->add(strings[1946]);
28151strings[4931] = str->add(strings[4931]);
28152strings[1946] = str->add(strings[1946]);
28153str->del(strings[4929]);
28154str->del(strings[4930]);
28155str->del(strings[4931]);
28156str->del(strings[377]);
28157str->del(strings[4931]);
28158str->del(strings[1946]);
28159str->del(strings[4931]);
28160str->del(strings[1946]);
28161strings[4932] = str->add("e,action,mouse,move");
28162strings[4933] = str->add("e");
28163strings[4934] = str->add("mouse,move");
28164strings[377] = str->add(strings[377]);
28165strings[4934] = str->add(strings[4934]);
28166strings[1946] = str->add(strings[1946]);
28167strings[4934] = str->add(strings[4934]);
28168strings[1946] = str->add(strings[1946]);
28169str->del(strings[4932]);
28170str->del(strings[4933]);
28171str->del(strings[4934]);
28172str->del(strings[377]);
28173str->del(strings[4934]);
28174str->del(strings[1946]);
28175str->del(strings[4934]);
28176str->del(strings[1946]);
28177strings[4935] = str->add("e,action,mouse,move");
28178strings[4936] = str->add("e");
28179strings[4937] = str->add("mouse,move");
28180strings[377] = str->add(strings[377]);
28181strings[4937] = str->add(strings[4937]);
28182strings[1946] = str->add(strings[1946]);
28183strings[4937] = str->add(strings[4937]);
28184strings[1946] = str->add(strings[1946]);
28185str->del(strings[4935]);
28186str->del(strings[4936]);
28187str->del(strings[4937]);
28188str->del(strings[377]);
28189str->del(strings[4937]);
28190str->del(strings[1946]);
28191str->del(strings[4937]);
28192str->del(strings[1946]);
28193strings[4938] = str->add("e,action,mouse,move");
28194strings[4939] = str->add("e");
28195strings[4940] = str->add("mouse,move");
28196strings[377] = str->add(strings[377]);
28197strings[4940] = str->add(strings[4940]);
28198strings[1946] = str->add(strings[1946]);
28199strings[4940] = str->add(strings[4940]);
28200strings[1946] = str->add(strings[1946]);
28201str->del(strings[4938]);
28202str->del(strings[4939]);
28203str->del(strings[4940]);
28204str->del(strings[377]);
28205str->del(strings[4940]);
28206str->del(strings[1946]);
28207str->del(strings[4940]);
28208str->del(strings[1946]);
28209str->del(strings[7]);
28210str->del(strings[1964]);
28211strings[7] = str->add(strings[7]);
28212strings[1968] = str->add(strings[1968]);
28213strings[4941] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/64");
28214strings[7] = str->add(strings[7]);
28215strings[1968] = str->add(strings[1968]);
28216strings[4942] = str->add("program,start");
28217strings[4943] = str->add("go_active25");
28218strings[1932] = str->add(strings[1932]);
28219strings[4943] = str->add(strings[4943]);
28220strings[4942] = str->add(strings[4942]);
28221strings[4944] = str->add("go_activeb25");
28222strings[4942] = str->add(strings[4942]);
28223strings[4945] = str->add("go_active5");
28224strings[1932] = str->add(strings[1932]);
28225strings[4945] = str->add(strings[4945]);
28226strings[4942] = str->add(strings[4942]);
28227strings[4946] = str->add("go_activeb5");
28228str->del(strings[4942]);
28229str->del(strings[4943]);
28230str->del(strings[1932]);
28231str->del(strings[4943]);
28232str->del(strings[4942]);
28233str->del(strings[4944]);
28234str->del(strings[4942]);
28235str->del(strings[4945]);
28236str->del(strings[1932]);
28237str->del(strings[4945]);
28238str->del(strings[4942]);
28239str->del(strings[4946]);
28240str->del(strings[7]);
28241str->del(strings[1968]);
28242strings[7] = str->add(strings[7]);
28243strings[2058] = str->add(strings[2058]);
28244strings[4947] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/65");
28245strings[7] = str->add(strings[7]);
28246strings[2058] = str->add(strings[2058]);
28247strings[4948] = str->add("e,action,mouse,move");
28248strings[4949] = str->add("e");
28249strings[4950] = str->add("e,action,mouse,down");
28250strings[4949] = str->add(strings[4949]);
28251strings[167] = str->add(strings[167]);
28252strings[377] = str->add(strings[377]);
28253strings[4951] = str->add("Main");
28254strings[66] = str->add(strings[66]);
28255strings[4952] = str->add("Favorite Applications");
28256strings[469] = str->add(strings[469]);
28257strings[2686] = str->add(strings[2686]);
28258strings[2231] = str->add(strings[2231]);
28259strings[469] = str->add(strings[469]);
28260strings[2715] = str->add(strings[2715]);
28261strings[2338] = str->add(strings[2338]);
28262strings[469] = str->add(strings[469]);
28263strings[2691] = str->add(strings[2691]);
28264strings[4953] = str->add("Files");
28265strings[469] = str->add(strings[469]);
28266strings[2693] = str->add(strings[2693]);
28267strings[4954] = str->add("Virtual");
28268strings[469] = str->add(strings[469]);
28269strings[2687] = str->add(strings[2687]);
28270strings[2494] = str->add(strings[2494]);
28271strings[469] = str->add(strings[469]);
28272strings[2711] = str->add(strings[2711]);
28273strings[4955] = str->add("Show/Hide All Windows");
28274strings[1619] = str->add(strings[1619]);
28275strings[469] = str->add(strings[469]);
28276strings[2687] = str->add(strings[2687]);
28277strings[2552] = str->add(strings[2552]);
28278strings[469] = str->add(strings[469]);
28279strings[2682] = str->add(strings[2682]);
28280strings[1712] = str->add(strings[1712]);
28281strings[469] = str->add(strings[469]);
28282strings[2671] = str->add(strings[2671]);
28283strings[4956] = str->add("About");
28284strings[469] = str->add(strings[469]);
28285strings[2671] = str->add(strings[2671]);
28286strings[2514] = str->add(strings[2514]);
28287strings[469] = str->add(strings[469]);
28288strings[2680] = str->add(strings[2680]);
28289strings[1713] = str->add(strings[1713]);
28290strings[469] = str->add(strings[469]);
28291strings[2672] = str->add(strings[2672]);
28292strings[1714] = str->add(strings[1714]);
28293strings[469] = str->add(strings[469]);
28294strings[2673] = str->add(strings[2673]);
28295strings[4957] = str->add("Configuration");
28296strings[469] = str->add(strings[469]);
28297strings[2688] = str->add(strings[2688]);
28298strings[1721] = str->add(strings[1721]);
28299strings[469] = str->add(strings[469]);
28300strings[2690] = str->add(strings[2690]);
28301strings[361] = str->add(strings[361]);
28302strings[362] = str->add(strings[362]);
28303strings[361] = str->add(strings[361]);
28304str->del(strings[361]);
28305strings[362] = str->add(strings[362]);
28306str->del(strings[362]);
28307strings[4958] = str->add("resize");
28308str->del(strings[4958]);
28309strings[64] = str->add(strings[64]);
28310strings[2581] = str->add(strings[2581]);
28311strings[64] = str->add(strings[64]);
28312strings[4959] = str->add("load");
28313strings[4951] = str->add(strings[4951]);
28314strings[4960] = str->add("e,action,show,title");
28315strings[4949] = str->add(strings[4949]);
28316str->del(strings[4959]);
28317strings[4961] = str->add("program,start");
28318strings[4962] = str->add("on");
28319strings[1932] = str->add(strings[1932]);
28320strings[4962] = str->add(strings[4962]);
28321str->del(strings[4960]);
28322str->del(strings[4949]);
28323strings[1841] = str->add(strings[1841]);
28324strings[64] = str->add(strings[64]);
28325strings[1949] = str->add(strings[1949]);
28326strings[64] = str->add(strings[64]);
28327strings[1880] = str->add(strings[1880]);
28328str->del(strings[64]);
28329strings[379] = str->add(strings[379]);
28330strings[4951] = str->add(strings[4951]);
28331strings[4951] = str->add(strings[4951]);
28332strings[4951] = str->add(strings[4951]);
28333strings[64] = str->add(strings[64]);
28334strings[1876] = str->add(strings[1876]);
28335strings[64] = str->add(strings[64]);
28336strings[1874] = str->add(strings[1874]);
28337strings[64] = str->add(strings[64]);
28338strings[2634] = str->add(strings[2634]);
28339strings[4963] = str->add("load");
28340strings[1841] = str->add(strings[1841]);
28341strings[64] = str->add(strings[64]);
28342strings[2584] = str->add(strings[2584]);
28343strings[4963] = str->add(strings[4963]);
28344strings[1841] = str->add(strings[1841]);
28345strings[469] = str->add(strings[469]);
28346strings[2686] = str->add(strings[2686]);
28347strings[4963] = str->add(strings[4963]);
28348strings[469] = str->add(strings[469]);
28349strings[2871] = str->add(strings[2871]);
28350strings[1841] = str->add(strings[1841]);
28351strings[4964] = str->add("resize");
28352strings[4964] = str->add(strings[4964]);
28353strings[64] = str->add(strings[64]);
28354strings[2585] = str->add(strings[2585]);
28355strings[64] = str->add(strings[64]);
28356strings[4963] = str->add(strings[4963]);
28357strings[4952] = str->add(strings[4952]);
28358strings[1841] = str->add(strings[1841]);
28359str->del(strings[64]);
28360strings[385] = str->add(strings[385]);
28361strings[4952] = str->add(strings[4952]);
28362strings[64] = str->add(strings[64]);
28363strings[2586] = str->add(strings[2586]);
28364strings[4963] = str->add(strings[4963]);
28365strings[1841] = str->add(strings[1841]);
28366strings[64] = str->add(strings[64]);
28367strings[2886] = str->add(strings[2886]);
28368strings[64] = str->add(strings[64]);
28369strings[2888] = str->add(strings[2888]);
28370strings[64] = str->add(strings[64]);
28371strings[2634] = str->add(strings[2634]);
28372strings[4963] = str->add(strings[4963]);
28373strings[1841] = str->add(strings[1841]);
28374strings[64] = str->add(strings[64]);
28375strings[2584] = str->add(strings[2584]);
28376strings[4963] = str->add(strings[4963]);
28377strings[1841] = str->add(strings[1841]);
28378strings[469] = str->add(strings[469]);
28379strings[2715] = str->add(strings[2715]);
28380strings[4963] = str->add(strings[4963]);
28381strings[469] = str->add(strings[469]);
28382strings[2890] = str->add(strings[2890]);
28383strings[1841] = str->add(strings[1841]);
28384strings[4964] = str->add(strings[4964]);
28385strings[4964] = str->add(strings[4964]);
28386strings[64] = str->add(strings[64]);
28387strings[2585] = str->add(strings[2585]);
28388strings[64] = str->add(strings[64]);
28389strings[4963] = str->add(strings[4963]);
28390strings[2231] = str->add(strings[2231]);
28391strings[1841] = str->add(strings[1841]);
28392str->del(strings[64]);
28393strings[385] = str->add(strings[385]);
28394strings[2231] = str->add(strings[2231]);
28395strings[64] = str->add(strings[64]);
28396strings[2586] = str->add(strings[2586]);
28397strings[4963] = str->add(strings[4963]);
28398strings[1841] = str->add(strings[1841]);
28399strings[64] = str->add(strings[64]);
28400strings[2886] = str->add(strings[2886]);
28401strings[64] = str->add(strings[64]);
28402strings[2888] = str->add(strings[2888]);
28403strings[64] = str->add(strings[64]);
28404strings[2583] = str->add(strings[2583]);
28405strings[4963] = str->add(strings[4963]);
28406strings[1841] = str->add(strings[1841]);
28407strings[64] = str->add(strings[64]);
28408strings[2584] = str->add(strings[2584]);
28409strings[4963] = str->add(strings[4963]);
28410strings[1841] = str->add(strings[1841]);
28411strings[469] = str->add(strings[469]);
28412strings[2691] = str->add(strings[2691]);
28413strings[4963] = str->add(strings[4963]);
28414strings[469] = str->add(strings[469]);
28415strings[2892] = str->add(strings[2892]);
28416strings[1841] = str->add(strings[1841]);
28417strings[4964] = str->add(strings[4964]);
28418strings[4964] = str->add(strings[4964]);
28419strings[64] = str->add(strings[64]);
28420strings[2585] = str->add(strings[2585]);
28421strings[64] = str->add(strings[64]);
28422strings[4963] = str->add(strings[4963]);
28423strings[2338] = str->add(strings[2338]);
28424strings[1841] = str->add(strings[1841]);
28425str->del(strings[64]);
28426strings[385] = str->add(strings[385]);
28427strings[2338] = str->add(strings[2338]);
28428strings[64] = str->add(strings[64]);
28429strings[2886] = str->add(strings[2886]);
28430strings[64] = str->add(strings[64]);
28431strings[2888] = str->add(strings[2888]);
28432strings[64] = str->add(strings[64]);
28433strings[2583] = str->add(strings[2583]);
28434strings[4963] = str->add(strings[4963]);
28435strings[1841] = str->add(strings[1841]);
28436strings[64] = str->add(strings[64]);
28437strings[2584] = str->add(strings[2584]);
28438strings[4963] = str->add(strings[4963]);
28439strings[1841] = str->add(strings[1841]);
28440strings[469] = str->add(strings[469]);
28441strings[2693] = str->add(strings[2693]);
28442strings[2693] = str->add(strings[2693]);
28443strings[4963] = str->add(strings[4963]);
28444strings[469] = str->add(strings[469]);
28445strings[4965] = str->add("images/449");
28446strings[4966] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/449");
28447strings[469] = str->add(strings[469]);
28448strings[4965] = str->add(strings[4965]);
28449strings[469] = str->add(strings[469]);
28450strings[4967] = str->add("images/450");
28451strings[4968] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/450");
28452strings[469] = str->add(strings[469]);
28453strings[4967] = str->add(strings[4967]);
28454strings[1841] = str->add(strings[1841]);
28455strings[4964] = str->add(strings[4964]);
28456strings[4964] = str->add(strings[4964]);
28457strings[64] = str->add(strings[64]);
28458strings[2585] = str->add(strings[2585]);
28459strings[64] = str->add(strings[64]);
28460strings[4963] = str->add(strings[4963]);
28461strings[4953] = str->add(strings[4953]);
28462strings[1841] = str->add(strings[1841]);
28463str->del(strings[64]);
28464strings[385] = str->add(strings[385]);
28465strings[4953] = str->add(strings[4953]);
28466strings[64] = str->add(strings[64]);
28467strings[2886] = str->add(strings[2886]);
28468strings[64] = str->add(strings[64]);
28469strings[2888] = str->add(strings[2888]);
28470strings[64] = str->add(strings[64]);
28471strings[2582] = str->add(strings[2582]);
28472strings[4963] = str->add(strings[4963]);
28473strings[1841] = str->add(strings[1841]);
28474strings[64] = str->add(strings[64]);
28475strings[2634] = str->add(strings[2634]);
28476strings[4963] = str->add(strings[4963]);
28477strings[1841] = str->add(strings[1841]);
28478strings[64] = str->add(strings[64]);
28479strings[2584] = str->add(strings[2584]);
28480strings[4963] = str->add(strings[4963]);
28481strings[1841] = str->add(strings[1841]);
28482strings[469] = str->add(strings[469]);
28483strings[2687] = str->add(strings[2687]);
28484strings[4963] = str->add(strings[4963]);
28485strings[469] = str->add(strings[469]);
28486strings[2894] = str->add(strings[2894]);
28487strings[1841] = str->add(strings[1841]);
28488strings[4964] = str->add(strings[4964]);
28489strings[4964] = str->add(strings[4964]);
28490strings[64] = str->add(strings[64]);
28491strings[2585] = str->add(strings[2585]);
28492strings[64] = str->add(strings[64]);
28493strings[4963] = str->add(strings[4963]);
28494strings[1619] = str->add(strings[1619]);
28495strings[1841] = str->add(strings[1841]);
28496str->del(strings[64]);
28497strings[385] = str->add(strings[385]);
28498strings[1619] = str->add(strings[1619]);
28499strings[64] = str->add(strings[64]);
28500strings[2586] = str->add(strings[2586]);
28501strings[4963] = str->add(strings[4963]);
28502strings[1841] = str->add(strings[1841]);
28503strings[64] = str->add(strings[64]);
28504strings[2886] = str->add(strings[2886]);
28505strings[64] = str->add(strings[64]);
28506strings[2888] = str->add(strings[2888]);
28507strings[64] = str->add(strings[64]);
28508strings[2634] = str->add(strings[2634]);
28509strings[4963] = str->add(strings[4963]);
28510strings[1841] = str->add(strings[1841]);
28511strings[64] = str->add(strings[64]);
28512strings[2584] = str->add(strings[2584]);
28513strings[4963] = str->add(strings[4963]);
28514strings[1841] = str->add(strings[1841]);
28515strings[469] = str->add(strings[469]);
28516strings[2682] = str->add(strings[2682]);
28517strings[4963] = str->add(strings[4963]);
28518strings[469] = str->add(strings[469]);
28519strings[2896] = str->add(strings[2896]);
28520strings[1841] = str->add(strings[1841]);
28521strings[4964] = str->add(strings[4964]);
28522strings[4964] = str->add(strings[4964]);
28523strings[64] = str->add(strings[64]);
28524strings[2585] = str->add(strings[2585]);
28525strings[64] = str->add(strings[64]);
28526strings[4963] = str->add(strings[4963]);
28527strings[2552] = str->add(strings[2552]);
28528strings[1841] = str->add(strings[1841]);
28529str->del(strings[64]);
28530strings[385] = str->add(strings[385]);
28531strings[2552] = str->add(strings[2552]);
28532strings[64] = str->add(strings[64]);
28533strings[2586] = str->add(strings[2586]);
28534strings[4963] = str->add(strings[4963]);
28535strings[1841] = str->add(strings[1841]);
28536strings[64] = str->add(strings[64]);
28537strings[2886] = str->add(strings[2886]);
28538strings[64] = str->add(strings[64]);
28539strings[2888] = str->add(strings[2888]);
28540strings[64] = str->add(strings[64]);
28541strings[2582] = str->add(strings[2582]);
28542strings[4963] = str->add(strings[4963]);
28543strings[1841] = str->add(strings[1841]);
28544strings[64] = str->add(strings[64]);
28545strings[2634] = str->add(strings[2634]);
28546strings[4963] = str->add(strings[4963]);
28547strings[1841] = str->add(strings[1841]);
28548strings[64] = str->add(strings[64]);
28549strings[2584] = str->add(strings[2584]);
28550strings[4963] = str->add(strings[4963]);
28551strings[1841] = str->add(strings[1841]);
28552strings[469] = str->add(strings[469]);
28553strings[2671] = str->add(strings[2671]);
28554strings[4963] = str->add(strings[4963]);
28555strings[469] = str->add(strings[469]);
28556strings[2898] = str->add(strings[2898]);
28557strings[469] = str->add(strings[469]);
28558strings[2900] = str->add(strings[2900]);
28559strings[1841] = str->add(strings[1841]);
28560strings[4964] = str->add(strings[4964]);
28561strings[4964] = str->add(strings[4964]);
28562strings[64] = str->add(strings[64]);
28563strings[2585] = str->add(strings[2585]);
28564strings[64] = str->add(strings[64]);
28565strings[4963] = str->add(strings[4963]);
28566strings[1712] = str->add(strings[1712]);
28567strings[1841] = str->add(strings[1841]);
28568str->del(strings[64]);
28569strings[385] = str->add(strings[385]);
28570strings[1712] = str->add(strings[1712]);
28571strings[64] = str->add(strings[64]);
28572strings[2586] = str->add(strings[2586]);
28573strings[4963] = str->add(strings[4963]);
28574strings[1841] = str->add(strings[1841]);
28575strings[64] = str->add(strings[64]);
28576strings[2886] = str->add(strings[2886]);
28577strings[64] = str->add(strings[64]);
28578strings[2888] = str->add(strings[2888]);
28579strings[64] = str->add(strings[64]);
28580strings[2582] = str->add(strings[2582]);
28581strings[4963] = str->add(strings[4963]);
28582strings[1841] = str->add(strings[1841]);
28583strings[64] = str->add(strings[64]);
28584strings[2634] = str->add(strings[2634]);
28585strings[4963] = str->add(strings[4963]);
28586strings[1841] = str->add(strings[1841]);
28587strings[64] = str->add(strings[64]);
28588strings[2584] = str->add(strings[2584]);
28589strings[4963] = str->add(strings[4963]);
28590strings[1841] = str->add(strings[1841]);
28591strings[469] = str->add(strings[469]);
28592strings[2688] = str->add(strings[2688]);
28593strings[4963] = str->add(strings[4963]);
28594strings[469] = str->add(strings[469]);
28595strings[2902] = str->add(strings[2902]);
28596strings[1841] = str->add(strings[1841]);
28597strings[4964] = str->add(strings[4964]);
28598strings[4964] = str->add(strings[4964]);
28599strings[64] = str->add(strings[64]);
28600strings[2585] = str->add(strings[2585]);
28601strings[64] = str->add(strings[64]);
28602strings[4963] = str->add(strings[4963]);
28603strings[4957] = str->add(strings[4957]);
28604strings[1841] = str->add(strings[1841]);
28605str->del(strings[64]);
28606strings[385] = str->add(strings[385]);
28607strings[4957] = str->add(strings[4957]);
28608strings[64] = str->add(strings[64]);
28609strings[2586] = str->add(strings[2586]);
28610strings[4963] = str->add(strings[4963]);
28611strings[1841] = str->add(strings[1841]);
28612strings[64] = str->add(strings[64]);
28613strings[2886] = str->add(strings[2886]);
28614strings[64] = str->add(strings[64]);
28615strings[2888] = str->add(strings[2888]);
28616strings[64] = str->add(strings[64]);
28617strings[2582] = str->add(strings[2582]);
28618strings[4963] = str->add(strings[4963]);
28619strings[1841] = str->add(strings[1841]);
28620strings[64] = str->add(strings[64]);
28621strings[2634] = str->add(strings[2634]);
28622strings[4963] = str->add(strings[4963]);
28623strings[1841] = str->add(strings[1841]);
28624strings[64] = str->add(strings[64]);
28625strings[2584] = str->add(strings[2584]);
28626strings[4963] = str->add(strings[4963]);
28627strings[1841] = str->add(strings[1841]);
28628strings[469] = str->add(strings[469]);
28629strings[2690] = str->add(strings[2690]);
28630strings[4963] = str->add(strings[4963]);
28631strings[469] = str->add(strings[469]);
28632strings[2904] = str->add(strings[2904]);
28633strings[1841] = str->add(strings[1841]);
28634strings[4964] = str->add(strings[4964]);
28635strings[4964] = str->add(strings[4964]);
28636strings[64] = str->add(strings[64]);
28637strings[2585] = str->add(strings[2585]);
28638strings[64] = str->add(strings[64]);
28639strings[4963] = str->add(strings[4963]);
28640strings[1721] = str->add(strings[1721]);
28641strings[1841] = str->add(strings[1841]);
28642str->del(strings[64]);
28643strings[385] = str->add(strings[385]);
28644strings[1721] = str->add(strings[1721]);
28645strings[64] = str->add(strings[64]);
28646strings[2586] = str->add(strings[2586]);
28647strings[4963] = str->add(strings[4963]);
28648strings[1841] = str->add(strings[1841]);
28649strings[64] = str->add(strings[64]);
28650strings[2886] = str->add(strings[2886]);
28651strings[64] = str->add(strings[64]);
28652strings[2888] = str->add(strings[2888]);
28653strings[4964] = str->add(strings[4964]);
28654strings[4964] = str->add(strings[4964]);
28655strings[4964] = str->add(strings[4964]);
28656strings[4964] = str->add(strings[4964]);
28657strings[4964] = str->add(strings[4964]);
28658strings[4964] = str->add(strings[4964]);
28659strings[4964] = str->add(strings[4964]);
28660strings[4964] = str->add(strings[4964]);
28661strings[4964] = str->add(strings[4964]);
28662strings[4964] = str->add(strings[4964]);
28663strings[4964] = str->add(strings[4964]);
28664strings[4964] = str->add(strings[4964]);
28665strings[4964] = str->add(strings[4964]);
28666strings[4964] = str->add(strings[4964]);
28667strings[4964] = str->add(strings[4964]);
28668strings[4964] = str->add(strings[4964]);
28669strings[4964] = str->add(strings[4964]);
28670strings[4964] = str->add(strings[4964]);
28671strings[4964] = str->add(strings[4964]);
28672strings[4964] = str->add(strings[4964]);
28673strings[4964] = str->add(strings[4964]);
28674strings[4964] = str->add(strings[4964]);
28675strings[4964] = str->add(strings[4964]);
28676strings[4964] = str->add(strings[4964]);
28677strings[4964] = str->add(strings[4964]);
28678strings[4964] = str->add(strings[4964]);
28679strings[4964] = str->add(strings[4964]);
28680strings[4964] = str->add(strings[4964]);
28681strings[4964] = str->add(strings[4964]);
28682strings[4964] = str->add(strings[4964]);
28683strings[4964] = str->add(strings[4964]);
28684strings[4964] = str->add(strings[4964]);
28685strings[4964] = str->add(strings[4964]);
28686strings[4964] = str->add(strings[4964]);
28687strings[4964] = str->add(strings[4964]);
28688strings[4964] = str->add(strings[4964]);
28689strings[4964] = str->add(strings[4964]);
28690strings[4964] = str->add(strings[4964]);
28691strings[4964] = str->add(strings[4964]);
28692strings[4969] = str->add("e,state,focused");
28693strings[4949] = str->add(strings[4949]);
28694strings[167] = str->add(strings[167]);
28695strings[1946] = str->add(strings[1946]);
28696strings[167] = str->add(strings[167]);
28697strings[1946] = str->add(strings[1946]);
28698str->del(strings[4948]);
28699str->del(strings[4949]);
28700str->del(strings[4950]);
28701str->del(strings[4949]);
28702str->del(strings[167]);
28703str->del(strings[377]);
28704str->del(strings[4961]);
28705str->del(strings[4962]);
28706str->del(strings[1932]);
28707str->del(strings[4962]);
28708str->del(strings[1841]);
28709str->del(strings[4963]);
28710str->del(strings[1841]);
28711str->del(strings[4963]);
28712str->del(strings[1841]);
28713str->del(strings[4963]);
28714str->del(strings[1841]);
28715str->del(strings[4964]);
28716str->del(strings[4964]);
28717str->del(strings[4963]);
28718str->del(strings[1841]);
28719str->del(strings[4963]);
28720str->del(strings[1841]);
28721str->del(strings[4963]);
28722str->del(strings[1841]);
28723str->del(strings[4963]);
28724str->del(strings[1841]);
28725str->del(strings[4963]);
28726str->del(strings[1841]);
28727str->del(strings[4964]);
28728str->del(strings[4964]);
28729str->del(strings[4963]);
28730str->del(strings[1841]);
28731str->del(strings[4963]);
28732str->del(strings[1841]);
28733str->del(strings[4963]);
28734str->del(strings[1841]);
28735str->del(strings[4963]);
28736str->del(strings[1841]);
28737str->del(strings[4963]);
28738str->del(strings[1841]);
28739str->del(strings[4964]);
28740str->del(strings[4964]);
28741str->del(strings[4963]);
28742str->del(strings[1841]);
28743str->del(strings[4963]);
28744str->del(strings[1841]);
28745str->del(strings[4963]);
28746str->del(strings[1841]);
28747str->del(strings[4963]);
28748str->del(strings[1841]);
28749str->del(strings[4964]);
28750str->del(strings[4964]);
28751str->del(strings[4963]);
28752str->del(strings[1841]);
28753str->del(strings[4963]);
28754str->del(strings[1841]);
28755str->del(strings[4963]);
28756str->del(strings[1841]);
28757str->del(strings[4963]);
28758str->del(strings[1841]);
28759str->del(strings[4963]);
28760str->del(strings[1841]);
28761str->del(strings[4964]);
28762str->del(strings[4964]);
28763str->del(strings[4963]);
28764str->del(strings[1841]);
28765str->del(strings[4963]);
28766str->del(strings[1841]);
28767str->del(strings[4963]);
28768str->del(strings[1841]);
28769str->del(strings[4963]);
28770str->del(strings[1841]);
28771str->del(strings[4963]);
28772str->del(strings[1841]);
28773str->del(strings[4964]);
28774str->del(strings[4964]);
28775str->del(strings[4963]);
28776str->del(strings[1841]);
28777str->del(strings[4963]);
28778str->del(strings[1841]);
28779str->del(strings[4963]);
28780str->del(strings[1841]);
28781str->del(strings[4963]);
28782str->del(strings[1841]);
28783str->del(strings[4963]);
28784str->del(strings[1841]);
28785str->del(strings[4963]);
28786str->del(strings[1841]);
28787str->del(strings[4964]);
28788str->del(strings[4964]);
28789str->del(strings[4963]);
28790str->del(strings[1841]);
28791str->del(strings[4963]);
28792str->del(strings[1841]);
28793str->del(strings[4963]);
28794str->del(strings[1841]);
28795str->del(strings[4963]);
28796str->del(strings[1841]);
28797str->del(strings[4963]);
28798str->del(strings[1841]);
28799str->del(strings[4963]);
28800str->del(strings[1841]);
28801str->del(strings[4964]);
28802str->del(strings[4964]);
28803str->del(strings[4963]);
28804str->del(strings[1841]);
28805str->del(strings[4963]);
28806str->del(strings[1841]);
28807str->del(strings[4963]);
28808str->del(strings[1841]);
28809str->del(strings[4963]);
28810str->del(strings[1841]);
28811str->del(strings[4963]);
28812str->del(strings[1841]);
28813str->del(strings[4963]);
28814str->del(strings[1841]);
28815str->del(strings[4964]);
28816str->del(strings[4964]);
28817str->del(strings[4963]);
28818str->del(strings[1841]);
28819str->del(strings[4963]);
28820str->del(strings[1841]);
28821str->del(strings[4964]);
28822str->del(strings[4964]);
28823str->del(strings[4964]);
28824str->del(strings[4964]);
28825str->del(strings[4964]);
28826str->del(strings[4964]);
28827str->del(strings[4964]);
28828str->del(strings[4964]);
28829str->del(strings[4964]);
28830str->del(strings[4964]);
28831str->del(strings[4964]);
28832str->del(strings[4964]);
28833str->del(strings[4964]);
28834str->del(strings[4964]);
28835str->del(strings[4964]);
28836str->del(strings[4964]);
28837str->del(strings[4964]);
28838str->del(strings[4964]);
28839str->del(strings[4964]);
28840str->del(strings[4964]);
28841str->del(strings[4964]);
28842str->del(strings[4964]);
28843str->del(strings[4964]);
28844str->del(strings[4964]);
28845str->del(strings[4964]);
28846str->del(strings[4964]);
28847str->del(strings[4964]);
28848str->del(strings[4964]);
28849str->del(strings[4964]);
28850str->del(strings[4964]);
28851str->del(strings[4964]);
28852str->del(strings[4964]);
28853str->del(strings[4964]);
28854str->del(strings[4964]);
28855str->del(strings[4964]);
28856str->del(strings[4964]);
28857str->del(strings[4964]);
28858str->del(strings[4964]);
28859str->del(strings[4964]);
28860strings[4970] = str->add("program,start");
28861strings[4971] = str->add("on");
28862str->del(strings[4969]);
28863str->del(strings[4949]);
28864str->del(strings[167]);
28865str->del(strings[1946]);
28866str->del(strings[167]);
28867str->del(strings[1946]);
28868str->del(strings[4970]);
28869str->del(strings[4971]);
28870strings[4972] = str->add("e,action,mouse,move");
28871strings[4973] = str->add("e");
28872strings[4972] = str->add(strings[4972]);
28873strings[4973] = str->add(strings[4973]);
28874strings[169] = str->add(strings[169]);
28875strings[377] = str->add(strings[377]);
28876strings[159] = str->add(strings[159]);
28877strings[377] = str->add(strings[377]);
28878strings[169] = str->add(strings[169]);
28879strings[1946] = str->add(strings[1946]);
28880strings[159] = str->add(strings[159]);
28881strings[1946] = str->add(strings[1946]);
28882strings[169] = str->add(strings[169]);
28883strings[1946] = str->add(strings[1946]);
28884strings[159] = str->add(strings[159]);
28885strings[1946] = str->add(strings[1946]);
28886strings[1740] = str->add(strings[1740]);
28887strings[377] = str->add(strings[377]);
28888strings[1740] = str->add(strings[1740]);
28889strings[1946] = str->add(strings[1946]);
28890strings[1740] = str->add(strings[1740]);
28891strings[1946] = str->add(strings[1946]);
28892str->del(strings[4972]);
28893str->del(strings[4973]);
28894str->del(strings[4972]);
28895str->del(strings[4973]);
28896str->del(strings[169]);
28897str->del(strings[377]);
28898str->del(strings[159]);
28899str->del(strings[377]);
28900str->del(strings[169]);
28901str->del(strings[1946]);
28902str->del(strings[159]);
28903str->del(strings[1946]);
28904str->del(strings[169]);
28905str->del(strings[1946]);
28906str->del(strings[159]);
28907str->del(strings[1946]);
28908str->del(strings[1740]);
28909str->del(strings[377]);
28910str->del(strings[1740]);
28911str->del(strings[1946]);
28912str->del(strings[1740]);
28913str->del(strings[1946]);
28914str->del(strings[4951]);
28915strings[4951] = str->add(strings[4951]);
28916str->del(strings[4951]);
28917strings[4951] = str->add(strings[4951]);
28918strings[4974] = str->add("resize");
28919strings[4952] = str->add(strings[4952]);
28920strings[4952] = str->add(strings[4952]);
28921strings[64] = str->add(strings[64]);
28922strings[2913] = str->add(strings[2913]);
28923strings[4974] = str->add(strings[4974]);
28924strings[2231] = str->add(strings[2231]);
28925strings[2231] = str->add(strings[2231]);
28926strings[64] = str->add(strings[64]);
28927strings[2913] = str->add(strings[2913]);
28928strings[4974] = str->add(strings[4974]);
28929strings[2338] = str->add(strings[2338]);
28930strings[2338] = str->add(strings[2338]);
28931strings[4974] = str->add(strings[4974]);
28932strings[4953] = str->add(strings[4953]);
28933strings[4953] = str->add(strings[4953]);
28934strings[64] = str->add(strings[64]);
28935strings[2915] = str->add(strings[2915]);
28936strings[4974] = str->add(strings[4974]);
28937strings[1619] = str->add(strings[1619]);
28938strings[1619] = str->add(strings[1619]);
28939strings[64] = str->add(strings[64]);
28940strings[2913] = str->add(strings[2913]);
28941strings[4974] = str->add(strings[4974]);
28942strings[2552] = str->add(strings[2552]);
28943strings[2552] = str->add(strings[2552]);
28944strings[64] = str->add(strings[64]);
28945strings[2913] = str->add(strings[2913]);
28946strings[64] = str->add(strings[64]);
28947strings[2915] = str->add(strings[2915]);
28948strings[4974] = str->add(strings[4974]);
28949strings[1712] = str->add(strings[1712]);
28950strings[1712] = str->add(strings[1712]);
28951strings[64] = str->add(strings[64]);
28952strings[2913] = str->add(strings[2913]);
28953strings[64] = str->add(strings[64]);
28954strings[2915] = str->add(strings[2915]);
28955strings[4974] = str->add(strings[4974]);
28956strings[4957] = str->add(strings[4957]);
28957strings[4957] = str->add(strings[4957]);
28958strings[64] = str->add(strings[64]);
28959strings[2913] = str->add(strings[2913]);
28960strings[64] = str->add(strings[64]);
28961strings[2915] = str->add(strings[2915]);
28962strings[4974] = str->add(strings[4974]);
28963strings[1721] = str->add(strings[1721]);
28964strings[1721] = str->add(strings[1721]);
28965strings[64] = str->add(strings[64]);
28966strings[2913] = str->add(strings[2913]);
28967strings[4975] = str->add("font");
28968strings[4976] = str->add("font_fallbacks");
28969strings[4977] = str->add("font_size");
28970strings[4978] = str->add("font_source");
28971strings[4979] = str->add("color");
28972strings[4980] = str->add("underline_color");
28973strings[4981] = str->add("underline2_color");
28974strings[4982] = str->add("outline_color");
28975strings[4983] = str->add("shadow_color");
28976strings[4984] = str->add("glow_color");
28977strings[4985] = str->add("glow2_color");
28978strings[4986] = str->add("backing_color");
28979strings[4987] = str->add("strikethrough_color");
28980strings[4988] = str->add("align");
28981strings[4989] = str->add("valign");
28982strings[4990] = str->add("wrap");
28983strings[4991] = str->add("left_margin");
28984strings[4992] = str->add("right_margin");
28985strings[4993] = str->add("underline");
28986strings[4994] = str->add("strikethrough");
28987strings[4995] = str->add("backing");
28988strings[4996] = str->add("style");
28989strings[4997] = str->add("tabstops");
28990strings[4988] = str->add(strings[4988]);
28991strings[4998] = str->add("center");
28992str->del(strings[4988]);
28993str->del(strings[4998]);
28994strings[4979] = str->add(strings[4979]);
28995strings[4999] = str->add("#000");
28996str->del(strings[4979]);
28997str->del(strings[4999]);
28998strings[4996] = str->add(strings[4996]);
28999strings[5000] = str->add("shadow");
29000str->del(strings[4996]);
29001str->del(strings[5000]);
29002strings[4983] = str->add(strings[4983]);
29003strings[5001] = str->add("#ffffff80");
29004str->del(strings[4983]);
29005str->del(strings[5001]);
29006strings[4990] = str->add(strings[4990]);
29007strings[5002] = str->add("word");
29008str->del(strings[4990]);
29009str->del(strings[5002]);
29010strings[4978] = str->add(strings[4978]);
29011strings[469] = str->add(strings[469]);
29012strings[469] = str->add(strings[469]);
29013str->del(strings[4978]);
29014str->del(strings[469]);
29015strings[4977] = str->add(strings[4977]);
29016strings[5003] = str->add("10.000000");
29017str->del(strings[4977]);
29018str->del(strings[5003]);
29019strings[4975] = str->add(strings[4975]);
29020strings[470] = str->add(strings[470]);
29021strings[470] = str->add(strings[470]);
29022str->del(strings[4975]);
29023str->del(strings[470]);
29024strings[382] = str->add(strings[382]);
29025strings[382] = str->add(strings[382]);
29026strings[382] = str->add(strings[382]);
29027strings[382] = str->add(strings[382]);
29028strings[382] = str->add(strings[382]);
29029strings[382] = str->add(strings[382]);
29030strings[470] = str->add(strings[470]);
29031strings[469] = str->add(strings[469]);
29032strings[4996] = str->add(strings[4996]);
29033strings[5004] = str->add("glow");
29034str->del(strings[4996]);
29035str->del(strings[5004]);
29036strings[4979] = str->add(strings[4979]);
29037strings[5005] = str->add("#fff");
29038str->del(strings[4979]);
29039str->del(strings[5005]);
29040strings[4985] = str->add(strings[4985]);
29041strings[5006] = str->add("#fe87");
29042str->del(strings[4985]);
29043str->del(strings[5006]);
29044strings[4984] = str->add(strings[4984]);
29045strings[5007] = str->add("#fa14");
29046str->del(strings[4984]);
29047str->del(strings[5007]);
29048strings[4975] = str->add(strings[4975]);
29049strings[471] = str->add(strings[471]);
29050str->del(strings[470]);
29051strings[471] = str->add(strings[471]);
29052str->del(strings[4975]);
29053str->del(strings[471]);
29054strings[470] = str->add(strings[470]);
29055strings[469] = str->add(strings[469]);
29056strings[4996] = str->add(strings[4996]);
29057strings[5008] = str->add("glow");
29058str->del(strings[4996]);
29059str->del(strings[5008]);
29060strings[4979] = str->add(strings[4979]);
29061strings[5009] = str->add("#fff");
29062str->del(strings[4979]);
29063str->del(strings[5009]);
29064strings[4985] = str->add(strings[4985]);
29065strings[5010] = str->add("#fe87");
29066str->del(strings[4985]);
29067str->del(strings[5010]);
29068strings[4984] = str->add(strings[4984]);
29069strings[5011] = str->add("#fa14");
29070str->del(strings[4984]);
29071str->del(strings[5011]);
29072strings[4975] = str->add(strings[4975]);
29073strings[471] = str->add(strings[471]);
29074str->del(strings[470]);
29075strings[471] = str->add(strings[471]);
29076str->del(strings[4975]);
29077str->del(strings[471]);
29078str->del(strings[4975]);
29079str->del(strings[4976]);
29080str->del(strings[4977]);
29081str->del(strings[4978]);
29082str->del(strings[4979]);
29083str->del(strings[4980]);
29084str->del(strings[4981]);
29085str->del(strings[4982]);
29086str->del(strings[4983]);
29087str->del(strings[4984]);
29088str->del(strings[4985]);
29089str->del(strings[4986]);
29090str->del(strings[4987]);
29091str->del(strings[4988]);
29092str->del(strings[4989]);
29093str->del(strings[4990]);
29094str->del(strings[4991]);
29095str->del(strings[4992]);
29096str->del(strings[4993]);
29097str->del(strings[4994]);
29098str->del(strings[4995]);
29099str->del(strings[4996]);
29100str->del(strings[4997]);
29101str->del(strings[382]);
29102str->del(strings[382]);
29103str->del(strings[382]);
29104str->del(strings[382]);
29105str->del(strings[382]);
29106str->del(strings[382]);
29107str->del(strings[471]);
29108str->del(strings[469]);
29109str->del(strings[470]);
29110str->del(strings[469]);
29111str->del(strings[471]);
29112str->del(strings[469]);
29113strings[5012] = str->add("font");
29114strings[5013] = str->add("font_fallbacks");
29115strings[5014] = str->add("font_size");
29116strings[5015] = str->add("font_source");
29117strings[5016] = str->add("color");
29118strings[5017] = str->add("underline_color");
29119strings[5018] = str->add("underline2_color");
29120strings[5019] = str->add("outline_color");
29121strings[5020] = str->add("shadow_color");
29122strings[5021] = str->add("glow_color");
29123strings[5022] = str->add("glow2_color");
29124strings[5023] = str->add("backing_color");
29125strings[5024] = str->add("strikethrough_color");
29126strings[5025] = str->add("align");
29127strings[5026] = str->add("valign");
29128strings[5027] = str->add("wrap");
29129strings[5028] = str->add("left_margin");
29130strings[5029] = str->add("right_margin");
29131strings[5030] = str->add("underline");
29132strings[5031] = str->add("strikethrough");
29133strings[5032] = str->add("backing");
29134strings[5033] = str->add("style");
29135strings[5034] = str->add("tabstops");
29136strings[5025] = str->add(strings[5025]);
29137strings[5035] = str->add("center");
29138str->del(strings[5025]);
29139str->del(strings[5035]);
29140strings[5016] = str->add(strings[5016]);
29141strings[5036] = str->add("#000");
29142str->del(strings[5016]);
29143str->del(strings[5036]);
29144strings[5033] = str->add(strings[5033]);
29145strings[5037] = str->add("shadow");
29146str->del(strings[5033]);
29147str->del(strings[5037]);
29148strings[5020] = str->add(strings[5020]);
29149strings[5038] = str->add("#ffffff80");
29150str->del(strings[5020]);
29151str->del(strings[5038]);
29152strings[5027] = str->add(strings[5027]);
29153strings[5039] = str->add("word");
29154str->del(strings[5027]);
29155str->del(strings[5039]);
29156strings[5015] = str->add(strings[5015]);
29157strings[469] = str->add(strings[469]);
29158strings[469] = str->add(strings[469]);
29159str->del(strings[5015]);
29160str->del(strings[469]);
29161strings[5014] = str->add(strings[5014]);
29162strings[5040] = str->add("10.000000");
29163str->del(strings[5014]);
29164str->del(strings[5040]);
29165strings[5012] = str->add(strings[5012]);
29166strings[470] = str->add(strings[470]);
29167strings[470] = str->add(strings[470]);
29168str->del(strings[5012]);
29169str->del(strings[470]);
29170strings[470] = str->add(strings[470]);
29171strings[469] = str->add(strings[469]);
29172strings[5033] = str->add(strings[5033]);
29173strings[5041] = str->add("soft_shadow");
29174str->del(strings[5033]);
29175str->del(strings[5041]);
29176strings[5016] = str->add(strings[5016]);
29177strings[5042] = str->add("#fff");
29178str->del(strings[5016]);
29179str->del(strings[5042]);
29180strings[5020] = str->add(strings[5020]);
29181strings[5043] = str->add("#00000020");
29182str->del(strings[5020]);
29183str->del(strings[5043]);
29184strings[5014] = str->add(strings[5014]);
29185strings[5044] = str->add("12.000000");
29186str->del(strings[5014]);
29187str->del(strings[5044]);
29188strings[5012] = str->add(strings[5012]);
29189strings[471] = str->add(strings[471]);
29190str->del(strings[470]);
29191strings[471] = str->add(strings[471]);
29192str->del(strings[5012]);
29193str->del(strings[471]);
29194strings[382] = str->add(strings[382]);
29195strings[382] = str->add(strings[382]);
29196strings[382] = str->add(strings[382]);
29197strings[382] = str->add(strings[382]);
29198strings[382] = str->add(strings[382]);
29199strings[382] = str->add(strings[382]);
29200strings[382] = str->add(strings[382]);
29201strings[382] = str->add(strings[382]);
29202strings[382] = str->add(strings[382]);
29203strings[382] = str->add(strings[382]);
29204strings[382] = str->add(strings[382]);
29205strings[382] = str->add(strings[382]);
29206strings[382] = str->add(strings[382]);
29207strings[382] = str->add(strings[382]);
29208strings[382] = str->add(strings[382]);
29209strings[382] = str->add(strings[382]);
29210strings[382] = str->add(strings[382]);
29211strings[382] = str->add(strings[382]);
29212strings[382] = str->add(strings[382]);
29213strings[382] = str->add(strings[382]);
29214strings[382] = str->add(strings[382]);
29215strings[382] = str->add(strings[382]);
29216str->del(strings[5012]);
29217str->del(strings[5013]);
29218str->del(strings[5014]);
29219str->del(strings[5015]);
29220str->del(strings[5016]);
29221str->del(strings[5017]);
29222str->del(strings[5018]);
29223str->del(strings[5019]);
29224str->del(strings[5020]);
29225str->del(strings[5021]);
29226str->del(strings[5022]);
29227str->del(strings[5023]);
29228str->del(strings[5024]);
29229str->del(strings[5025]);
29230str->del(strings[5026]);
29231str->del(strings[5027]);
29232str->del(strings[5028]);
29233str->del(strings[5029]);
29234str->del(strings[5030]);
29235str->del(strings[5031]);
29236str->del(strings[5032]);
29237str->del(strings[5033]);
29238str->del(strings[5034]);
29239str->del(strings[471]);
29240str->del(strings[469]);
29241str->del(strings[382]);
29242str->del(strings[382]);
29243str->del(strings[382]);
29244str->del(strings[382]);
29245str->del(strings[382]);
29246str->del(strings[382]);
29247str->del(strings[382]);
29248str->del(strings[382]);
29249str->del(strings[382]);
29250str->del(strings[382]);
29251str->del(strings[382]);
29252str->del(strings[382]);
29253str->del(strings[382]);
29254str->del(strings[382]);
29255str->del(strings[382]);
29256str->del(strings[382]);
29257str->del(strings[382]);
29258str->del(strings[382]);
29259str->del(strings[382]);
29260str->del(strings[382]);
29261str->del(strings[382]);
29262str->del(strings[470]);
29263str->del(strings[469]);
29264str->del(strings[382]);
29265str->del(strings[4974]);
29266str->del(strings[4974]);
29267str->del(strings[4974]);
29268str->del(strings[4974]);
29269str->del(strings[4974]);
29270str->del(strings[4974]);
29271str->del(strings[4974]);
29272str->del(strings[4974]);
29273str->del(strings[4974]);
29274strings[5045] = str->add("font");
29275strings[5046] = str->add("font_fallbacks");
29276strings[5047] = str->add("font_size");
29277strings[5048] = str->add("font_source");
29278strings[5049] = str->add("color");
29279strings[5050] = str->add("underline_color");
29280strings[5051] = str->add("underline2_color");
29281strings[5052] = str->add("outline_color");
29282strings[5053] = str->add("shadow_color");
29283strings[5054] = str->add("glow_color");
29284strings[5055] = str->add("glow2_color");
29285strings[5056] = str->add("backing_color");
29286strings[5057] = str->add("strikethrough_color");
29287strings[5058] = str->add("align");
29288strings[5059] = str->add("valign");
29289strings[5060] = str->add("wrap");
29290strings[5061] = str->add("left_margin");
29291strings[5062] = str->add("right_margin");
29292strings[5063] = str->add("underline");
29293strings[5064] = str->add("strikethrough");
29294strings[5065] = str->add("backing");
29295strings[5066] = str->add("style");
29296strings[5067] = str->add("tabstops");
29297strings[5058] = str->add(strings[5058]);
29298strings[5068] = str->add("center");
29299str->del(strings[5058]);
29300str->del(strings[5068]);
29301strings[5049] = str->add(strings[5049]);
29302strings[5069] = str->add("#000");
29303str->del(strings[5049]);
29304str->del(strings[5069]);
29305strings[5066] = str->add(strings[5066]);
29306strings[5070] = str->add("shadow");
29307str->del(strings[5066]);
29308str->del(strings[5070]);
29309strings[5053] = str->add(strings[5053]);
29310strings[5071] = str->add("#ffffff80");
29311str->del(strings[5053]);
29312str->del(strings[5071]);
29313strings[5060] = str->add(strings[5060]);
29314strings[5072] = str->add("word");
29315str->del(strings[5060]);
29316str->del(strings[5072]);
29317strings[5048] = str->add(strings[5048]);
29318strings[469] = str->add(strings[469]);
29319strings[469] = str->add(strings[469]);
29320str->del(strings[5048]);
29321str->del(strings[469]);
29322strings[5047] = str->add(strings[5047]);
29323strings[5073] = str->add("10.000000");
29324str->del(strings[5047]);
29325str->del(strings[5073]);
29326strings[5045] = str->add(strings[5045]);
29327strings[470] = str->add(strings[470]);
29328strings[470] = str->add(strings[470]);
29329str->del(strings[5045]);
29330str->del(strings[470]);
29331strings[470] = str->add(strings[470]);
29332strings[469] = str->add(strings[469]);
29333strings[5066] = str->add(strings[5066]);
29334strings[5074] = str->add("soft_shadow");
29335str->del(strings[5066]);
29336str->del(strings[5074]);
29337strings[5049] = str->add(strings[5049]);
29338strings[5075] = str->add("#fff");
29339str->del(strings[5049]);
29340str->del(strings[5075]);
29341strings[5053] = str->add(strings[5053]);
29342strings[5076] = str->add("#00000020");
29343str->del(strings[5053]);
29344str->del(strings[5076]);
29345strings[5047] = str->add(strings[5047]);
29346strings[5077] = str->add("12.000000");
29347str->del(strings[5047]);
29348str->del(strings[5077]);
29349strings[5045] = str->add(strings[5045]);
29350strings[471] = str->add(strings[471]);
29351str->del(strings[470]);
29352strings[471] = str->add(strings[471]);
29353str->del(strings[5045]);
29354str->del(strings[471]);
29355strings[382] = str->add(strings[382]);
29356strings[382] = str->add(strings[382]);
29357strings[382] = str->add(strings[382]);
29358strings[382] = str->add(strings[382]);
29359strings[382] = str->add(strings[382]);
29360strings[382] = str->add(strings[382]);
29361strings[382] = str->add(strings[382]);
29362strings[382] = str->add(strings[382]);
29363strings[382] = str->add(strings[382]);
29364strings[382] = str->add(strings[382]);
29365strings[382] = str->add(strings[382]);
29366strings[382] = str->add(strings[382]);
29367strings[382] = str->add(strings[382]);
29368strings[382] = str->add(strings[382]);
29369strings[382] = str->add(strings[382]);
29370strings[382] = str->add(strings[382]);
29371strings[382] = str->add(strings[382]);
29372strings[382] = str->add(strings[382]);
29373strings[382] = str->add(strings[382]);
29374strings[382] = str->add(strings[382]);
29375strings[382] = str->add(strings[382]);
29376strings[382] = str->add(strings[382]);
29377str->del(strings[471]);
29378str->del(strings[469]);
29379str->del(strings[382]);
29380str->del(strings[382]);
29381str->del(strings[382]);
29382str->del(strings[382]);
29383str->del(strings[382]);
29384str->del(strings[382]);
29385str->del(strings[382]);
29386str->del(strings[382]);
29387str->del(strings[382]);
29388str->del(strings[382]);
29389str->del(strings[382]);
29390str->del(strings[382]);
29391str->del(strings[382]);
29392str->del(strings[382]);
29393str->del(strings[382]);
29394str->del(strings[382]);
29395str->del(strings[382]);
29396str->del(strings[382]);
29397str->del(strings[382]);
29398str->del(strings[382]);
29399str->del(strings[382]);
29400str->del(strings[470]);
29401str->del(strings[469]);
29402str->del(strings[382]);
29403str->del(strings[5045]);
29404str->del(strings[5046]);
29405str->del(strings[5047]);
29406str->del(strings[5048]);
29407str->del(strings[5049]);
29408str->del(strings[5050]);
29409str->del(strings[5051]);
29410str->del(strings[5052]);
29411str->del(strings[5053]);
29412str->del(strings[5054]);
29413str->del(strings[5055]);
29414str->del(strings[5056]);
29415str->del(strings[5057]);
29416str->del(strings[5058]);
29417str->del(strings[5059]);
29418str->del(strings[5060]);
29419str->del(strings[5061]);
29420str->del(strings[5062]);
29421str->del(strings[5063]);
29422str->del(strings[5064]);
29423str->del(strings[5065]);
29424str->del(strings[5066]);
29425str->del(strings[5067]);
29426strings[1932] = str->add(strings[1932]);
29427strings[5078] = str->add("go_activeb27");
29428strings[5079] = str->add("program,start");
29429strings[5080] = str->add("go_activec27");
29430strings[1932] = str->add(strings[1932]);
29431strings[5081] = str->add("go_activeb3");
29432strings[5079] = str->add(strings[5079]);
29433strings[5082] = str->add("go_activec3");
29434str->del(strings[1932]);
29435str->del(strings[5078]);
29436str->del(strings[5079]);
29437str->del(strings[5080]);
29438str->del(strings[1932]);
29439str->del(strings[5081]);
29440str->del(strings[5079]);
29441str->del(strings[5082]);
29442str->del(strings[7]);
29443str->del(strings[2058]);
29444strings[7] = str->add(strings[7]);
29445strings[1970] = str->add(strings[1970]);
29446strings[5083] = str->add("/usr/devel/share/enlightenment/data/backgrounds/Cracked_Earth.edj//://images/66");
29447strings[7] = str->add(strings[7]);
29448strings[1970] = str->add(strings[1970]);
29449strings[5084] = str->add("e,action,mouse,move");
29450strings[5085] = str->add("e");
29451strings[5086] = str->add("e,action,mouse,up");
29452strings[5085] = str->add(strings[5085]);
29453str->del(strings[5084]);
29454str->del(strings[5085]);
29455str->del(strings[5086]);
29456str->del(strings[5085]);
29457str->del(strings[7]);
29458str->del(strings[1970]);
29459strings[7] = str->add(strings[7]);
29460strings[1869] = str->add(strings[1869]);
29461strings[1932] = str->add(strings[1932]);
29462strings[1840] = str->add(strings[1840]);
29463strings[5087] = str->add("program,start");
29464strings[1844] = str->add(strings[1844]);
29465strings[1932] = str->add(strings[1932]);
29466strings[1844] = str->add(strings[1844]);
29467strings[5087] = str->add(strings[5087]);
29468strings[1840] = str->add(strings[1840]);
29469strings[1932] = str->add(strings[1932]);
29470strings[1851] = str->add(strings[1851]);
29471strings[5087] = str->add(strings[5087]);
29472strings[1851] = str->add(strings[1851]);
29473strings[5087] = str->add(strings[5087]);
29474strings[5088] = str->add("go_active24");
29475strings[1932] = str->add(strings[1932]);
29476strings[5088] = str->add(strings[5088]);
29477strings[5087] = str->add(strings[5087]);
29478strings[5089] = str->add("go_activeb24");
29479strings[5087] = str->add(strings[5087]);
29480strings[5090] = str->add("go_active6");
29481strings[1932] = str->add(strings[1932]);
29482strings[5090] = str->add(strings[5090]);
29483strings[5087] = str->add(strings[5087]);
29484strings[5091] = str->add("go_activeb6");
29485str->del(strings[1932]);
29486str->del(strings[1840]);
29487str->del(strings[5087]);
29488str->del(strings[1844]);
29489str->del(strings[1932]);
29490str->del(strings[1844]);
29491str->del(strings[5087]);
29492str->del(strings[1840]);
29493str->del(strings[1932]);
29494str->del(strings[1851]);
29495str->del(strings[5087]);
29496str->del(strings[1851]);
29497str->del(strings[5087]);
29498str->del(strings[5088]);
29499str->del(strings[1932]);
29500str->del(strings[5088]);
29501str->del(strings[5087]);
29502str->del(strings[5089]);
29503str->del(strings[5087]);
29504str->del(strings[5090]);
29505str->del(strings[1932]);
29506str->del(strings[5090]);
29507str->del(strings[5087]);
29508str->del(strings[5091]);
29509str->del(strings[7]);
29510str->del(strings[1869]);
29511strings[7] = str->add(strings[7]);
29512strings[3251] = str->add(strings[3251]);
29513strings[1932] = str->add(strings[1932]);
29514strings[5092] = str->add("go_activeb26");
29515strings[5093] = str->add("program,start");
29516strings[5094] = str->add("go_activec26");
29517strings[1932] = str->add(strings[1932]);
29518strings[5095] = str->add("go_activeb4");
29519strings[5093] = str->add(strings[5093]);
29520strings[5096] = str->add("go_activec4");
29521strings[1932] = str->add(strings[1932]);
29522strings[5097] = str->add("on");
29523str->del(strings[1932]);
29524str->del(strings[5092]);
29525str->del(strings[5093]);
29526str->del(strings[5094]);
29527str->del(strings[1932]);
29528str->del(strings[5095]);
29529str->del(strings[5093]);
29530str->del(strings[5096]);
29531str->del(strings[1932]);
29532str->del(strings[5097]);
29533strings[5098] = str->add("e,action,mouse,move");
29534strings[5099] = str->add("e");
29535str->del(strings[5098]);
29536str->del(strings[5099]);
29537strings[5100] = str->add("e,action,mouse,move");
29538strings[5101] = str->add("e");
29539str->del(strings[5100]);
29540str->del(strings[5101]);
29541strings[5102] = str->add("e,action,mouse,move");
29542strings[5103] = str->add("e");
29543str->del(strings[5102]);
29544str->del(strings[5103]);
29545strings[5104] = str->add("e,action,mouse,move");
29546strings[5105] = str->add("e");
29547str->del(strings[5104]);
29548str->del(strings[5105]);
29549str->del(strings[7]);
29550str->del(strings[3251]);
29551strings[7] = str->add(strings[7]);
29552strings[3254] = str->add(strings[3254]);
29553strings[5106] = str->add("e,action,mouse,move");
29554strings[5107] = str->add("e");
29555str->del(strings[5106]);
29556str->del(strings[5107]);
29557strings[5108] = str->add("e,action,mouse,move");
29558strings[5109] = str->add("e");
29559str->del(strings[5108]);
29560str->del(strings[5109]);
29561strings[5110] = str->add("e,action,mouse,move");
29562strings[5111] = str->add("e");
29563str->del(strings[5110]);
29564str->del(strings[5111]);
29565strings[5112] = str->add("e,action,mouse,move");
29566strings[5113] = str->add("e");
29567str->del(strings[5112]);
29568str->del(strings[5113]);
29569strings[5114] = str->add("e,action,mouse,move");
29570strings[5115] = str->add("e");
29571str->del(strings[5114]);
29572str->del(strings[5115]);
29573strings[5116] = str->add("e,action,mouse,move");
29574strings[5117] = str->add("e");
29575str->del(strings[5116]);
29576str->del(strings[5117]);
29577strings[5118] = str->add("e,action,mouse,move");
29578strings[5119] = str->add("e");
29579str->del(strings[5118]);
29580str->del(strings[5119]);
29581strings[5120] = str->add("e,action,mouse,move");
29582strings[5121] = str->add("e");
29583str->del(strings[5120]);
29584str->del(strings[5121]);
29585strings[5122] = str->add("program,start");
29586strings[5123] = str->add("go_active23");
29587strings[1932] = str->add(strings[1932]);
29588strings[5123] = str->add(strings[5123]);
29589strings[5122] = str->add(strings[5122]);
29590strings[5124] = str->add("go_activeb23");
29591strings[5122] = str->add(strings[5122]);
29592strings[5125] = str->add("go_active7");
29593strings[1932] = str->add(strings[1932]);
29594strings[5125] = str->add(strings[5125]);
29595strings[5122] = str->add(strings[5122]);
29596strings[5126] = str->add("go_activeb7");
29597str->del(strings[5122]);
29598str->del(strings[5123]);
29599str->del(strings[1932]);
29600str->del(strings[5123]);
29601str->del(strings[5122]);
29602str->del(strings[5124]);
29603str->del(strings[5122]);
29604str->del(strings[5125]);
29605str->del(strings[1932]);
29606str->del(strings[5125]);
29607str->del(strings[5122]);
29608str->del(strings[5126]);
29609strings[5127] = str->add("e,action,mouse,move");
29610strings[5128] = str->add("e");
29611str->del(strings[5127]);
29612str->del(strings[5128]);
29613strings[5129] = str->add("e,action,mouse,move");
29614strings[5130] = str->add("e");
29615str->del(strings[5129]);
29616str->del(strings[5130]);
29617strings[5131] = str->add("e,action,mouse,move");
29618strings[5132] = str->add("e");
29619str->del(strings[5131]);
29620str->del(strings[5132]);
29621strings[5133] = str->add("e,action,mouse,move");
29622strings[5134] = str->add("e");
29623str->del(strings[5133]);
29624str->del(strings[5134]);
29625str->del(strings[7]);
29626str->del(strings[3254]);
29627strings[7] = str->add(strings[7]);
29628strings[2206] = str->add(strings[2206]);
29629strings[5135] = str->add("e,action,mouse,move");
29630strings[5136] = str->add("e");
29631str->del(strings[5135]);
29632str->del(strings[5136]);
29633strings[5137] = str->add("e,action,mouse,move");
29634strings[5138] = str->add("e");
29635str->del(strings[5137]);
29636str->del(strings[5138]);
29637strings[5139] = str->add("e,action,mouse,move");
29638strings[5140] = str->add("e");
29639str->del(strings[5139]);
29640str->del(strings[5140]);
29641strings[5141] = str->add("e,action,mouse,move");
29642strings[5142] = str->add("e");
29643str->del(strings[5141]);
29644str->del(strings[5142]);
29645str->del(strings[7]);
29646str->del(strings[2206]);
29647strings[7] = str->add(strings[7]);
29648strings[2213] = str->add(strings[2213]);
29649strings[5143] = str->add("e,action,mouse,move");
29650strings[5144] = str->add("e");
29651strings[5145] = str->add("e,state,selected");
29652strings[5144] = str->add(strings[5144]);
29653strings[5145] = str->add(strings[5145]);
29654strings[5144] = str->add(strings[5144]);
29655strings[5145] = str->add(strings[5145]);
29656strings[5144] = str->add(strings[5144]);
29657strings[5145] = str->add(strings[5145]);
29658strings[5144] = str->add(strings[5144]);
29659strings[5145] = str->add(strings[5145]);
29660strings[5144] = str->add(strings[5144]);
29661strings[5145] = str->add(strings[5145]);
29662strings[5144] = str->add(strings[5144]);
29663strings[5146] = str->add("Lock Screen");
29664strings[469] = str->add(strings[469]);
29665strings[2708] = str->add(strings[2708]);
29666strings[1726] = str->add(strings[1726]);
29667strings[469] = str->add(strings[469]);
29668strings[2677] = str->add(strings[2677]);
29669strings[5147] = str->add("Hibernate");
29670strings[469] = str->add(strings[469]);
29671strings[2678] = str->add(strings[2678]);
29672strings[1724] = str->add(strings[1724]);
29673strings[469] = str->add(strings[469]);
29674strings[2676] = str->add(strings[2676]);
29675strings[1722] = str->add(strings[1722]);
29676strings[469] = str->add(strings[469]);
29677strings[2675] = str->add(strings[2675]);
29678strings[5148] = str->add("Logout");
29679strings[469] = str->add(strings[469]);
29680strings[2674] = str->add(strings[2674]);
29681str->del(strings[5143]);
29682str->del(strings[5144]);
29683strings[5149] = str->add("program,start");
29684strings[5150] = str->add("sel");
29685str->del(strings[5145]);
29686str->del(strings[5144]);
29687str->del(strings[5145]);
29688str->del(strings[5144]);
29689strings[5149] = str->add(strings[5149]);
29690strings[5150] = str->add(strings[5150]);
29691str->del(strings[5145]);
29692str->del(strings[5144]);
29693strings[5149] = str->add(strings[5149]);
29694strings[5150] = str->add(strings[5150]);
29695strings[1932] = str->add(strings[1932]);
29696strings[5150] = str->add(strings[5150]);
29697str->del(strings[5145]);
29698str->del(strings[5144]);
29699str->del(strings[5145]);
29700str->del(strings[5144]);
29701str->del(strings[5145]);
29702str->del(strings[5144]);
29703str->del(strings[5149]);
29704str->del(strings[5150]);
29705str->del(strings[5149]);
29706str->del(strings[5150]);
29707str->del(strings[5149]);
29708str->del(strings[5150]);
29709str->del(strings[1932]);
29710str->del(strings[5150]);
29711strings[361] = str->add(strings[361]);
29712strings[362] = str->add(strings[362]);
29713strings[361] = str->add(strings[361]);
29714str->del(strings[361]);
29715strings[362] = str->add(strings[362]);
29716str->del(strings[362]);
29717strings[5151] = str->add("resize");
29718str->del(strings[5151]);
29719strings[64] = str->add(strings[64]);
29720strings[2581] = str->add(strings[2581]);
29721strings[64] = str->add(strings[64]);
29722strings[5152] = str->add("load");
29723strings[1841] = str->add(strings[1841]);
29724strings[64] = str->add(strings[64]);
29725strings[1949] = str->add(strings[1949]);
29726strings[64] = str->add(strings[64]);
29727strings[1880] = str->add(strings[1880]);
29728strings[64] = str->add(strings[64]);
29729strings[1876] = str->add(strings[1876]);
29730str->del(strings[64]);
29731strings[379] = str->add(strings[379]);
29732strings[1842] = str->add(strings[1842]);
29733strings[1842] = str->add(strings[1842]);
29734strings[64] = str->add(strings[64]);
29735strings[1874] = str->add(strings[1874]);
29736strings[64] = str->add(strings[64]);
29737strings[2583] = str->add(strings[2583]);
29738strings[5152] = str->add(strings[5152]);
29739strings[1841] = str->add(strings[1841]);
29740strings[64] = str->add(strings[64]);
29741strings[2584] = str->add(strings[2584]);
29742strings[5152] = str->add(strings[5152]);
29743strings[1841] = str->add(strings[1841]);
29744strings[469] = str->add(strings[469]);
29745strings[2708] = str->add(strings[2708]);
29746strings[5152] = str->add(strings[5152]);
29747strings[469] = str->add(strings[469]);
29748strings[3008] = str->add(strings[3008]);
29749strings[1841] = str->add(strings[1841]);
29750strings[5153] = str->add("resize");
29751strings[5153] = str->add(strings[5153]);
29752strings[64] = str->add(strings[64]);
29753strings[2585] = str->add(strings[2585]);
29754strings[64] = str->add(strings[64]);
29755strings[5152] = str->add(strings[5152]);
29756strings[5146] = str->add(strings[5146]);
29757strings[1841] = str->add(strings[1841]);
29758str->del(strings[64]);
29759strings[385] = str->add(strings[385]);
29760strings[5146] = str->add(strings[5146]);
29761strings[64] = str->add(strings[64]);
29762strings[2886] = str->add(strings[2886]);
29763strings[64] = str->add(strings[64]);
29764strings[2888] = str->add(strings[2888]);
29765strings[64] = str->add(strings[64]);
29766strings[2582] = str->add(strings[2582]);
29767strings[5152] = str->add(strings[5152]);
29768strings[1841] = str->add(strings[1841]);
29769strings[64] = str->add(strings[64]);
29770strings[2583] = str->add(strings[2583]);
29771strings[5152] = str->add(strings[5152]);
29772strings[1841] = str->add(strings[1841]);
29773strings[64] = str->add(strings[64]);
29774strings[2584] = str->add(strings[2584]);
29775strings[5152] = str->add(strings[5152]);
29776strings[1841] = str->add(strings[1841]);
29777strings[469] = str->add(strings[469]);
29778strings[2677] = str->add(strings[2677]);
29779strings[5152] = str->add(strings[5152]);
29780strings[469] = str->add(strings[469]);
29781strings[3011] = str->add(strings[3011]);
29782strings[1841] = str->add(strings[1841]);
29783strings[5153] = str->add(strings[5153]);
29784strings[5153] = str->add(strings[5153]);
29785strings[64] = str->add(strings[64]);
29786strings[2585] = str->add(strings[2585]);
29787strings[64] = str->add(strings[64]);
29788strings[5152] = str->add(strings[5152]);
29789strings[1726] = str->add(strings[1726]);
29790strings[1841] = str->add(strings[1841]);
29791str->del(strings[64]);
29792strings[385] = str->add(strings[385]);
29793strings[1726] = str->add(strings[1726]);
29794strings[64] = str->add(strings[64]);
29795strings[2886] = str->add(strings[2886]);
29796strings[64] = str->add(strings[64]);
29797strings[2888] = str->add(strings[2888]);
29798strings[64] = str->add(strings[64]);
29799strings[2583] = str->add(strings[2583]);
29800strings[5152] = str->add(strings[5152]);
29801strings[1841] = str->add(strings[1841]);
29802strings[64] = str->add(strings[64]);
29803strings[2584] = str->add(strings[2584]);
29804strings[5152] = str->add(strings[5152]);
29805strings[1841] = str->add(strings[1841]);
29806strings[469] = str->add(strings[469]);
29807strings[2678] = str->add(strings[2678]);
29808strings[5152] = str->add(strings[5152]);
29809strings[469] = str->add(strings[469]);
29810strings[3013] = str->add(strings[3013]);
29811strings[1841] = str->add(strings[1841]);
29812strings[5153] = str->add(strings[5153]);
29813strings[5153] = str->add(strings[5153]);
29814strings[64] = str->add(strings[64]);
29815strings[2585] = str->add(strings[2585]);
29816strings[64] = str->add(strings[64]);
29817strings[5152] = str->add(strings[5152]);
29818strings[5147] = str->add(strings[5147]);
29819strings[1841] = str->add(strings[1841]);
29820str->del(strings[64]);
29821strings[385] = str->add(strings[385]);
29822strings[5147] = str->add(strings[5147]);
29823strings[64] = str->add(strings[64]);
29824strings[2886] = str->add(strings[2886]);
29825strings[64] = str->add(strings[64]);
29826strings[2888] = str->add(strings[2888]);
29827strings[64] = str->add(strings[64]);
29828strings[2583] = str->add(strings[2583]);
29829strings[5152] = str->add(strings[5152]);
29830strings[1841] = str->add(strings[1841]);
29831strings[64] = str->add(strings[64]);
29832strings[2584] = str->add(strings[2584]);
29833strings[5152] = str->add(strings[5152]);
29834strings[1841] = str->add(strings[1841]);
29835strings[469] = str->add(strings[469]);
29836strings[2676] = str->add(strings[2676]);
29837strings[5152] = str->add(strings[5152]);
29838strings[469] = str->add(strings[469]);
29839strings[3015] = str->add(strings[3015]);
29840strings[1841] = str->add(strings[1841]);
29841strings[5153] = str->add(strings[5153]);
29842strings[5153] = str->add(strings[5153]);
29843strings[64] = str->add(strings[64]);
29844strings[2585] = str->add(strings[2585]);
29845strings[64] = str->add(strings[64]);
29846strings[5152] = str->add(strings[5152]);
29847strings[1724] = str->add(strings[1724]);
29848strings[1841] = str->add(strings[1841]);
29849str->del(strings[64]);
29850strings[385] = str->add(strings[385]);
29851strings[1724] = str->add(strings[1724]);
29852strings[64] = str->add(strings[64]);
29853strings[2886] = str->add(strings[2886]);
29854strings[64] = str->add(strings[64]);
29855strings[2888] = str->add(strings[2888]);
29856strings[64] = str->add(strings[64]);
29857strings[2583] = str->add(strings[2583]);
29858strings[5152] = str->add(strings[5152]);
29859strings[1841] = str->add(strings[1841]);
29860strings[64] = str->add(strings[64]);
29861strings[2584] = str->add(strings[2584]);
29862strings[5152] = str->add(strings[5152]);
29863strings[1841] = str->add(strings[1841]);
29864strings[469] = str->add(strings[469]);
29865strings[2675] = str->add(strings[2675]);
29866strings[5152] = str->add(strings[5152]);
29867strings[469] = str->add(strings[469]);
29868strings[3017] = str->add(strings[3017]);
29869strings[1841] = str->add(strings[1841]);
29870strings[5153] = str->add(strings[5153]);
29871strings[5153] = str->add(strings[5153]);
29872strings[64] = str->add(strings[64]);
29873strings[2585] = str->add(strings[2585]);
29874strings[64] = str->add(strings[64]);
29875strings[5152] = str->add(strings[5152]);
29876strings[1722] = str->add(strings[1722]);
29877strings[1841] = str->add(strings[1841]);
29878str->del(strings[64]);
29879strings[385] = str->add(strings[385]);
29880strings[1722] = str->add(strings[1722]);
29881strings[64] = str->add(strings[64]);
29882strings[2886] = str->add(strings[2886]);
29883strings[64] = str->add(strings[64]);
29884strings[2888] = str->add(strings[2888]);
29885strings[64] = str->add(strings[64]);
29886strings[2582] = str->add(strings[2582]);
29887strings[5152] = str->add(strings[5152]);
29888strings[1841] = str->add(strings[1841]);
29889strings[64] = str->add(strings[64]);
29890strings[2583] = str->add(strings[2583]);
29891strings[5152] = str->add(strings[5152]);
29892strings[1841] = str->add(strings[1841]);
29893strings[64] = str->add(strings[64]);
29894strings[2584] = str->add(strings[2584]);
29895strings[5152] = str->add(strings[5152]);
29896strings[1841] = str->add(strings[1841]);
29897strings[469] = str->add(strings[469]);
29898strings[2674] = str->add(strings[2674]);
29899strings[5152] = str->add(strings[5152]);
29900strings[469] = str->add(strings[469]);
29901strings[3019] = str->add(strings[3019]);
29902strings[1841] = str->add(strings[1841]);
29903strings[5153] = str->add(strings[5153]);
29904strings[5153] = str->add(strings[5153]);
29905strings[64] = str->add(strings[64]);
29906strings[2585] = str->add(strings[2585]);
29907strings[64] = str->add(strings[64]);
29908strings[5152] = str->add(strings[5152]);
29909strings[5148] = str->add(strings[5148]);
29910strings[1841] = str->add(strings[1841]);
29911str->del(strings[64]);
29912strings[385] = str->add(strings[385]);
29913strings[5148] = str->add(strings[5148]);
29914strings[64] = str->add(strings[64]);
29915strings[2886] = str->add(strings[2886]);
29916strings[64] = str->add(strings[64]);
29917strings[2888] = str->add(strings[2888]);
29918strings[5153] = str->add(strings[5153]);
29919strings[5153] = str->add(strings[5153]);
29920strings[5153] = str->add(strings[5153]);
29921strings[5153] = str->add(strings[5153]);
29922strings[5153] = str->add(strings[5153]);
29923strings[5153] = str->add(strings[5153]);
29924strings[5153] = str->add(strings[5153]);
29925strings[5153] = str->add(strings[5153]);
29926strings[5153] = str->add(strings[5153]);
29927strings[5153] = str->add(strings[5153]);
29928strings[5153] = str->add(strings[5153]);
29929strings[5153] = str->add(strings[5153]);
29930strings[5153] = str->add(strings[5153]);
29931strings[5153] = str->add(strings[5153]);
29932strings[5153] = str->add(strings[5153]);
29933strings[5153] = str->add(strings[5153]);
29934strings[5153] = str->add(strings[5153]);
29935strings[5153] = str->add(strings[5153]);
29936strings[5153] = str->add(strings[5153]);
29937strings[5153] = str->add(strings[5153]);
29938strings[5153] = str->add(strings[5153]);
29939str->del(strings[1842]);
29940strings[1842] = str->add(strings[1842]);
29941str->del(strings[1842]);
29942strings[1842] = str->add(strings[1842]);
29943strings[5153] = str->add(strings[5153]);
29944strings[5146] = str->add(strings[5146]);
29945strings[5146] = str->add(strings[5146]);
29946strings[64] = str->add(strings[64]);
29947strings[2915] = str->add(strings[2915]);
29948strings[5153] = str->add(strings[5153]);
29949strings[1726] = str->add(strings[1726]);
29950strings[1726] = str->add(strings[1726]);
29951strings[5153] = str->add(strings[5153]);
29952strings[5147] = str->add(strings[5147]);
29953strings[5147] = str->add(strings[5147]);
29954strings[5153] = str->add(strings[5153]);
29955strings[1724] = str->add(strings[1724]);
29956strings[1724] = str->add(strings[1724]);
29957strings[5153] = str->add(strings[5153]);
29958strings[1722] = str->add(strings[1722]);
29959strings[1722] = str->add(strings[1722]);
29960strings[64] = str->add(strings[64]);
29961strings[2915] = str->add(strings[2915]);
29962strings[5153] = str->add(strings[5153]);
29963strings[5148] = str->add(strings[5148]);
29964strings[5148] = str->add(strings[5148]);
29965str->del(strings[64]);
29966str->del(strings[2913]);
29967strings[64] = str->add(strings[64]);
29968strings[3021] = str->add(strings[3021]);
29969strings[5154] = str->add("font");
29970strings[5155] = str->add("font_fallbacks");
29971strings[5156] = str->add("font_size");
29972strings[5157] = str->add("font_source");
29973strings[5158] = str->add("color");
29974strings[5159] = str->add("underline_color");
29975strings[5160] = str->add("underline2_color");
29976strings[5161] = str->add("outline_color");
29977strings[5162] = str->add("shadow_color");
29978strings[5163] = str->add("glow_color");
29979strings[5164] = str->add("glow2_color");
29980strings[5165] = str->add("backing_color");
29981strings[5166] = str->add("strikethrough_color");
29982strings[5167] = str->add("align");
29983strings[5168] = str->add("valign");
29984strings[5169] = str->add("wrap");
29985strings[5170] = str->add("left_margin");
29986strings[5171] = str->add("right_margin");
29987strings[5172] = str->add("underline");
29988strings[5173] = str->add("strikethrough");
29989strings[5174] = str->add("backing");
29990strings[5175] = str->add("style");
29991strings[5176] = str->add("tabstops");
29992strings[5167] = str->add(strings[5167]);
29993strings[5177] = str->add("center");
29994str->del(strings[5167]);
29995str->del(strings[5177]);
29996strings[5158] = str->add(strings[5158]);
29997strings[5178] = str->add("#000");
29998str->del(strings[5158]);
29999str->del(strings[5178]);
30000strings[5175] = str->add(strings[5175]);
30001strings[5179] = str->add("shadow");
30002str->del(strings[5175]);
30003str->del(strings[5179]);
30004strings[5162] = str->add(strings[5162]);
30005strings[5180] = str->add("#ffffff80");
30006str->del(strings[5162]);
30007str->del(strings[5180]);
30008strings[5169] = str->add(strings[5169]);
30009strings[5181] = str->add("word");
30010str->del(strings[5169]);
30011str->del(strings[5181]);
30012strings[5157] = str->add(strings[5157]);
30013strings[469] = str->add(strings[469]);
30014strings[469] = str->add(strings[469]);
30015str->del(strings[5157]);
30016str->del(strings[469]);
30017strings[5156] = str->add(strings[5156]);
30018strings[5182] = str->add("10.000000");
30019str->del(strings[5156]);
30020str->del(strings[5182]);
30021strings[5154] = str->add(strings[5154]);
30022strings[470] = str->add(strings[470]);
30023strings[470] = str->add(strings[470]);
30024str->del(strings[5154]);
30025str->del(strings[470]);
30026strings[382] = str->add(strings[382]);
30027strings[382] = str->add(strings[382]);
30028strings[382] = str->add(strings[382]);
30029strings[382] = str->add(strings[382]);
30030strings[382] = str->add(strings[382]);
30031strings[382] = str->add(strings[382]);
30032strings[470] = str->add(strings[470]);
30033strings[469] = str->add(strings[469]);
30034strings[5175] = str->add(strings[5175]);
30035strings[5183] = str->add("glow");
30036str->del(strings[5175]);
30037str->del(strings[5183]);
30038strings[5158] = str->add(strings[5158]);
30039strings[5184] = str->add("#fff");
30040str->del(strings[5158]);
30041str->del(strings[5184]);
30042strings[5164] = str->add(strings[5164]);
30043strings[5185] = str->add("#fe87");
30044str->del(strings[5164]);
30045str->del(strings[5185]);
30046strings[5163] = str->add(strings[5163]);
30047strings[5186] = str->add("#fa14");
30048str->del(strings[5163]);
30049str->del(strings[5186]);
30050strings[5154] = str->add(strings[5154]);
30051strings[471] = str->add(strings[471]);
30052str->del(strings[470]);
30053strings[471] = str->add(strings[471]);
30054str->del(strings[5154]);
30055str->del(strings[471]);
30056strings[470] = str->add(strings[470]);
30057strings[469] = str->add(strings[469]);
30058strings[5175] = str->add(strings[5175]);
30059strings[5187] = str->add("glow");
30060str->del(strings[5175]);
30061str->del(strings[5187]);
30062strings[5158] = str->add(strings[5158]);
30063strings[5188] = str->add("#fff");
30064str->del(strings[5158]);
30065str->del(strings[5188]);
30066strings[5164] = str->add(strings[5164]);
30067strings[5189] = str->add("#fe87");
30068str->del(strings[5164]);
30069str->del(strings[5189]);
30070strings[5163] = str->add(strings[5163]);
30071strings[5190] = str->add("#fa14");
30072str->del(strings[5163]);
30073str->del(strings[5190]);
30074strings[5154] = str->add(strings[5154]);
30075strings[471] = str->add(strings[471]);
30076str->del(strings[470]);
30077strings[471] = str->add(strings[471]);
30078str->del(strings[5154]);
30079str->del(strings[471]);
30080str->del(strings[5154]);
30081str->del(strings[5155]);
30082str->del(strings[5156]);
30083str->del(strings[5157]);
30084str->del(strings[5158]);
30085str->del(strings[5159]);
30086str->del(strings[5160]);
30087str->del(strings[5161]);
30088str->del(strings[5162]);
30089str->del(strings[5163]);
30090str->del(strings[5164]);
30091str->del(strings[5165]);
30092str->del(strings[5166]);
30093str->del(strings[5167]);
30094str->del(strings[5168]);
30095str->del(strings[5169]);
30096str->del(strings[5170]);
30097str->del(strings[5171]);
30098str->del(strings[5172]);
30099str->del(strings[5173]);
30100str->del(strings[5174]);
30101str->del(strings[5175]);
30102str->del(strings[5176]);
30103str->del(strings[382]);
30104str->del(strings[382]);
30105str->del(strings[382]);
30106str->del(strings[382]);
30107str->del(strings[382]);
30108str->del(strings[382]);
30109str->del(strings[471]);
30110str->del(strings[469]);
30111str->del(strings[470]);
30112str->del(strings[469]);
30113str->del(strings[471]);
30114str->del(strings[469]);
30115strings[5191] = str->add("font");
30116strings[5192] = str->add("font_fallbacks");
30117strings[5193] = str->add("font_size");
30118strings[5194] = str->add("font_source");
30119strings[5195] = str->add("color");
30120strings[5196] = str->add("underline_color");
30121strings[5197] = str->add("underline2_color");
30122strings[5198] = str->add("outline_color");
30123strings[5199] = str->add("shadow_color");
30124strings[5200] = str->add("glow_color");
30125strings[5201] = str->add("glow2_color");
30126strings[5202] = str->add("backing_color");
30127strings[5203] = str->add("strikethrough_color");
30128strings[5204] = str->add("align");
30129strings[5205] = str->add("valign");
30130strings[5206] = str->add("wrap");
30131strings[5207] = str->add("left_margin");
30132strings[5208] = str->add("right_margin");
30133strings[5209] = str->add("underline");
30134strings[5210] = str->add("strikethrough");
30135strings[5211] = str->add("backing");
30136strings[5212] = str->add("style");
30137strings[5213] = str->add("tabstops");
30138strings[5204] = str->add(strings[5204]);
30139strings[5214] = str->add("center");
30140str->del(strings[5204]);
30141str->del(strings[5214]);
30142strings[5195] = str->add(strings[5195]);
30143strings[5215] = str->add("#000");
30144str->del(strings[5195]);
30145str->del(strings[5215]);
30146strings[5212] = str->add(strings[5212]);
30147strings[5216] = str->add("shadow");
30148str->del(strings[5212]);
30149str->del(strings[5216]);
30150strings[5199] = str->add(strings[5199]);
30151strings[5217] = str->add("#ffffff80");
30152str->del(strings[5199]);
30153str->del(strings[5217]);
30154strings[5206] = str->add(strings[5206]);
30155strings[5218] = str->add("word");
30156str->del(strings[5206]);
30157str->del(strings[5218]);
30158strings[5194] = str->add(strings[5194]);
30159strings[469] = str->add(strings[469]);
30160strings[469] = str->add(strings[469]);
30161str->del(strings[5194]);
30162str->del(strings[469]);
30163strings[5193] = str->add(strings[5193]);
30164strings[5219] = str->add("10.000000");
30165str->del(strings[5193]);
30166str->del(strings[5219]);
30167strings[5191] = str->add(strings[5191]);
30168strings[470] = str->add(strings[470]);
30169strings[470] = str->add(strings[470]);
30170str->del(strings[5191]);
30171str->del(strings[470]);
30172strings[470] = str->add(strings[470]);
30173strings[469] = str->add(strings[469]);
30174strings[5212] = str->add(strings[5212]);
30175strings[5220] = str->add("soft_shadow");
30176str->del(strings[5212]);
30177str->del(strings[5220]);
30178strings[5195] = str->add(strings[5195]);
30179strings[5221] = str->add("#fff");
30180str->del(strings[5195]);
30181str->del(strings[5221]);
30182strings[5199] = str->add(strings[5199]);
30183strings[5222] = str->add("#00000020");
30184str->del(strings[5199]);
30185str->del(strings[5222]);
30186strings[5193] = str->add(strings[5193]);
30187strings[5223] = str->add("12.000000");
30188str->del(strings[5193]);
30189str->del(strings[5223]);
30190strings[5191] = str->add(strings[5191]);
30191strings[471] = str->add(strings[471]);
30192str->del(strings[470]);
30193strings[471] = str->add(strings[471]);
30194str->del(strings[5191]);
30195str->del(strings[471]);
30196strings[382] = str->add(strings[382]);
30197strings[382] = str->add(strings[382]);
30198strings[382] = str->add(strings[382]);
30199strings[382] = str->add(strings[382]);
30200strings[382] = str->add(strings[382]);
30201strings[382] = str->add(strings[382]);
30202strings[382] = str->add(strings[382]);
30203strings[382] = str->add(strings[382]);
30204strings[382] = str->add(strings[382]);
30205strings[382] = str->add(strings[382]);
30206strings[382] = str->add(strings[382]);
30207strings[382] = str->add(strings[382]);
30208strings[382] = str->add(strings[382]);
30209strings[382] = str->add(strings[382]);
30210strings[382] = str->add(strings[382]);
30211strings[382] = str->add(strings[382]);
30212strings[382] = str->add(strings[382]);
30213strings[382] = str->add(strings[382]);
30214strings[382] = str->add(strings[382]);
30215strings[382] = str->add(strings[382]);
30216strings[382] = str->add(strings[382]);
30217strings[382] = str->add(strings[382]);
30218str->del(strings[5191]);
30219str->del(strings[5192]);
30220str->del(strings[5193]);
30221str->del(strings[5194]);
30222str->del(strings[5195]);
30223str->del(strings[5196]);
30224str->del(strings[5197]);
30225str->del(strings[5198]);
30226str->del(strings[5199]);
30227str->del(strings[5200]);
30228str->del(strings[5201]);
30229str->del(strings[5202]);
30230str->del(strings[5203]);
30231str->del(strings[5204]);
30232str->del(strings[5205]);
30233str->del(strings[5206]);
30234str->del(strings[5207]);
30235str->del(strings[5208]);
30236str->del(strings[5209]);
30237str->del(strings[5210]);
30238str->del(strings[5211]);
30239str->del(strings[5212]);
30240str->del(strings[5213]);
30241str->del(strings[471]);
30242str->del(strings[469]);
30243str->del(strings[382]);
30244str->del(strings[382]);
30245str->del(strings[382]);
30246str->del(strings[382]);
30247str->del(strings[382]);
30248str->del(strings[382]);
30249str->del(strings[382]);
30250str->del(strings[382]);
30251str->del(strings[382]);
30252str->del(strings[382]);
30253str->del(strings[382]);
30254str->del(strings[382]);
30255str->del(strings[382]);
30256str->del(strings[382]);
30257str->del(strings[382]);
30258str->del(strings[382]);
30259str->del(strings[382]);
30260str->del(strings[382]);
30261str->del(strings[382]);
30262str->del(strings[382]);
30263str->del(strings[382]);
30264str->del(strings[470]);
30265str->del(strings[469]);
30266str->del(strings[382]);
30267str->del(strings[5152]);
30268str->del(strings[1841]);
30269str->del(strings[5152]);
30270str->del(strings[1841]);
30271str->del(strings[5152]);
30272str->del(strings[1841]);
30273str->del(strings[5152]);
30274str->del(strings[1841]);
30275str->del(strings[5153]);
30276str->del(strings[5153]);
30277str->del(strings[5152]);
30278str->del(strings[1841]);
30279str->del(strings[5152]);
30280str->del(strings[1841]);
30281str->del(strings[5152]);
30282str->del(strings[1841]);
30283str->del(strings[5152]);
30284str->del(strings[1841]);
30285str->del(strings[5152]);
30286str->del(strings[1841]);
30287str->del(strings[5153]);
30288str->del(strings[5153]);
30289str->del(strings[5152]);
30290str->del(strings[1841]);
30291str->del(strings[5152]);
30292str->del(strings[1841]);
30293str->del(strings[5152]);
30294str->del(strings[1841]);
30295str->del(strings[5152]);
30296str->del(strings[1841]);
30297str->del(strings[5153]);
30298str->del(strings[5153]);
30299str->del(strings[5152]);
30300str->del(strings[1841]);
30301str->del(strings[5152]);
30302str->del(strings[1841]);
30303str->del(strings[5152]);
30304str->del(strings[1841]);
30305str->del(strings[5152]);
30306str->del(strings[1841]);
30307str->del(strings[5153]);
30308str->del(strings[5153]);
30309str->del(strings[5152]);
30310str->del(strings[1841]);
30311str->del(strings[5152]);
30312str->del(strings[1841]);
30313str->del(strings[5152]);
30314str->del(strings[1841]);
30315str->del(strings[5152]);
30316str->del(strings[1841]);
30317str->del(strings[5153]);
30318str->del(strings[5153]);
30319str->del(strings[5152]);
30320str->del(strings[1841]);
30321str->del(strings[5152]);
30322str->del(strings[1841]);
30323str->del(strings[5152]);
30324str->del(strings[1841]);
30325str->del(strings[5152]);
30326str->del(strings[1841]);
30327str->del(strings[5152]);
30328str->del(strings[1841]);
30329str->del(strings[5153]);
30330str->del(strings[5153]);
30331str->del(strings[5152]);
30332str->del(strings[1841]);
30333str->del(strings[5153]);
30334str->del(strings[5153]);
30335str->del(strings[5153]);
30336str->del(strings[5153]);
30337str->del(strings[5153]);
30338str->del(strings[5153]);
30339str->del(strings[5153]);
30340str->del(strings[5153]);
30341str->del(strings[5153]);
30342str->del(strings[5153]);
30343str->del(strings[5153]);
30344str->del(strings[5153]);
30345str->del(strings[5153]);
30346str->del(strings[5153]);
30347str->del(strings[5153]);
30348str->del(strings[5153]);
30349str->del(strings[5153]);
30350str->del(strings[5153]);
30351str->del(strings[5153]);
30352str->del(strings[5153]);
30353str->del(strings[5153]);
30354str->del(strings[5153]);
30355str->del(strings[5153]);
30356str->del(strings[5153]);
30357str->del(strings[5153]);
30358str->del(strings[5153]);
30359str->del(strings[5153]);
30360strings[5224] = str->add("e,action,mouse,move");
30361strings[5225] = str->add("e");
30362str->del(strings[5224]);
30363str->del(strings[5225]);
30364strings[5226] = str->add("font");
30365strings[5227] = str->add("font_fallbacks");
30366strings[5228] = str->add("font_size");
30367strings[5229] = str->add("font_source");
30368strings[5230] = str->add("color");
30369strings[5231] = str->add("underline_color");
30370strings[5232] = str->add("underline2_color");
30371strings[5233] = str->add("outline_color");
30372strings[5234] = str->add("shadow_color");
30373strings[5235] = str->add("glow_color");
30374strings[5236] = str->add("glow2_color");
30375strings[5237] = str->add("backing_color");
30376strings[5238] = str->add("strikethrough_color");
30377strings[5239] = str->add("align");
30378strings[5240] = str->add("valign");
30379strings[5241] = str->add("wrap");
30380strings[5242] = str->add("left_margin");
30381strings[5243] = str->add("right_margin");
30382strings[5244] = str->add("underline");
30383strings[5245] = str->add("strikethrough");
30384strings[5246] = str->add("backing");
30385strings[5247] = str->add("style");
30386strings[5248] = str->add("tabstops");
30387strings[5239] = str->add(strings[5239]);
30388strings[5249] = str->add("center");
30389str->del(strings[5239]);
30390str->del(strings[5249]);
30391strings[5230] = str->add(strings[5230]);
30392strings[5250] = str->add("#000");
30393str->del(strings[5230]);
30394str->del(strings[5250]);
30395strings[5247] = str->add(strings[5247]);
30396strings[5251] = str->add("shadow");
30397str->del(strings[5247]);
30398str->del(strings[5251]);
30399strings[5234] = str->add(strings[5234]);
30400strings[5252] = str->add("#ffffff80");
30401str->del(strings[5234]);
30402str->del(strings[5252]);
30403strings[5241] = str->add(strings[5241]);
30404strings[5253] = str->add("word");
30405str->del(strings[5241]);
30406str->del(strings[5253]);
30407strings[5229] = str->add(strings[5229]);
30408strings[469] = str->add(strings[469]);
30409strings[469] = str->add(strings[469]);
30410str->del(strings[5229]);
30411str->del(strings[469]);
30412strings[5228] = str->add(strings[5228]);
30413strings[5254] = str->add("10.000000");
30414str->del(strings[5228]);
30415str->del(strings[5254]);
30416strings[5226] = str->add(strings[5226]);
30417strings[470] = str->add(strings[470]);
30418strings[470] = str->add(strings[470]);
30419str->del(strings[5226]);
30420str->del(strings[470]);
30421strings[470] = str->add(strings[470]);
30422strings[469] = str->add(strings[469]);
30423strings[5247] = str->add(strings[5247]);
30424strings[5255] = str->add("soft_shadow");
30425str->del(strings[5247]);
30426str->del(strings[5255]);
30427strings[5230] = str->add(strings[5230]);
30428strings[5256] = str->add("#fff");
30429str->del(strings[5230]);
30430str->del(strings[5256]);
30431strings[5234] = str->add(strings[5234]);
30432strings[5257] = str->add("#00000020");
30433str->del(strings[5234]);
30434str->del(strings[5257]);
30435strings[5228] = str->add(strings[5228]);
30436strings[5258] = str->add("12.000000");
30437str->del(strings[5228]);
30438str->del(strings[5258]);
30439strings[5226] = str->add(strings[5226]);
30440strings[471] = str->add(strings[471]);
30441str->del(strings[470]);
30442strings[471] = str->add(strings[471]);
30443str->del(strings[5226]);
30444str->del(strings[471]);
30445strings[382] = str->add(strings[382]);
30446strings[382] = str->add(strings[382]);
30447strings[382] = str->add(strings[382]);
30448strings[382] = str->add(strings[382]);
30449strings[382] = str->add(strings[382]);
30450strings[382] = str->add(strings[382]);
30451strings[382] = str->add(strings[382]);
30452strings[382] = str->add(strings[382]);
30453strings[382] = str->add(strings[382]);
30454strings[382] = str->add(strings[382]);
30455strings[382] = str->add(strings[382]);
30456strings[382] = str->add(strings[382]);
30457strings[382] = str->add(strings[382]);
30458strings[382] = str->add(strings[382]);
30459strings[382] = str->add(strings[382]);
30460strings[382] = str->add(strings[382]);
30461strings[382] = str->add(strings[382]);
30462strings[382] = str->add(strings[382]);
30463strings[382] = str->add(strings[382]);
30464strings[382] = str->add(strings[382]);
30465strings[382] = str->add(strings[382]);
30466strings[382] = str->add(strings[382]);
30467str->del(strings[471]);
30468str->del(strings[469]);
30469str->del(strings[382]);
30470str->del(strings[382]);
30471str->del(strings[382]);
30472str->del(strings[382]);
30473str->del(strings[382]);
30474str->del(strings[382]);
30475str->del(strings[382]);
30476str->del(strings[382]);
30477str->del(strings[382]);
30478str->del(strings[382]);
30479str->del(strings[382]);
30480str->del(strings[382]);
30481str->del(strings[382]);
30482str->del(strings[382]);
30483str->del(strings[382]);
30484str->del(strings[382]);
30485str->del(strings[382]);
30486str->del(strings[382]);
30487str->del(strings[382]);
30488str->del(strings[382]);
30489str->del(strings[382]);
30490str->del(strings[470]);
30491str->del(strings[469]);
30492str->del(strings[382]);
30493str->del(strings[5226]);
30494str->del(strings[5227]);
30495str->del(strings[5228]);
30496str->del(strings[5229]);
30497str->del(strings[5230]);
30498str->del(strings[5231]);
30499str->del(strings[5232]);
30500str->del(strings[5233]);
30501str->del(strings[5234]);
30502str->del(strings[5235]);
30503str->del(strings[5236]);
30504str->del(strings[5237]);
30505str->del(strings[5238]);
30506str->del(strings[5239]);
30507str->del(strings[5240]);
30508str->del(strings[5241]);
30509str->del(strings[5242]);
30510str->del(strings[5243]);
30511str->del(strings[5244]);
30512str->del(strings[5245]);
30513str->del(strings[5246]);
30514str->del(strings[5247]);
30515str->del(strings[5248]);
30516strings[5259] = str->add("e,action,mouse,move");
30517strings[5260] = str->add("e");
30518str->del(strings[5259]);
30519str->del(strings[5260]);
30520strings[5261] = str->add("e,action,mouse,move");
30521strings[5262] = str->add("e");
30522str->del(strings[5261]);
30523str->del(strings[5262]);
30524strings[5263] = str->add("e,action,mouse,move");
30525strings[5264] = str->add("e");
30526str->del(strings[5263]);
30527str->del(strings[5264]);
30528strings[1932] = str->add(strings[1932]);
30529strings[5265] = str->add("go_activeb25");
30530strings[5266] = str->add("program,start");
30531strings[5267] = str->add("go_activec25");
30532strings[1932] = str->add(strings[1932]);
30533strings[5268] = str->add("go_activeb5");
30534strings[5266] = str->add(strings[5266]);
30535strings[5269] = str->add("go_activec5");
30536str->del(strings[1932]);
30537str->del(strings[5265]);
30538str->del(strings[5266]);
30539str->del(strings[5267]);
30540str->del(strings[1932]);
30541str->del(strings[5268]);
30542str->del(strings[5266]);
30543str->del(strings[5269]);
30544str->del(strings[7]);
30545str->del(strings[2213]);
30546strings[7] = str->add(strings[7]);
30547strings[2220] = str->add(strings[2220]);
30548strings[5270] = str->add("e,action,mouse,move");
30549strings[5271] = str->add("e");
30550str->del(strings[5270]);
30551str->del(strings[5271]);
30552strings[5272] = str->add("e,action,mouse,move");
30553strings[5273] = str->add("e");
30554str->del(strings[5272]);
30555str->del(strings[5273]);
30556strings[5274] = str->add("program,start");
30557strings[5275] = str->add("go_active22");
30558strings[1932] = str->add(strings[1932]);
30559strings[5275] = str->add(strings[5275]);
30560strings[5274] = str->add(strings[5274]);
30561strings[5276] = str->add("go_activeb22");
30562strings[5274] = str->add(strings[5274]);
30563strings[5277] = str->add("go_active8");
30564strings[1932] = str->add(strings[1932]);
30565strings[5277] = str->add(strings[5277]);
30566strings[5274] = str->add(strings[5274]);
30567strings[5278] = str->add("go_activeb8");
30568str->del(strings[5274]);
30569str->del(strings[5275]);
30570str->del(strings[1932]);
30571str->del(strings[5275]);
30572str->del(strings[5274]);
30573str->del(strings[5276]);
30574str->del(strings[5274]);
30575str->del(strings[5277]);
30576str->del(strings[1932]);
30577str->del(strings[5277]);
30578str->del(strings[5274]);
30579str->del(strings[5278]);
30580str->del(strings[7]);
30581str->del(strings[2220]);
30582strings[7] = str->add(strings[7]);
30583strings[2226] = str->add(strings[2226]);
30584str->del(strings[7]);
30585str->del(strings[2226]);
30586strings[7] = str->add(strings[7]);
30587strings[2257] = str->add(strings[2257]);
30588strings[5279] = str->add("e,action,mouse,move");
30589strings[5280] = str->add("e");
30590str->del(strings[5279]);
30591str->del(strings[5280]);
30592strings[5281] = str->add("e,action,mouse,move");
30593strings[5282] = str->add("e");
30594str->del(strings[5281]);
30595str->del(strings[5282]);
30596strings[5283] = str->add("e,action,mouse,move");
30597strings[5284] = str->add("e");
30598str->del(strings[5283]);
30599str->del(strings[5284]);
30600strings[1932] = str->add(strings[1932]);
30601strings[5285] = str->add("go_activeb24");
30602strings[5286] = str->add("program,start");
30603strings[5287] = str->add("go_activec24");
30604strings[1932] = str->add(strings[1932]);
30605strings[5288] = str->add("go_activeb6");
30606strings[5286] = str->add(strings[5286]);
30607strings[5289] = str->add("go_activec6");
30608strings[1932] = str->add(strings[1932]);
30609strings[5290] = str->add("sel");
30610strings[1932] = str->add(strings[1932]);
30611strings[5290] = str->add(strings[5290]);
30612str->del(strings[1932]);
30613str->del(strings[5285]);
30614str->del(strings[5286]);
30615str->del(strings[5287]);
30616str->del(strings[1932]);
30617str->del(strings[5288]);
30618str->del(strings[5286]);
30619str->del(strings[5289]);
30620str->del(strings[1932]);
30621str->del(strings[5290]);
30622str->del(strings[1932]);
30623str->del(strings[5290]);
30624strings[5291] = str->add("e,action,mouse,move");
30625strings[5292] = str->add("e");
30626str->del(strings[5291]);
30627str->del(strings[5292]);
30628strings[5293] = str->add("e,action,mouse,move");
30629strings[5294] = str->add("e");
30630str->del(strings[5293]);
30631str->del(strings[5294]);
30632strings[5295] = str->add("e,action,mouse,move");
30633strings[5296] = str->add("e");
30634str->del(strings[5295]);
30635str->del(strings[5296]);
30636str->del(strings[7]);
30637str->del(strings[2257]);
30638strings[7] = str->add(strings[7]);
30639strings[2270] = str->add(strings[2270]);
30640strings[5297] = str->add("e,action,mouse,move");
30641strings[5298] = str->add("e");
30642str->del(strings[5297]);
30643str->del(strings[5298]);
30644strings[5299] = str->add("e,action,mouse,move");
30645strings[5300] = str->add("e");
30646str->del(strings[5299]);
30647str->del(strings[5300]);
30648strings[5301] = str->add("e,action,mouse,move");
30649strings[5302] = str->add("e");
30650str->del(strings[5301]);
30651str->del(strings[5302]);
30652strings[5303] = str->add("e,action,mouse,move");
30653strings[5304] = str->add("e");
30654str->del(strings[5303]);
30655str->del(strings[5304]);
30656strings[5305] = str->add("e,action,mouse,move");
30657strings[5306] = str->add("e");
30658str->del(strings[5305]);
30659str->del(strings[5306]);
30660strings[5307] = str->add("e,action,mouse,move");
30661strings[5308] = str->add("e");
30662str->del(strings[5307]);
30663str->del(strings[5308]);
30664strings[5309] = str->add("program,start");
30665strings[5310] = str->add("go_active21");
30666strings[1932] = str->add(strings[1932]);
30667strings[5310] = str->add(strings[5310]);
30668strings[5309] = str->add(strings[5309]);
30669strings[5311] = str->add("go_activeb21");
30670strings[5309] = str->add(strings[5309]);
30671strings[5312] = str->add("go_active9");
30672strings[1932] = str->add(strings[1932]);
30673strings[5312] = str->add(strings[5312]);
30674strings[5309] = str->add(strings[5309]);
30675strings[5313] = str->add("go_activeb9");
30676str->del(strings[5309]);
30677str->del(strings[5310]);
30678str->del(strings[1932]);
30679str->del(strings[5310]);
30680str->del(strings[5309]);
30681str->del(strings[5311]);
30682str->del(strings[5309]);
30683str->del(strings[5312]);
30684str->del(strings[1932]);
30685str->del(strings[5312]);
30686str->del(strings[5309]);
30687str->del(strings[5313]);
30688str->del(strings[7]);
30689str->del(strings[2270]);
30690strings[7] = str->add(strings[7]);
30691strings[2276] = str->add(strings[2276]);
30692str->del(strings[7]);
30693str->del(strings[2276]);
30694strings[7] = str->add(strings[7]);
30695strings[3259] = str->add(strings[3259]);
30696strings[1932] = str->add(strings[1932]);
30697strings[5314] = str->add("go_activec1");
30698strings[5315] = str->add("program,start");
30699strings[5316] = str->add("go_activeb1");
30700strings[1932] = str->add(strings[1932]);
30701strings[5317] = str->add("go_activec29");
30702strings[5315] = str->add(strings[5315]);
30703strings[5318] = str->add("go_activeb29");
30704strings[1932] = str->add(strings[1932]);
30705strings[5319] = str->add("go_activeb23");
30706strings[5315] = str->add(strings[5315]);
30707strings[5320] = str->add("go_activec23");
30708strings[1932] = str->add(strings[1932]);
30709strings[5321] = str->add("go_activeb7");
30710strings[5315] = str->add(strings[5315]);
30711strings[5322] = str->add("go_activec7");
30712str->del(strings[1932]);
30713str->del(strings[5314]);
30714str->del(strings[5315]);
30715str->del(strings[5316]);
30716str->del(strings[1932]);
30717str->del(strings[5317]);
30718str->del(strings[5315]);
30719str->del(strings[5318]);
30720str->del(strings[1932]);
30721str->del(strings[5319]);
30722str->del(strings[5315]);
30723str->del(strings[5320]);
30724str->del(strings[1932]);
30725str->del(strings[5321]);
30726str->del(strings[5315]);
30727str->del(strings[5322]);
30728strings[5323] = str->add("e,action,mouse,move");
30729strings[5324] = str->add("e");
30730str->del(strings[5323]);
30731str->del(strings[5324]);
30732strings[5325] = str->add("e,action,mouse,move");
30733strings[5326] = str->add("e");
30734str->del(strings[5325]);
30735str->del(strings[5326]);
30736str->del(strings[7]);
30737str->del(strings[3259]);
30738strings[7] = str->add(strings[7]);
30739strings[2292] = str->add(strings[2292]);
30740strings[5327] = str->add("e,action,mouse,move");
30741strings[5328] = str->add("e");
30742str->del(strings[5327]);
30743str->del(strings[5328]);
30744strings[5329] = str->add("e,action,mouse,move");
30745strings[5330] = str->add("e");
30746str->del(strings[5329]);
30747str->del(strings[5330]);
30748strings[5331] = str->add("e,action,mouse,move");
30749strings[5332] = str->add("e");
30750str->del(strings[5331]);
30751str->del(strings[5332]);
30752strings[5333] = str->add("e,action,mouse,move");
30753strings[5334] = str->add("e");
30754str->del(strings[5333]);
30755str->del(strings[5334]);
30756strings[5335] = str->add("e,action,mouse,move");
30757strings[5336] = str->add("e");
30758str->del(strings[5335]);
30759str->del(strings[5336]);
30760str->del(strings[7]);
30761str->del(strings[2292]);
30762strings[7] = str->add(strings[7]);
30763strings[2310] = str->add(strings[2310]);
30764strings[5337] = str->add("e,action,mouse,move");
30765strings[5338] = str->add("e");
30766str->del(strings[5337]);
30767str->del(strings[5338]);
30768strings[5339] = str->add("e,action,mouse,move");
30769strings[5340] = str->add("e");
30770str->del(strings[5339]);
30771str->del(strings[5340]);
30772strings[5341] = str->add("e,action,mouse,move");
30773strings[5342] = str->add("e");
30774str->del(strings[5341]);
30775str->del(strings[5342]);
30776str->del(strings[7]);
30777str->del(strings[2310]);
30778strings[7] = str->add(strings[7]);
30779strings[3279] = str->add(strings[3279]);
30780strings[5343] = str->add("e,action,mouse,move");
30781strings[5344] = str->add("e");
30782strings[5345] = str->add("e,state,unselected");
30783strings[5344] = str->add(strings[5344]);
30784strings[5345] = str->add(strings[5345]);
30785strings[5344] = str->add(strings[5344]);
30786strings[5345] = str->add(strings[5345]);
30787strings[5344] = str->add(strings[5344]);
30788strings[5345] = str->add(strings[5345]);
30789strings[5344] = str->add(strings[5344]);
30790strings[5345] = str->add(strings[5345]);
30791strings[5344] = str->add(strings[5344]);
30792strings[5345] = str->add(strings[5345]);
30793strings[5344] = str->add(strings[5344]);
30794str->del(strings[5343]);
30795str->del(strings[5344]);
30796strings[5346] = str->add("program,start");
30797strings[5347] = str->add("unsel");
30798str->del(strings[5345]);
30799str->del(strings[5344]);
30800str->del(strings[5345]);
30801str->del(strings[5344]);
30802strings[5346] = str->add(strings[5346]);
30803strings[5347] = str->add(strings[5347]);
30804str->del(strings[5345]);
30805str->del(strings[5344]);
30806strings[5346] = str->add(strings[5346]);
30807strings[5347] = str->add(strings[5347]);
30808strings[1932] = str->add(strings[1932]);
30809strings[5347] = str->add(strings[5347]);
30810str->del(strings[5345]);
30811str->del(strings[5344]);
30812str->del(strings[5345]);
30813str->del(strings[5344]);
30814str->del(strings[5345]);
30815str->del(strings[5344]);
30816str->del(strings[5346]);
30817str->del(strings[5347]);
30818str->del(strings[5346]);
30819str->del(strings[5347]);
30820str->del(strings[5346]);
30821str->del(strings[5347]);
30822str->del(strings[1932]);
30823str->del(strings[5347]);
30824str->del(strings[64]);
30825str->del(strings[3021]);
30826strings[64] = str->add(strings[64]);
30827strings[2913] = str->add(strings[2913]);
30828strings[1932] = str->add(strings[1932]);
30829strings[5348] = str->add("go_activec28");
30830strings[5349] = str->add("program,start");
30831strings[5350] = str->add("go_activeb28");
30832strings[1932] = str->add(strings[1932]);
30833strings[5351] = str->add("go_activec2");
30834strings[5349] = str->add(strings[5349]);
30835strings[5352] = str->add("go_activeb2");
30836strings[1932] = str->add(strings[1932]);
30837strings[5353] = str->add("go_activeb22");
30838strings[5349] = str->add(strings[5349]);
30839strings[5354] = str->add("go_activec22");
30840strings[1932] = str->add(strings[1932]);
30841strings[5355] = str->add("go_activeb8");
30842strings[5349] = str->add(strings[5349]);
30843strings[5356] = str->add("go_activec8");
30844str->del(strings[1932]);
30845str->del(strings[5348]);
30846str->del(strings[5349]);
30847str->del(strings[5350]);
30848str->del(strings[1932]);
30849str->del(strings[5351]);
30850str->del(strings[5349]);
30851str->del(strings[5352]);
30852str->del(strings[1932]);
30853str->del(strings[5353]);
30854str->del(strings[5349]);
30855str->del(strings[5354]);
30856str->del(strings[1932]);
30857str->del(strings[5355]);
30858str->del(strings[5349]);
30859str->del(strings[5356]);
30860strings[5357] = str->add("e,action,mouse,move");
30861strings[5358] = str->add("e");
30862str->del(strings[5357]);
30863str->del(strings[5358]);
30864strings[5359] = str->add("e,action,mouse,move");
30865strings[5360] = str->add("e");
30866str->del(strings[5359]);
30867str->del(strings[5360]);
30868str->del(strings[7]);
30869str->del(strings[3279]);
30870strings[7] = str->add(strings[7]);
30871strings[2320] = str->add(strings[2320]);
30872strings[5361] = str->add("e,action,mouse,move");
30873strings[5362] = str->add("e");
30874str->del(strings[5361]);
30875str->del(strings[5362]);
30876strings[1932] = str->add(strings[1932]);
30877strings[5363] = str->add("unsel");
30878str->del(strings[1932]);
30879str->del(strings[5363]);
30880str->del(strings[7]);
30881str->del(strings[2320]);
30882strings[7] = str->add(strings[7]);
30883strings[2330] = str->add(strings[2330]);
30884str->del(strings[7]);
30885str->del(strings[2330]);
30886strings[7] = str->add(strings[7]);
30887strings[2343] = str->add(strings[2343]);
30888strings[1932] = str->add(strings[1932]);
30889strings[5364] = str->add("go_activeb21");
30890strings[5365] = str->add("program,start");
30891strings[5366] = str->add("go_activec21");
30892strings[1932] = str->add(strings[1932]);
30893strings[5367] = str->add("go_activeb9");
30894strings[5365] = str->add(strings[5365]);
30895strings[5368] = str->add("go_activec9");
30896str->del(strings[1932]);
30897str->del(strings[5364]);
30898str->del(strings[5365]);
30899str->del(strings[5366]);
30900str->del(strings[1932]);
30901str->del(strings[5367]);
30902str->del(strings[5365]);
30903str->del(strings[5368]);
30904strings[5369] = str->add("e,action,mouse,move");
30905strings[5370] = str->add("e");
30906str->del(strings[5369]);
30907str->del(strings[5370]);
30908strings[5371] = str->add("e,action,mouse,move");
30909strings[5372] = str->add("e");
30910str->del(strings[5371]);
30911str->del(strings[5372]);
30912strings[1932] = str->add(strings[1932]);
30913strings[5373] = str->add("go_activec27");
30914strings[5374] = str->add("program,start");
30915strings[5375] = str->add("go_activeb27");
30916strings[1932] = str->add(strings[1932]);
30917strings[5376] = str->add("go_activec3");
30918strings[5374] = str->add(strings[5374]);
30919strings[5377] = str->add("go_activeb3");
30920str->del(strings[1932]);
30921str->del(strings[5373]);
30922str->del(strings[5374]);
30923str->del(strings[5375]);
30924str->del(strings[1932]);
30925str->del(strings[5376]);
30926str->del(strings[5374]);
30927str->del(strings[5377]);
30928str->del(strings[7]);
30929str->del(strings[2343]);
30930strings[7] = str->add(strings[7]);
30931strings[2353] = str->add(strings[2353]);
30932strings[5378] = str->add("e,action,mouse,move");
30933strings[5379] = str->add("e");
30934str->del(strings[5378]);
30935str->del(strings[5379]);
30936strings[5380] = str->add("e,action,mouse,move");
30937strings[5381] = str->add("e");
30938str->del(strings[5380]);
30939str->del(strings[5381]);
30940strings[5382] = str->add("e,action,mouse,move");
30941strings[5383] = str->add("e");
30942strings[5384] = str->add("e,state,selected");
30943strings[5383] = str->add(strings[5383]);
30944strings[5384] = str->add(strings[5384]);
30945strings[5383] = str->add(strings[5383]);
30946strings[5384] = str->add(strings[5384]);
30947strings[5383] = str->add(strings[5383]);
30948strings[5384] = str->add(strings[5384]);
30949strings[5383] = str->add(strings[5383]);
30950strings[5384] = str->add(strings[5384]);
30951strings[5383] = str->add(strings[5383]);
30952strings[5384] = str->add(strings[5384]);
30953strings[5383] = str->add(strings[5383]);
30954strings[2224] = str->add(strings[2224]);
30955strings[469] = str->add(strings[469]);
30956strings[2688] = str->add(strings[2688]);
30957strings[4] = str->add(strings[4]);
30958strings[469] = str->add(strings[469]);
30959strings[2685] = str->add(strings[2685]);
30960strings[1925] = str->add(strings[1925]);
30961strings[1926] = str->add(strings[1926]);
30962strings[3083] = str->add(strings[3083]);
30963strings[2494] = str->add(strings[2494]);
30964strings[469] = str->add(strings[469]);
30965strings[2711] = str->add(strings[2711]);
30966strings[2514] = str->add(strings[2514]);
30967strings[469] = str->add(strings[469]);
30968strings[2680] = str->add(strings[2680]);
30969strings[2536] = str->add(strings[2536]);
30970strings[469] = str->add(strings[469]);
30971strings[2713] = str->add(strings[2713]);
30972str->del(strings[5382]);
30973str->del(strings[5383]);
30974strings[5385] = str->add("program,start");
30975strings[5386] = str->add("sel");
30976str->del(strings[5384]);
30977str->del(strings[5383]);
30978str->del(strings[5384]);
30979str->del(strings[5383]);
30980strings[5385] = str->add(strings[5385]);
30981strings[5386] = str->add(strings[5386]);
30982str->del(strings[5384]);
30983str->del(strings[5383]);
30984strings[5385] = str->add(strings[5385]);
30985strings[5386] = str->add(strings[5386]);
30986strings[1932] = str->add(strings[1932]);
30987strings[5386] = str->add(strings[5386]);
30988str->del(strings[5384]);
30989str->del(strings[5383]);
30990str->del(strings[5384]);
30991str->del(strings[5383]);
30992str->del(strings[5384]);
30993str->del(strings[5383]);
30994str->del(strings[5385]);
30995str->del(strings[5386]);
30996str->del(strings[5385]);
30997str->del(strings[5386]);
30998str->del(strings[5385]);
30999str->del(strings[5386]);
31000str->del(strings[1932]);
31001str->del(strings[5386]);
31002strings[361] = str->add(strings[361]);
31003strings[362] = str->add(strings[362]);
31004strings[361] = str->add(strings[361]);
31005str->del(strings[361]);
31006strings[362] = str->add(strings[362]);
31007str->del(strings[362]);
31008strings[5387] = str->add("resize");
31009str->del(strings[5387]);
31010strings[64] = str->add(strings[64]);
31011strings[2581] = str->add(strings[2581]);
31012strings[64] = str->add(strings[64]);
31013strings[5388] = str->add("load");
31014strings[1841] = str->add(strings[1841]);
31015strings[64] = str->add(strings[64]);
31016strings[1949] = str->add(strings[1949]);
31017strings[64] = str->add(strings[64]);
31018strings[1880] = str->add(strings[1880]);
31019strings[64] = str->add(strings[64]);
31020strings[1876] = str->add(strings[1876]);
31021str->del(strings[64]);
31022strings[379] = str->add(strings[379]);
31023strings[1842] = str->add(strings[1842]);
31024strings[1842] = str->add(strings[1842]);
31025strings[64] = str->add(strings[64]);
31026strings[1874] = str->add(strings[1874]);
31027strings[64] = str->add(strings[64]);
31028strings[2583] = str->add(strings[2583]);
31029strings[5388] = str->add(strings[5388]);
31030strings[1841] = str->add(strings[1841]);
31031strings[64] = str->add(strings[64]);
31032strings[2584] = str->add(strings[2584]);
31033strings[5388] = str->add(strings[5388]);
31034strings[1841] = str->add(strings[1841]);
31035strings[469] = str->add(strings[469]);
31036strings[2688] = str->add(strings[2688]);
31037strings[5388] = str->add(strings[5388]);
31038strings[469] = str->add(strings[469]);
31039strings[2902] = str->add(strings[2902]);
31040strings[1841] = str->add(strings[1841]);
31041strings[5389] = str->add("resize");
31042strings[5389] = str->add(strings[5389]);
31043strings[64] = str->add(strings[64]);
31044strings[2585] = str->add(strings[2585]);
31045strings[64] = str->add(strings[64]);
31046strings[5388] = str->add(strings[5388]);
31047strings[2224] = str->add(strings[2224]);
31048strings[1841] = str->add(strings[1841]);
31049str->del(strings[64]);
31050strings[385] = str->add(strings[385]);
31051strings[2224] = str->add(strings[2224]);
31052strings[64] = str->add(strings[64]);
31053strings[2886] = str->add(strings[2886]);
31054strings[64] = str->add(strings[64]);
31055strings[2888] = str->add(strings[2888]);
31056strings[64] = str->add(strings[64]);
31057strings[2582] = str->add(strings[2582]);
31058strings[5388] = str->add(strings[5388]);
31059strings[1841] = str->add(strings[1841]);
31060strings[64] = str->add(strings[64]);
31061strings[2583] = str->add(strings[2583]);
31062strings[5388] = str->add(strings[5388]);
31063strings[1841] = str->add(strings[1841]);
31064strings[64] = str->add(strings[64]);
31065strings[2584] = str->add(strings[2584]);
31066strings[5388] = str->add(strings[5388]);
31067strings[1841] = str->add(strings[1841]);
31068strings[469] = str->add(strings[469]);
31069strings[2685] = str->add(strings[2685]);
31070strings[5388] = str->add(strings[5388]);
31071strings[469] = str->add(strings[469]);
31072strings[3089] = str->add(strings[3089]);
31073strings[1841] = str->add(strings[1841]);
31074strings[5389] = str->add(strings[5389]);
31075strings[5389] = str->add(strings[5389]);
31076strings[64] = str->add(strings[64]);
31077strings[2585] = str->add(strings[2585]);
31078strings[64] = str->add(strings[64]);
31079strings[5388] = str->add(strings[5388]);
31080strings[4] = str->add(strings[4]);
31081strings[1841] = str->add(strings[1841]);
31082str->del(strings[64]);
31083strings[385] = str->add(strings[385]);
31084strings[4] = str->add(strings[4]);
31085strings[64] = str->add(strings[64]);
31086strings[2886] = str->add(strings[2886]);
31087strings[64] = str->add(strings[64]);
31088strings[2888] = str->add(strings[2888]);
31089strings[64] = str->add(strings[64]);
31090strings[2583] = str->add(strings[2583]);
31091strings[5388] = str->add(strings[5388]);
31092strings[1841] = str->add(strings[1841]);
31093strings[64] = str->add(strings[64]);
31094strings[2584] = str->add(strings[2584]);
31095strings[5388] = str->add(strings[5388]);
31096strings[1841] = str->add(strings[1841]);
31097strings[1926] = str->add(strings[1926]);
31098strings[3083] = str->add(strings[3083]);
31099strings[5388] = str->add(strings[5388]);
31100strings[1926] = str->add(strings[1926]);
31101strings[1552] = str->add(strings[1552]);
31102strings[1841] = str->add(strings[1841]);
31103strings[5389] = str->add(strings[5389]);
31104strings[5389] = str->add(strings[5389]);
31105strings[64] = str->add(strings[64]);
31106strings[2585] = str->add(strings[2585]);
31107strings[64] = str->add(strings[64]);
31108strings[5388] = str->add(strings[5388]);
31109strings[1925] = str->add(strings[1925]);
31110strings[1841] = str->add(strings[1841]);
31111str->del(strings[64]);
31112strings[385] = str->add(strings[385]);
31113strings[1925] = str->add(strings[1925]);
31114strings[64] = str->add(strings[64]);
31115strings[2886] = str->add(strings[2886]);
31116strings[64] = str->add(strings[64]);
31117strings[2888] = str->add(strings[2888]);
31118strings[64] = str->add(strings[64]);
31119strings[2583] = str->add(strings[2583]);
31120strings[5388] = str->add(strings[5388]);
31121strings[1841] = str->add(strings[1841]);
31122strings[64] = str->add(strings[64]);
31123strings[2584] = str->add(strings[2584]);
31124strings[5388] = str->add(strings[5388]);
31125strings[1841] = str->add(strings[1841]);
31126strings[469] = str->add(strings[469]);
31127strings[2711] = str->add(strings[2711]);
31128strings[5388] = str->add(strings[5388]);
31129strings[469] = str->add(strings[469]);
31130strings[3092] = str->add(strings[3092]);
31131strings[1841] = str->add(strings[1841]);
31132strings[5389] = str->add(strings[5389]);
31133strings[5389] = str->add(strings[5389]);
31134strings[64] = str->add(strings[64]);
31135strings[2585] = str->add(strings[2585]);
31136strings[64] = str->add(strings[64]);
31137strings[5388] = str->add(strings[5388]);
31138strings[2494] = str->add(strings[2494]);
31139strings[1841] = str->add(strings[1841]);
31140str->del(strings[64]);
31141strings[385] = str->add(strings[385]);
31142strings[2494] = str->add(strings[2494]);
31143strings[64] = str->add(strings[64]);
31144strings[2886] = str->add(strings[2886]);
31145strings[64] = str->add(strings[64]);
31146strings[2888] = str->add(strings[2888]);
31147strings[64] = str->add(strings[64]);
31148strings[2583] = str->add(strings[2583]);
31149strings[5388] = str->add(strings[5388]);
31150strings[1841] = str->add(strings[1841]);
31151strings[64] = str->add(strings[64]);
31152strings[2584] = str->add(strings[2584]);
31153strings[5388] = str->add(strings[5388]);
31154strings[1841] = str->add(strings[1841]);
31155strings[469] = str->add(strings[469]);
31156strings[2680] = str->add(strings[2680]);
31157strings[5388] = str->add(strings[5388]);
31158strings[469] = str->add(strings[469]);
31159strings[3094] = str->add(strings[3094]);
31160strings[1841] = str->add(strings[1841]);
31161strings[5389] = str->add(strings[5389]);
31162strings[5389] = str->add(strings[5389]);
31163strings[64] = str->add(strings[64]);
31164strings[2585] = str->add(strings[2585]);
31165strings[64] = str->add(strings[64]);
31166strings[5388] = str->add(strings[5388]);
31167strings[2514] = str->add(strings[2514]);
31168strings[1841] = str->add(strings[1841]);
31169str->del(strings[64]);
31170strings[385] = str->add(strings[385]);
31171strings[2514] = str->add(strings[2514]);
31172strings[64] = str->add(strings[64]);
31173strings[2886] = str->add(strings[2886]);
31174strings[64] = str->add(strings[64]);
31175strings[2888] = str->add(strings[2888]);
31176strings[64] = str->add(strings[64]);
31177strings[2583] = str->add(strings[2583]);
31178strings[5388] = str->add(strings[5388]);
31179strings[1841] = str->add(strings[1841]);
31180strings[64] = str->add(strings[64]);
31181strings[2584] = str->add(strings[2584]);
31182strings[5388] = str->add(strings[5388]);
31183strings[1841] = str->add(strings[1841]);
31184strings[469] = str->add(strings[469]);
31185strings[2713] = str->add(strings[2713]);
31186strings[5388] = str->add(strings[5388]);
31187strings[469] = str->add(strings[469]);
31188strings[3096] = str->add(strings[3096]);
31189strings[1841] = str->add(strings[1841]);
31190strings[5389] = str->add(strings[5389]);
31191strings[5389] = str->add(strings[5389]);
31192strings[64] = str->add(strings[64]);
31193strings[2585] = str->add(strings[2585]);
31194strings[64] = str->add(strings[64]);
31195strings[5388] = str->add(strings[5388]);
31196strings[2536] = str->add(strings[2536]);
31197strings[1841] = str->add(strings[1841]);
31198str->del(strings[64]);
31199strings[385] = str->add(strings[385]);
31200strings[2536] = str->add(strings[2536]);
31201strings[64] = str->add(strings[64]);
31202strings[2886] = str->add(strings[2886]);
31203strings[64] = str->add(strings[64]);
31204strings[2888] = str->add(strings[2888]);
31205strings[5389] = str->add(strings[5389]);
31206strings[5389] = str->add(strings[5389]);
31207strings[5389] = str->add(strings[5389]);
31208strings[5389] = str->add(strings[5389]);
31209strings[5389] = str->add(strings[5389]);
31210strings[5389] = str->add(strings[5389]);
31211strings[5389] = str->add(strings[5389]);
31212strings[5389] = str->add(strings[5389]);
31213strings[5389] = str->add(strings[5389]);
31214strings[5389] = str->add(strings[5389]);
31215strings[5389] = str->add(strings[5389]);
31216strings[5389] = str->add(strings[5389]);
31217strings[5389] = str->add(strings[5389]);
31218strings[5389] = str->add(strings[5389]);
31219strings[5389] = str->add(strings[5389]);
31220strings[5389] = str->add(strings[5389]);
31221strings[5389] = str->add(strings[5389]);
31222strings[5389] = str->add(strings[5389]);
31223strings[5389] = str->add(strings[5389]);
31224strings[5389] = str->add(strings[5389]);
31225strings[1933] = str->add(strings[1933]);
31226str->del(strings[1933]);
31227str->del(strings[64]);
31228str->del(strings[2583]);
31229strings[1933] = str->add(strings[1933]);
31230str->del(strings[1933]);
31231str->del(strings[64]);
31232str->del(strings[2584]);
31233strings[1933] = str->add(strings[1933]);
31234str->del(strings[1933]);
31235str->del(strings[469]);
31236str->del(strings[2708]);
31237strings[1933] = str->add(strings[1933]);
31238str->del(strings[1933]);
31239str->del(strings[5146]);
31240str->del(strings[5146]);
31241str->del(strings[5146]);
31242str->del(strings[64]);
31243str->del(strings[2585]);
31244strings[1933] = str->add(strings[1933]);
31245str->del(strings[1933]);
31246str->del(strings[64]);
31247str->del(strings[2582]);
31248strings[1933] = str->add(strings[1933]);
31249str->del(strings[1933]);
31250str->del(strings[64]);
31251str->del(strings[2583]);
31252strings[1933] = str->add(strings[1933]);
31253str->del(strings[1933]);
31254str->del(strings[64]);
31255str->del(strings[2584]);
31256strings[1933] = str->add(strings[1933]);
31257str->del(strings[1933]);
31258str->del(strings[469]);
31259str->del(strings[2677]);
31260strings[1933] = str->add(strings[1933]);
31261str->del(strings[1933]);
31262str->del(strings[1726]);
31263str->del(strings[1726]);
31264str->del(strings[1726]);
31265str->del(strings[64]);
31266str->del(strings[2585]);
31267strings[1933] = str->add(strings[1933]);
31268str->del(strings[1933]);
31269str->del(strings[64]);
31270str->del(strings[2583]);
31271strings[1933] = str->add(strings[1933]);
31272str->del(strings[1933]);
31273str->del(strings[64]);
31274str->del(strings[2584]);
31275strings[1933] = str->add(strings[1933]);
31276str->del(strings[1933]);
31277str->del(strings[469]);
31278str->del(strings[2678]);
31279strings[1933] = str->add(strings[1933]);
31280str->del(strings[1933]);
31281str->del(strings[5147]);
31282str->del(strings[5147]);
31283str->del(strings[5147]);
31284str->del(strings[64]);
31285str->del(strings[2585]);
31286strings[1933] = str->add(strings[1933]);
31287str->del(strings[1933]);
31288str->del(strings[64]);
31289str->del(strings[2583]);
31290strings[1933] = str->add(strings[1933]);
31291str->del(strings[1933]);
31292str->del(strings[64]);
31293str->del(strings[2584]);
31294strings[1933] = str->add(strings[1933]);
31295str->del(strings[1933]);
31296str->del(strings[469]);
31297str->del(strings[2676]);
31298strings[1933] = str->add(strings[1933]);
31299str->del(strings[1933]);
31300str->del(strings[1724]);
31301str->del(strings[1724]);
31302str->del(strings[1724]);
31303str->del(strings[64]);
31304str->del(strings[2585]);
31305strings[1933] = str->add(strings[1933]);
31306str->del(strings[1933]);
31307str->del(strings[64]);
31308str->del(strings[2583]);
31309strings[1933] = str->add(strings[1933]);
31310str->del(strings[1933]);
31311str->del(strings[64]);
31312str->del(strings[2584]);
31313strings[1933] = str->add(strings[1933]);
31314str->del(strings[1933]);
31315str->del(strings[469]);
31316str->del(strings[2675]);
31317strings[1933] = str->add(strings[1933]);
31318str->del(strings[1933]);
31319str->del(strings[1722]);
31320str->del(strings[1722]);
31321str->del(strings[1722]);
31322str->del(strings[64]);
31323str->del(strings[2585]);
31324strings[1933] = str->add(strings[1933]);
31325str->del(strings[1933]);
31326str->del(strings[64]);
31327str->del(strings[2582]);
31328strings[1933] = str->add(strings[1933]);
31329str->del(strings[1933]);
31330str->del(strings[64]);
31331str->del(strings[2583]);
31332strings[1933] = str->add(strings[1933]);
31333str->del(strings[1933]);
31334str->del(strings[64]);
31335str->del(strings[2584]);
31336strings[1933] = str->add(strings[1933]);
31337str->del(strings[1933]);
31338str->del(strings[469]);
31339str->del(strings[2674]);
31340strings[1933] = str->add(strings[1933]);
31341str->del(strings[1933]);
31342str->del(strings[5148]);
31343str->del(strings[5148]);
31344str->del(strings[5148]);
31345str->del(strings[64]);
31346str->del(strings[2585]);
31347strings[1933] = str->add(strings[1933]);
31348str->del(strings[1933]);
31349str->del(strings[1842]);
31350str->del(strings[1842]);
31351str->del(strings[64]);
31352str->del(strings[2581]);
31353str->del(strings[64]);
31354str->del(strings[2886]);
31355str->del(strings[64]);
31356str->del(strings[2888]);
31357str->del(strings[469]);
31358str->del(strings[3008]);
31359str->del(strings[5146]);
31360str->del(strings[385]);
31361str->del(strings[64]);
31362str->del(strings[2915]);
31363str->del(strings[64]);
31364str->del(strings[2886]);
31365str->del(strings[64]);
31366str->del(strings[2888]);
31367str->del(strings[469]);
31368str->del(strings[3011]);
31369str->del(strings[1726]);
31370str->del(strings[385]);
31371str->del(strings[64]);
31372str->del(strings[2886]);
31373str->del(strings[64]);
31374str->del(strings[2888]);
31375str->del(strings[469]);
31376str->del(strings[3013]);
31377str->del(strings[5147]);
31378str->del(strings[385]);
31379str->del(strings[64]);
31380str->del(strings[2886]);
31381str->del(strings[64]);
31382str->del(strings[2888]);
31383str->del(strings[469]);
31384str->del(strings[3015]);
31385str->del(strings[1724]);
31386str->del(strings[385]);
31387str->del(strings[64]);
31388str->del(strings[2886]);
31389str->del(strings[64]);
31390str->del(strings[2888]);
31391str->del(strings[469]);
31392str->del(strings[3017]);
31393str->del(strings[1722]);
31394str->del(strings[385]);
31395str->del(strings[64]);
31396str->del(strings[2915]);
31397str->del(strings[64]);
31398str->del(strings[2886]);
31399str->del(strings[64]);
31400str->del(strings[2888]);
31401str->del(strings[469]);
31402str->del(strings[3019]);
31403str->del(strings[5148]);
31404str->del(strings[385]);
31405str->del(strings[64]);
31406str->del(strings[1949]);
31407str->del(strings[64]);
31408str->del(strings[1880]);
31409str->del(strings[64]);
31410str->del(strings[1876]);
31411str->del(strings[379]);
31412str->del(strings[64]);
31413str->del(strings[1874]);
31414str->del(strings[361]);
31415str->del(strings[362]);
31416str->del(strings[1842]);
31417strings[1842] = str->add(strings[1842]);
31418str->del(strings[1842]);
31419strings[1842] = str->add(strings[1842]);
31420strings[5389] = str->add(strings[5389]);
31421strings[2224] = str->add(strings[2224]);
31422strings[2224] = str->add(strings[2224]);
31423strings[64] = str->add(strings[64]);
31424strings[2915] = str->add(strings[2915]);
31425strings[5389] = str->add(strings[5389]);
31426strings[4] = str->add(strings[4]);
31427strings[4] = str->add(strings[4]);
31428strings[5389] = str->add(strings[5389]);
31429strings[1925] = str->add(strings[1925]);
31430strings[1925] = str->add(strings[1925]);
31431strings[5389] = str->add(strings[5389]);
31432strings[2494] = str->add(strings[2494]);
31433strings[2494] = str->add(strings[2494]);
31434strings[5389] = str->add(strings[5389]);
31435strings[2514] = str->add(strings[2514]);
31436strings[2514] = str->add(strings[2514]);
31437strings[5389] = str->add(strings[5389]);
31438strings[2536] = str->add(strings[2536]);
31439strings[2536] = str->add(strings[2536]);
31440str->del(strings[64]);
31441str->del(strings[2913]);
31442strings[64] = str->add(strings[64]);
31443strings[3021] = str->add(strings[3021]);
31444strings[5390] = str->add("font");
31445strings[5391] = str->add("font_fallbacks");
31446strings[5392] = str->add("font_size");
31447strings[5393] = str->add("font_source");
31448strings[5394] = str->add("color");
31449strings[5395] = str->add("underline_color");
31450strings[5396] = str->add("underline2_color");
31451strings[5397] = str->add("outline_color");
31452strings[5398] = str->add("shadow_color");
31453strings[5399] = str->add("glow_color");
31454strings[5400] = str->add("glow2_color");
31455strings[5401] = str->add("backing_color");
31456strings[5402] = str->add("strikethrough_color");
31457strings[5403] = str->add("align");
31458strings[5404] = str->add("valign");
31459strings[5405] = str->add("wrap");
31460strings[5406] = str->add("left_margin");
31461strings[5407] = str->add("right_margin");
31462strings[5408] = str->add("underline");
31463strings[5409] = str->add("strikethrough");
31464strings[5410] = str->add("backing");
31465strings[5411] = str->add("style");
31466strings[5412] = str->add("tabstops");
31467strings[5403] = str->add(strings[5403]);
31468strings[5413] = str->add("center");
31469str->del(strings[5403]);
31470str->del(strings[5413]);
31471strings[5394] = str->add(strings[5394]);
31472strings[5414] = str->add("#000");
31473str->del(strings[5394]);
31474str->del(strings[5414]);
31475strings[5411] = str->add(strings[5411]);
31476strings[5415] = str->add("shadow");
31477str->del(strings[5411]);
31478str->del(strings[5415]);
31479strings[5398] = str->add(strings[5398]);
31480strings[5416] = str->add("#ffffff80");
31481str->del(strings[5398]);
31482str->del(strings[5416]);
31483strings[5405] = str->add(strings[5405]);
31484strings[5417] = str->add("word");
31485str->del(strings[5405]);
31486str->del(strings[5417]);
31487strings[5393] = str->add(strings[5393]);
31488strings[469] = str->add(strings[469]);
31489strings[469] = str->add(strings[469]);
31490str->del(strings[5393]);
31491str->del(strings[469]);
31492strings[5392] = str->add(strings[5392]);
31493strings[5418] = str->add("10.000000");
31494str->del(strings[5392]);
31495str->del(strings[5418]);
31496strings[5390] = str->add(strings[5390]);
31497strings[470] = str->add(strings[470]);
31498strings[470] = str->add(strings[470]);
31499str->del(strings[5390]);
31500str->del(strings[470]);
31501strings[382] = str->add(strings[382]);
31502strings[382] = str->add(strings[382]);
31503strings[382] = str->add(strings[382]);
31504strings[382] = str->add(strings[382]);
31505strings[382] = str->add(strings[382]);
31506strings[382] = str->add(strings[382]);
31507strings[470] = str->add(strings[470]);
31508strings[469] = str->add(strings[469]);
31509strings[5411] = str->add(strings[5411]);
31510strings[5419] = str->add("glow");
31511str->del(strings[5411]);
31512str->del(strings[5419]);
31513strings[5394] = str->add(strings[5394]);
31514strings[5420] = str->add("#fff");
31515str->del(strings[5394]);
31516str->del(strings[5420]);
31517strings[5400] = str->add(strings[5400]);
31518strings[5421] = str->add("#fe87");
31519str->del(strings[5400]);
31520str->del(strings[5421]);
31521strings[5399] = str->add(strings[5399]);
31522strings[5422] = str->add("#fa14");
31523str->del(strings[5399]);
31524str->del(strings[5422]);
31525strings[5390] = str->add(strings[5390]);
31526strings[471] = str->add(strings[471]);
31527str->del(strings[470]);
31528strings[471] = str->add(strings[471]);
31529str->del(strings[5390]);
31530str->del(strings[471]);
31531strings[470] = str->add(strings[470]);
31532strings[469] = str->add(strings[469]);
31533strings[5411] = str->add(strings[5411]);
31534strings[5423] = str->add("glow");
31535str->del(strings[5411]);
31536str->del(strings[5423]);
31537strings[5394] = str->add(strings[5394]);
31538strings[5424] = str->add("#fff");
31539str->del(strings[5394]);
31540str->del(strings[5424]);
31541strings[5400] = str->add(strings[5400]);
31542strings[5425] = str->add("#fe87");
31543str->del(strings[5400]);
31544str->del(strings[5425]);
31545strings[5399] = str->add(strings[5399]);
31546strings[5426] = str->add("#fa14");
31547str->del(strings[5399]);
31548str->del(strings[5426]);
31549strings[5390] = str->add(strings[5390]);
31550strings[471] = str->add(strings[471]);
31551str->del(strings[470]);
31552strings[471] = str->add(strings[471]);
31553str->del(strings[5390]);
31554str->del(strings[471]);
31555str->del(strings[5390]);
31556str->del(strings[5391]);
31557str->del(strings[5392]);
31558str->del(strings[5393]);
31559str->del(strings[5394]);
31560str->del(strings[5395]);
31561str->del(strings[5396]);
31562str->del(strings[5397]);
31563str->del(strings[5398]);
31564str->del(strings[5399]);
31565str->del(strings[5400]);
31566str->del(strings[5401]);
31567str->del(strings[5402]);
31568str->del(strings[5403]);
31569str->del(strings[5404]);
31570str->del(strings[5405]);
31571str->del(strings[5406]);
31572str->del(strings[5407]);
31573str->del(strings[5408]);
31574str->del(strings[5409]);
31575str->del(strings[5410]);
31576str->del(strings[5411]);
31577str->del(strings[5412]);
31578str->del(strings[382]);
31579str->del(strings[382]);
31580str->del(strings[382]);
31581str->del(strings[382]);
31582str->del(strings[382]);
31583str->del(strings[382]);
31584str->del(strings[471]);
31585str->del(strings[469]);
31586str->del(strings[470]);
31587str->del(strings[469]);
31588str->del(strings[471]);
31589str->del(strings[469]);
31590strings[5427] = str->add("font");
31591strings[5428] = str->add("font_fallbacks");
31592strings[5429] = str->add("font_size");
31593strings[5430] = str->add("font_source");
31594strings[5431] = str->add("color");
31595strings[5432] = str->add("underline_color");
31596strings[5433] = str->add("underline2_color");
31597strings[5434] = str->add("outline_color");
31598strings[5435] = str->add("shadow_color");
31599strings[5436] = str->add("glow_color");
31600strings[5437] = str->add("glow2_color");
31601strings[5438] = str->add("backing_color");
31602strings[5439] = str->add("strikethrough_color");
31603strings[5440] = str->add("align");
31604strings[5441] = str->add("valign");
31605strings[5442] = str->add("wrap");
31606strings[5443] = str->add("left_margin");
31607strings[5444] = str->add("right_margin");
31608strings[5445] = str->add("underline");
31609strings[5446] = str->add("strikethrough");
31610strings[5447] = str->add("backing");
31611strings[5448] = str->add("style");
31612strings[5449] = str->add("tabstops");
31613strings[5440] = str->add(strings[5440]);
31614strings[5450] = str->add("center");
31615str->del(strings[5440]);
31616str->del(strings[5450]);
31617strings[5431] = str->add(strings[5431]);
31618strings[5451] = str->add("#000");
31619str->del(strings[5431]);
31620str->del(strings[5451]);
31621strings[5448] = str->add(strings[5448]);
31622strings[5452] = str->add("shadow");
31623str->del(strings[5448]);
31624str->del(strings[5452]);
31625strings[5435] = str->add(strings[5435]);
31626strings[5453] = str->add("#ffffff80");
31627str->del(strings[5435]);
31628str->del(strings[5453]);
31629strings[5442] = str->add(strings[5442]);
31630strings[5454] = str->add("word");
31631str->del(strings[5442]);
31632str->del(strings[5454]);
31633strings[5430] = str->add(strings[5430]);
31634strings[469] = str->add(strings[469]);
31635strings[469] = str->add(strings[469]);
31636str->del(strings[5430]);
31637str->del(strings[469]);
31638strings[5429] = str->add(strings[5429]);
31639strings[5455] = str->add("10.000000");
31640str->del(strings[5429]);
31641str->del(strings[5455]);
31642strings[5427] = str->add(strings[5427]);
31643strings[470] = str->add(strings[470]);
31644strings[470] = str->add(strings[470]);
31645str->del(strings[5427]);
31646str->del(strings[470]);
31647strings[470] = str->add(strings[470]);
31648strings[469] = str->add(strings[469]);
31649strings[5448] = str->add(strings[5448]);
31650strings[5456] = str->add("soft_shadow");
31651str->del(strings[5448]);
31652str->del(strings[5456]);
31653strings[5431] = str->add(strings[5431]);
31654strings[5457] = str->add("#fff");
31655str->del(strings[5431]);
31656str->del(strings[5457]);
31657strings[5435] = str->add(strings[5435]);
31658strings[5458] = str->add("#00000020");
31659str->del(strings[5435]);
31660str->del(strings[5458]);
31661strings[5429] = str->add(strings[5429]);
31662strings[5459] = str->add("12.000000");
31663str->del(strings[5429]);
31664str->del(strings[5459]);
31665strings[5427] = str->add(strings[5427]);
31666strings[471] = str->add(strings[471]);
31667str->del(strings[470]);
31668strings[471] = str->add(strings[471]);
31669str->del(strings[5427]);
31670str->del(strings[471]);
31671strings[382] = str->add(strings[382]);
31672strings[382] = str->add(strings[382]);
31673strings[382] = str->add(strings[382]);
31674strings[382] = str->add(strings[382]);
31675strings[382] = str->add(strings[382]);
31676strings[382] = str->add(strings[382]);
31677strings[382] = str->add(strings[382]);
31678strings[382] = str->add(strings[382]);
31679strings[382] = str->add(strings[382]);
31680strings[382] = str->add(strings[382]);
31681strings[382] = str->add(strings[382]);
31682strings[382] = str->add(strings[382]);
31683strings[382] = str->add(strings[382]);
31684strings[382] = str->add(strings[382]);
31685strings[382] = str->add(strings[382]);
31686strings[382] = str->add(strings[382]);
31687strings[382] = str->add(strings[382]);
31688strings[382] = str->add(strings[382]);
31689strings[382] = str->add(strings[382]);
31690strings[382] = str->add(strings[382]);
31691strings[382] = str->add(strings[382]);
31692strings[382] = str->add(strings[382]);
31693str->del(strings[5427]);
31694str->del(strings[5428]);
31695str->del(strings[5429]);
31696str->del(strings[5430]);
31697str->del(strings[5431]);
31698str->del(strings[5432]);
31699str->del(strings[5433]);
31700str->del(strings[5434]);
31701str->del(strings[5435]);
31702str->del(strings[5436]);
31703str->del(strings[5437]);
31704str->del(strings[5438]);
31705str->del(strings[5439]);
31706str->del(strings[5440]);
31707str->del(strings[5441]);
31708str->del(strings[5442]);
31709str->del(strings[5443]);
31710str->del(strings[5444]);
31711str->del(strings[5445]);
31712str->del(strings[5446]);
31713str->del(strings[5447]);
31714str->del(strings[5448]);
31715str->del(strings[5449]);
31716str->del(strings[471]);
31717str->del(strings[469]);
31718str->del(strings[382]);
31719str->del(strings[382]);
31720str->del(strings[382]);
31721str->del(strings[382]);
31722str->del(strings[382]);
31723str->del(strings[382]);
31724str->del(strings[382]);
31725str->del(strings[382]);
31726str->del(strings[382]);
31727str->del(strings[382]);
31728str->del(strings[382]);
31729str->del(strings[382]);
31730str->del(strings[382]);
31731str->del(strings[382]);
31732str->del(strings[382]);
31733str->del(strings[382]);
31734str->del(strings[382]);
31735str->del(strings[382]);
31736str->del(strings[382]);
31737str->del(strings[382]);
31738str->del(strings[382]);
31739str->del(strings[470]);
31740str->del(strings[469]);
31741str->del(strings[382]);
31742str->del(strings[5388]);
31743str->del(strings[1841]);
31744str->del(strings[5388]);
31745str->del(strings[1841]);
31746str->del(strings[5388]);
31747str->del(strings[1841]);
31748str->del(strings[5388]);
31749str->del(strings[1841]);
31750str->del(strings[5389]);
31751str->del(strings[5389]);
31752str->del(strings[5388]);
31753str->del(strings[1841]);
31754str->del(strings[5388]);
31755str->del(strings[1841]);
31756str->del(strings[5388]);
31757str->del(strings[1841]);
31758str->del(strings[5388]);
31759str->del(strings[1841]);
31760str->del(strings[5388]);
31761str->del(strings[1841]);
31762str->del(strings[5389]);
31763str->del(strings[5389]);
31764str->del(strings[5388]);
31765str->del(strings[1841]);
31766str->del(strings[5388]);
31767str->del(strings[1841]);
31768str->del(strings[5388]);
31769str->del(strings[1841]);
31770str->del(strings[5388]);
31771str->del(strings[1841]);
31772str->del(strings[5389]);
31773str->del(strings[5389]);
31774str->del(strings[5388]);
31775str->del(strings[1841]);
31776str->del(strings[5388]);
31777str->del(strings[1841]);
31778str->del(strings[5388]);
31779str->del(strings[1841]);
31780str->del(strings[5388]);
31781str->del(strings[1841]);
31782str->del(strings[5389]);
31783str->del(strings[5389]);
31784str->del(strings[5388]);
31785str->del(strings[1841]);
31786str->del(strings[5388]);
31787str->del(strings[1841]);
31788str->del(strings[5388]);
31789str->del(strings[1841]);
31790str->del(strings[5388]);
31791str->del(strings[1841]);
31792str->del(strings[5389]);
31793str->del(strings[5389]);
31794str->del(strings[5388]);
31795str->del(strings[1841]);
31796str->del(strings[5388]);
31797str->del(strings[1841]);
31798str->del(strings[5388]);
31799str->del(strings[1841]);
31800str->del(strings[5388]);
31801str->del(strings[1841]);
31802str->del(strings[5389]);
31803str->del(strings[5389]);
31804str->del(strings[5388]);
31805str->del(strings[1841]);
31806str->del(strings[5389]);
31807str->del(strings[5389]);
31808str->del(strings[5389]);
31809str->del(strings[5389]);
31810str->del(strings[5389]);
31811str->del(strings[5389]);
31812str->del(strings[5389]);
31813str->del(strings[5389]);
31814str->del(strings[5389]);
31815str->del(strings[5389]);
31816str->del(strings[5389]);
31817str->del(strings[5389]);
31818str->del(strings[5389]);
31819str->del(strings[5389]);
31820str->del(strings[5389]);
31821str->del(strings[5389]);
31822str->del(strings[5389]);
31823str->del(strings[5389]);
31824str->del(strings[5389]);
31825str->del(strings[5389]);
31826str->del(strings[5389]);
31827str->del(strings[5389]);
31828str->del(strings[5389]);
31829str->del(strings[5389]);
31830str->del(strings[5389]);
31831str->del(strings[5389]);
31832strings[5460] = str->add("e,action,mouse,move");
31833strings[5461] = str->add("e");
31834str->del(strings[5460]);
31835str->del(strings[5461]);
31836strings[1932] = str->add(strings[1932]);
31837strings[5462] = str->add("unsel");
31838str->del(strings[1932]);
31839str->del(strings[5462]);
31840strings[5463] = str->add("font");
31841strings[5464] = str->add("font_fallbacks");
31842strings[5465] = str->add("font_size");
31843strings[5466] = str->add("font_source");
31844strings[5467] = str->add("color");
31845strings[5468] = str->add("underline_color");
31846strings[5469] = str->add("underline2_color");
31847strings[5470] = str->add("outline_color");
31848strings[5471] = str->add("shadow_color");
31849strings[5472] = str->add("glow_color");
31850strings[5473] = str->add("glow2_color");
31851strings[5474] = str->add("backing_color");
31852strings[5475] = str->add("strikethrough_color");
31853strings[5476] = str->add("align");
31854strings[5477] = str->add("valign");
31855strings[5478] = str->add("wrap");
31856strings[5479] = str->add("left_margin");
31857strings[5480] = str->add("right_margin");
31858strings[5481] = str->add("underline");
31859strings[5482] = str->add("strikethrough");
31860strings[5483] = str->add("backing");
31861strings[5484] = str->add("style");
31862strings[5485] = str->add("tabstops");
31863strings[5476] = str->add(strings[5476]);
31864strings[5486] = str->add("center");
31865str->del(strings[5476]);
31866str->del(strings[5486]);
31867strings[5467] = str->add(strings[5467]);
31868strings[5487] = str->add("#000");
31869str->del(strings[5467]);
31870str->del(strings[5487]);
31871strings[5484] = str->add(strings[5484]);
31872strings[5488] = str->add("shadow");
31873str->del(strings[5484]);
31874str->del(strings[5488]);
31875strings[5471] = str->add(strings[5471]);
31876strings[5489] = str->add("#ffffff80");
31877str->del(strings[5471]);
31878str->del(strings[5489]);
31879strings[5478] = str->add(strings[5478]);
31880strings[5490] = str->add("word");
31881str->del(strings[5478]);
31882str->del(strings[5490]);
31883strings[5466] = str->add(strings[5466]);
31884strings[469] = str->add(strings[469]);
31885strings[469] = str->add(strings[469]);
31886str->del(strings[5466]);
31887str->del(strings[469]);
31888strings[5465] = str->add(strings[5465]);
31889strings[5491] = str->add("10.000000");
31890str->del(strings[5465]);
31891str->del(strings[5491]);
31892strings[5463] = str->add(strings[5463]);
31893strings[470] = str->add(strings[470]);
31894strings[470] = str->add(strings[470]);
31895str->del(strings[5463]);
31896str->del(strings[470]);
31897strings[470] = str->add(strings[470]);
31898strings[469] = str->add(strings[469]);
31899strings[5484] = str->add(strings[5484]);
31900strings[5492] = str->add("soft_shadow");
31901str->del(strings[5484]);
31902str->del(strings[5492]);
31903strings[5467] = str->add(strings[5467]);
31904strings[5493] = str->add("#fff");
31905str->del(strings[5467]);
31906str->del(strings[5493]);
31907strings[5471] = str->add(strings[5471]);
31908strings[5494] = str->add("#00000020");
31909str->del(strings[5471]);
31910str->del(strings[5494]);
31911strings[5465] = str->add(strings[5465]);
31912strings[5495] = str->add("12.000000");
31913str->del(strings[5465]);
31914str->del(strings[5495]);
31915strings[5463] = str->add(strings[5463]);
31916strings[471] = str->add(strings[471]);
31917str->del(strings[470]);
31918strings[471] = str->add(strings[471]);
31919str->del(strings[5463]);
31920str->del(strings[471]);
31921strings[382] = str->add(strings[382]);
31922strings[382] = str->add(strings[382]);
31923strings[382] = str->add(strings[382]);
31924strings[382] = str->add(strings[382]);
31925strings[382] = str->add(strings[382]);
31926strings[382] = str->add(strings[382]);
31927strings[382] = str->add(strings[382]);
31928strings[382] = str->add(strings[382]);
31929strings[382] = str->add(strings[382]);
31930strings[382] = str->add(strings[382]);
31931strings[382] = str->add(strings[382]);
31932strings[382] = str->add(strings[382]);
31933strings[382] = str->add(strings[382]);
31934strings[382] = str->add(strings[382]);
31935strings[382] = str->add(strings[382]);
31936strings[382] = str->add(strings[382]);
31937strings[382] = str->add(strings[382]);
31938strings[382] = str->add(strings[382]);
31939strings[382] = str->add(strings[382]);
31940strings[382] = str->add(strings[382]);
31941strings[382] = str->add(strings[382]);
31942strings[382] = str->add(strings[382]);
31943str->del(strings[471]);
31944str->del(strings[469]);
31945str->del(strings[382]);
31946str->del(strings[382]);
31947str->del(strings[382]);
31948str->del(strings[382]);
31949str->del(strings[382]);
31950str->del(strings[382]);
31951str->del(strings[382]);
31952str->del(strings[382]);
31953str->del(strings[382]);
31954str->del(strings[382]);
31955str->del(strings[382]);
31956str->del(strings[382]);
31957str->del(strings[382]);
31958str->del(strings[382]);
31959str->del(strings[382]);
31960str->del(strings[382]);
31961str->del(strings[382]);
31962str->del(strings[382]);
31963str->del(strings[382]);
31964str->del(strings[382]);
31965str->del(strings[382]);
31966str->del(strings[470]);
31967str->del(strings[469]);
31968str->del(strings[382]);
31969str->del(strings[5463]);
31970str->del(strings[5464]);
31971str->del(strings[5465]);
31972str->del(strings[5466]);
31973str->del(strings[5467]);
31974str->del(strings[5468]);
31975str->del(strings[5469]);
31976str->del(strings[5470]);
31977str->del(strings[5471]);
31978str->del(strings[5472]);
31979str->del(strings[5473]);
31980str->del(strings[5474]);
31981str->del(strings[5475]);
31982str->del(strings[5476]);
31983str->del(strings[5477]);
31984str->del(strings[5478]);
31985str->del(strings[5479]);
31986str->del(strings[5480]);
31987str->del(strings[5481]);
31988str->del(strings[5482]);
31989str->del(strings[5483]);
31990str->del(strings[5484]);
31991str->del(strings[5485]);
31992str->del(strings[7]);
31993str->del(strings[2353]);
31994strings[7] = str->add(strings[7]);
31995strings[2363] = str->add(strings[2363]);
31996strings[5496] = str->add("e,action,mouse,move");
31997strings[5497] = str->add("e");
31998str->del(strings[5496]);
31999str->del(strings[5497]);
32000strings[5498] = str->add("e,action,mouse,move");
32001strings[5499] = str->add("e");
32002str->del(strings[5498]);
32003str->del(strings[5499]);
32004strings[1932] = str->add(strings[1932]);
32005strings[5500] = str->add("go_activeb1");
32006strings[5501] = str->add("program,start");
32007strings[5502] = str->add("go_activec1");
32008strings[1932] = str->add(strings[1932]);
32009strings[5503] = str->add("go_activeb29");
32010strings[5501] = str->add(strings[5501]);
32011strings[5504] = str->add("go_activec29");
32012str->del(strings[1932]);
32013str->del(strings[5500]);
32014str->del(strings[5501]);
32015str->del(strings[5502]);
32016str->del(strings[1932]);
32017str->del(strings[5503]);
32018str->del(strings[5501]);
32019str->del(strings[5504]);
32020strings[5505] = str->add("e,action,mouse,move");
32021strings[5506] = str->add("e");
32022str->del(strings[5505]);
32023str->del(strings[5506]);
32024strings[5507] = str->add("e,action,mouse,move");
32025strings[5508] = str->add("e");
32026str->del(strings[5507]);
32027str->del(strings[5508]);
32028strings[5509] = str->add("e,action,mouse,move");
32029strings[5510] = str->add("e");
32030str->del(strings[5509]);
32031str->del(strings[5510]);
32032strings[5511] = str->add("e,action,mouse,move");
32033strings[5512] = str->add("e");
32034str->del(strings[5511]);
32035str->del(strings[5512]);
32036strings[5513] = str->add("e,action,mouse,move");
32037strings[5514] = str->add("e");
32038str->del(strings[5513]);
32039str->del(strings[5514]);
32040str->del(strings[7]);
32041str->del(strings[2363]);
32042strings[7] = str->add(strings[7]);
32043strings[2383] = str->add(strings[2383]);
32044strings[5515] = str->add("e,action,mouse,move");
32045strings[5516] = str->add("e");
32046str->del(strings[5515]);
32047str->del(strings[5516]);
32048strings[5517] = str->add("e,action,mouse,move");
32049strings[5518] = str->add("e");
32050str->del(strings[5517]);
32051str->del(strings[5518]);
32052strings[5519] = str->add("e,action,mouse,move");
32053strings[5520] = str->add("e");
32054str->del(strings[5519]);
32055str->del(strings[5520]);
32056strings[5521] = str->add("e,action,mouse,move");
32057strings[5522] = str->add("e");
32058str->del(strings[5521]);
32059str->del(strings[5522]);
32060strings[5523] = str->add("e,action,mouse,move");
32061strings[5524] = str->add("e");
32062str->del(strings[5523]);
32063str->del(strings[5524]);
32064strings[5525] = str->add("e,action,mouse,move");
32065strings[5526] = str->add("e");
32066str->del(strings[5525]);
32067str->del(strings[5526]);
32068strings[5527] = str->add("e,action,mouse,move");
32069strings[5528] = str->add("e");
32070str->del(strings[5527]);
32071str->del(strings[5528]);
32072strings[1932] = str->add(strings[1932]);
32073strings[5529] = str->add("go_activec26");
32074strings[5530] = str->add("program,start");
32075strings[5531] = str->add("go_activeb26");
32076strings[1932] = str->add(strings[1932]);
32077strings[5532] = str->add("go_activec4");
32078strings[5530] = str->add(strings[5530]);
32079strings[5533] = str->add("go_activeb4");
32080str->del(strings[1932]);
32081str->del(strings[5529]);
32082str->del(strings[5530]);
32083str->del(strings[5531]);
32084str->del(strings[1932]);
32085str->del(strings[5532]);
32086str->del(strings[5530]);
32087str->del(strings[5533]);
32088str->del(strings[7]);
32089str->del(strings[2383]);
32090strings[7] = str->add(strings[7]);
32091strings[2404] = str->add(strings[2404]);
32092strings[5534] = str->add("e,action,mouse,move");
32093strings[5535] = str->add("e");
32094str->del(strings[5534]);
32095str->del(strings[5535]);
32096strings[5536] = str->add("e,action,mouse,move");
32097strings[5537] = str->add("e");
32098str->del(strings[5536]);
32099str->del(strings[5537]);
32100strings[5538] = str->add("e,action,mouse,move");
32101strings[5539] = str->add("e");
32102str->del(strings[5538]);
32103str->del(strings[5539]);
32104strings[5540] = str->add("e,action,mouse,move");
32105strings[5541] = str->add("e");
32106str->del(strings[5540]);
32107str->del(strings[5541]);
32108strings[5542] = str->add("e,action,mouse,move");
32109strings[5543] = str->add("e");
32110str->del(strings[5542]);
32111str->del(strings[5543]);
32112strings[5544] = str->add("e,action,mouse,move");
32113strings[5545] = str->add("e");
32114str->del(strings[5544]);
32115str->del(strings[5545]);
32116strings[5546] = str->add("e,action,mouse,move");
32117strings[5547] = str->add("e");
32118str->del(strings[5546]);
32119str->del(strings[5547]);
32120strings[5548] = str->add("e,action,mouse,move");
32121strings[5549] = str->add("e");
32122str->del(strings[5548]);
32123str->del(strings[5549]);
32124strings[1932] = str->add(strings[1932]);
32125strings[5550] = str->add("sel");
32126strings[1932] = str->add(strings[1932]);
32127strings[5550] = str->add(strings[5550]);
32128str->del(strings[1932]);
32129str->del(strings[5550]);
32130str->del(strings[1932]);
32131str->del(strings[5550]);
32132str->del(strings[7]);
32133str->del(strings[2404]);
32134strings[7] = str->add(strings[7]);
32135strings[2416] = str->add(strings[2416]);
32136strings[5551] = str->add("e,action,mouse,move");
32137strings[5552] = str->add("e");
32138str->del(strings[5551]);
32139str->del(strings[5552]);
32140strings[5553] = str->add("e,action,mouse,move");
32141strings[5554] = str->add("e");
32142str->del(strings[5553]);
32143str->del(strings[5554]);
32144strings[5555] = str->add("e,action,mouse,move");
32145strings[5556] = str->add("e");
32146strings[5557] = str->add("e,state,unselected");
32147strings[5556] = str->add(strings[5556]);
32148strings[5557] = str->add(strings[5557]);
32149strings[5556] = str->add(strings[5556]);
32150strings[5557] = str->add(strings[5557]);
32151strings[5556] = str->add(strings[5556]);
32152strings[5557] = str->add(strings[5557]);
32153strings[5556] = str->add(strings[5556]);
32154strings[5557] = str->add(strings[5557]);
32155strings[5556] = str->add(strings[5556]);
32156strings[5557] = str->add(strings[5557]);
32157strings[5556] = str->add(strings[5556]);
32158str->del(strings[5555]);
32159str->del(strings[5556]);
32160strings[5558] = str->add("program,start");
32161strings[5559] = str->add("unsel");
32162str->del(strings[5557]);
32163str->del(strings[5556]);
32164str->del(strings[5557]);
32165str->del(strings[5556]);
32166strings[5558] = str->add(strings[5558]);
32167strings[5559] = str->add(strings[5559]);
32168str->del(strings[5557]);
32169str->del(strings[5556]);
32170strings[5558] = str->add(strings[5558]);
32171strings[5559] = str->add(strings[5559]);
32172strings[1932] = str->add(strings[1932]);
32173strings[5559] = str->add(strings[5559]);
32174str->del(strings[5557]);
32175str->del(strings[5556]);
32176str->del(strings[5557]);
32177str->del(strings[5556]);
32178str->del(strings[5557]);
32179str->del(strings[5556]);
32180str->del(strings[5558]);
32181str->del(strings[5559]);
32182str->del(strings[5558]);
32183str->del(strings[5559]);
32184str->del(strings[5558]);
32185str->del(strings[5559]);
32186str->del(strings[1932]);
32187str->del(strings[5559]);
32188str->del(strings[64]);
32189str->del(strings[3021]);
32190strings[64] = str->add(strings[64]);
32191strings[2913] = str->add(strings[2913]);
32192strings[5560] = str->add("e,action,mouse,move");
32193strings[5561] = str->add("e");
32194str->del(strings[5560]);
32195str->del(strings[5561]);
32196strings[1932] = str->add(strings[1932]);
32197strings[5562] = str->add("go_activeb28");
32198strings[5563] = str->add("program,start");
32199strings[5564] = str->add("go_activec28");
32200strings[1932] = str->add(strings[1932]);
32201strings[5565] = str->add("go_activeb2");
32202strings[5563] = str->add(strings[5563]);
32203strings[5566] = str->add("go_activec2");
32204str->del(strings[1932]);
32205str->del(strings[5562]);
32206str->del(strings[5563]);
32207str->del(strings[5564]);
32208str->del(strings[1932]);
32209str->del(strings[5565]);
32210str->del(strings[5563]);
32211str->del(strings[5566]);
32212strings[5567] = str->add("e,action,mouse,move");
32213strings[5568] = str->add("e");
32214str->del(strings[5567]);
32215str->del(strings[5568]);
32216strings[5569] = str->add("e,action,mouse,move");
32217strings[5570] = str->add("e");
32218str->del(strings[5569]);
32219str->del(strings[5570]);
32220strings[5571] = str->add("e,action,mouse,move");
32221strings[5572] = str->add("e");
32222str->del(strings[5571]);
32223str->del(strings[5572]);
32224str->del(strings[7]);
32225str->del(strings[2416]);
32226strings[7] = str->add(strings[7]);
32227strings[2426] = str->add(strings[2426]);
32228strings[5573] = str->add("e,action,mouse,move");
32229strings[5574] = str->add("e");
32230str->del(strings[5573]);
32231str->del(strings[5574]);
32232strings[1932] = str->add(strings[1932]);
32233strings[5575] = str->add("unsel");
32234str->del(strings[1932]);
32235str->del(strings[5575]);
32236str->del(strings[7]);
32237str->del(strings[2426]);
32238strings[7] = str->add(strings[7]);
32239strings[2435] = str->add(strings[2435]);
32240strings[5576] = str->add("e,action,mouse,move");
32241strings[5577] = str->add("e");
32242str->del(strings[5576]);
32243str->del(strings[5577]);
32244strings[1932] = str->add(strings[1932]);
32245strings[5578] = str->add("go_activec25");
32246strings[5579] = str->add("program,start");
32247strings[5580] = str->add("go_activeb25");
32248strings[1932] = str->add(strings[1932]);
32249strings[5581] = str->add("go_activec5");
32250strings[5579] = str->add(strings[5579]);
32251strings[5582] = str->add("go_activeb5");
32252str->del(strings[1932]);
32253str->del(strings[5578]);
32254str->del(strings[5579]);
32255str->del(strings[5580]);
32256str->del(strings[1932]);
32257str->del(strings[5581]);
32258str->del(strings[5579]);
32259str->del(strings[5582]);
32260strings[5583] = str->add("e,action,mouse,move");
32261strings[5584] = str->add("e");
32262str->del(strings[5583]);
32263str->del(strings[5584]);
32264strings[5585] = str->add("e,action,mouse,move");
32265strings[5586] = str->add("e");
32266str->del(strings[5585]);
32267str->del(strings[5586]);
32268str->del(strings[7]);
32269str->del(strings[2435]);
32270strings[7] = str->add(strings[7]);
32271strings[2448] = str->add(strings[2448]);
32272strings[5587] = str->add("e,action,mouse,move");
32273strings[5588] = str->add("e");
32274str->del(strings[5587]);
32275str->del(strings[5588]);
32276strings[5589] = str->add("e,action,mouse,move");
32277strings[5590] = str->add("e");
32278str->del(strings[5589]);
32279str->del(strings[5590]);
32280strings[5591] = str->add("e,action,mouse,move");
32281strings[5592] = str->add("e");
32282str->del(strings[5591]);
32283str->del(strings[5592]);
32284strings[5593] = str->add("e,action,mouse,move");
32285strings[5594] = str->add("e");
32286str->del(strings[5593]);
32287str->del(strings[5594]);
32288strings[5595] = str->add("e,action,mouse,move");
32289strings[5596] = str->add("e");
32290str->del(strings[5595]);
32291str->del(strings[5596]);
32292strings[5597] = str->add("e,action,mouse,move");
32293strings[5598] = str->add("e");
32294str->del(strings[5597]);
32295str->del(strings[5598]);
32296strings[5599] = str->add("e,action,mouse,move");
32297strings[5600] = str->add("e");
32298str->del(strings[5599]);
32299str->del(strings[5600]);
32300strings[1932] = str->add(strings[1932]);
32301strings[5601] = str->add("go_activeb27");
32302strings[5602] = str->add("program,start");
32303strings[5603] = str->add("go_activec27");
32304strings[1932] = str->add(strings[1932]);
32305strings[5604] = str->add("go_activeb3");
32306strings[5602] = str->add(strings[5602]);
32307strings[5605] = str->add("go_activec3");
32308str->del(strings[1932]);
32309str->del(strings[5601]);
32310str->del(strings[5602]);
32311str->del(strings[5603]);
32312str->del(strings[1932]);
32313str->del(strings[5604]);
32314str->del(strings[5602]);
32315str->del(strings[5605]);
32316str->del(strings[7]);
32317str->del(strings[2448]);
32318strings[7] = str->add(strings[7]);
32319strings[2466] = str->add(strings[2466]);
32320strings[5606] = str->add("e,action,mouse,move");
32321strings[5607] = str->add("e");
32322str->del(strings[5606]);
32323str->del(strings[5607]);
32324strings[5608] = str->add("e,action,mouse,move");
32325strings[5609] = str->add("e");
32326str->del(strings[5608]);
32327str->del(strings[5609]);
32328strings[5610] = str->add("e,action,mouse,move");
32329strings[5611] = str->add("e");
32330str->del(strings[5610]);
32331str->del(strings[5611]);
32332strings[5612] = str->add("e,action,mouse,move");
32333strings[5613] = str->add("e");
32334str->del(strings[5612]);
32335str->del(strings[5613]);
32336strings[5614] = str->add("e,action,mouse,move");
32337strings[5615] = str->add("e");
32338str->del(strings[5614]);
32339str->del(strings[5615]);
32340strings[5616] = str->add("e,action,mouse,move");
32341strings[5617] = str->add("e");
32342str->del(strings[5616]);
32343str->del(strings[5617]);
32344strings[5618] = str->add("e,action,mouse,move");
32345strings[5619] = str->add("e");
32346str->del(strings[5618]);
32347str->del(strings[5619]);
32348strings[1932] = str->add(strings[1932]);
32349strings[5620] = str->add("go_activec24");
32350strings[5621] = str->add("program,start");
32351strings[5622] = str->add("go_activeb24");
32352strings[1932] = str->add(strings[1932]);
32353strings[5623] = str->add("go_activec6");
32354strings[5621] = str->add(strings[5621]);
32355strings[5624] = str->add("go_activeb6");
32356strings[1932] = str->add(strings[1932]);
32357strings[5625] = str->add("unsel");
32358str->del(strings[1932]);
32359str->del(strings[5620]);
32360str->del(strings[5621]);
32361str->del(strings[5622]);
32362str->del(strings[1932]);
32363str->del(strings[5623]);
32364str->del(strings[5621]);
32365str->del(strings[5624]);
32366str->del(strings[1932]);
32367str->del(strings[5625]);
32368str->del(strings[7]);
32369str->del(strings[2466]);
32370strings[7] = str->add(strings[7]);
32371strings[2479] = str->add(strings[2479]);
32372strings[5626] = str->add("e,action,mouse,move");
32373strings[5627] = str->add("e");
32374strings[5628] = str->add("e,state,selected");
32375strings[5627] = str->add(strings[5627]);
32376strings[5628] = str->add(strings[5628]);
32377strings[5627] = str->add(strings[5627]);
32378strings[5628] = str->add(strings[5628]);
32379strings[5627] = str->add(strings[5627]);
32380strings[5628] = str->add(strings[5628]);
32381strings[5627] = str->add(strings[5627]);
32382strings[5628] = str->add(strings[5628]);
32383strings[5627] = str->add(strings[5627]);
32384strings[5628] = str->add(strings[5628]);
32385strings[5627] = str->add(strings[5627]);
32386str->del(strings[5626]);
32387str->del(strings[5627]);
32388strings[5629] = str->add("program,start");
32389strings[5630] = str->add("sel");
32390str->del(strings[5628]);
32391str->del(strings[5627]);
32392str->del(strings[5628]);
32393str->del(strings[5627]);
32394strings[5629] = str->add(strings[5629]);
32395strings[5630] = str->add(strings[5630]);
32396str->del(strings[5628]);
32397str->del(strings[5627]);
32398strings[5629] = str->add(strings[5629]);
32399strings[5630] = str->add(strings[5630]);
32400strings[1932] = str->add(strings[1932]);
32401strings[5630] = str->add(strings[5630]);
32402str->del(strings[5628]);
32403str->del(strings[5627]);
32404strings[5629] = str->add(strings[5629]);
32405strings[5631] = str->add("e_in");
32406str->del(strings[5628]);
32407str->del(strings[5627]);
32408str->del(strings[5628]);
32409str->del(strings[5627]);
32410str->del(strings[5629]);
32411str->del(strings[5630]);
32412str->del(strings[5629]);
32413str->del(strings[5630]);
32414str->del(strings[5629]);
32415str->del(strings[5630]);
32416str->del(strings[1932]);
32417str->del(strings[5630]);
32418str->del(strings[5629]);
32419str->del(strings[5631]);
32420strings[361] = str->add(strings[361]);
32421strings[362] = str->add(strings[362]);
32422strings[361] = str->add(strings[361]);
32423str->del(strings[361]);
32424strings[362] = str->add(strings[362]);
32425str->del(strings[362]);
32426strings[5632] = str->add("resize");
32427str->del(strings[5632]);
32428strings[64] = str->add(strings[64]);
32429strings[2581] = str->add(strings[2581]);
32430strings[64] = str->add(strings[64]);
32431strings[5633] = str->add("load");
32432strings[1841] = str->add(strings[1841]);
32433strings[64] = str->add(strings[64]);
32434strings[1949] = str->add(strings[1949]);
32435strings[64] = str->add(strings[64]);
32436strings[1880] = str->add(strings[1880]);
32437strings[64] = str->add(strings[64]);
32438strings[1876] = str->add(strings[1876]);
32439str->del(strings[64]);
32440strings[379] = str->add(strings[379]);
32441strings[1842] = str->add(strings[1842]);
32442strings[1842] = str->add(strings[1842]);
32443strings[64] = str->add(strings[64]);
32444strings[1874] = str->add(strings[1874]);
32445strings[64] = str->add(strings[64]);
32446strings[2583] = str->add(strings[2583]);
32447strings[5633] = str->add(strings[5633]);
32448strings[1841] = str->add(strings[1841]);
32449strings[64] = str->add(strings[64]);
32450strings[2584] = str->add(strings[2584]);
32451strings[5633] = str->add(strings[5633]);
32452strings[1841] = str->add(strings[1841]);
32453strings[469] = str->add(strings[469]);
32454strings[2671] = str->add(strings[2671]);
32455strings[5633] = str->add(strings[5633]);
32456strings[469] = str->add(strings[469]);
32457strings[2898] = str->add(strings[2898]);
32458strings[469] = str->add(strings[469]);
32459strings[2900] = str->add(strings[2900]);
32460strings[1841] = str->add(strings[1841]);
32461strings[5634] = str->add("resize");
32462strings[5634] = str->add(strings[5634]);
32463strings[64] = str->add(strings[64]);
32464strings[2585] = str->add(strings[2585]);
32465strings[64] = str->add(strings[64]);
32466strings[5633] = str->add(strings[5633]);
32467strings[4956] = str->add(strings[4956]);
32468strings[1841] = str->add(strings[1841]);
32469str->del(strings[64]);
32470strings[385] = str->add(strings[385]);
32471strings[4956] = str->add(strings[4956]);
32472strings[64] = str->add(strings[64]);
32473strings[2886] = str->add(strings[2886]);
32474strings[64] = str->add(strings[64]);
32475strings[2888] = str->add(strings[2888]);
32476strings[64] = str->add(strings[64]);
32477strings[2583] = str->add(strings[2583]);
32478strings[5633] = str->add(strings[5633]);
32479strings[1841] = str->add(strings[1841]);
32480strings[64] = str->add(strings[64]);
32481strings[2584] = str->add(strings[2584]);
32482strings[5633] = str->add(strings[5633]);
32483strings[1841] = str->add(strings[1841]);
32484strings[469] = str->add(strings[469]);
32485strings[2680] = str->add(strings[2680]);
32486strings[5633] = str->add(strings[5633]);
32487strings[469] = str->add(strings[469]);
32488strings[3094] = str->add(strings[3094]);
32489strings[1841] = str->add(strings[1841]);
32490strings[5634] = str->add(strings[5634]);
32491strings[5634] = str->add(strings[5634]);
32492strings[64] = str->add(strings[64]);
32493strings[2585] = str->add(strings[2585]);
32494strings[64] = str->add(strings[64]);
32495strings[5633] = str->add(strings[5633]);
32496strings[2514] = str->add(strings[2514]);
32497strings[1841] = str->add(strings[1841]);
32498str->del(strings[64]);
32499strings[385] = str->add(strings[385]);
32500strings[2514] = str->add(strings[2514]);
32501strings[64] = str->add(strings[64]);
32502strings[2886] = str->add(strings[2886]);
32503strings[64] = str->add(strings[64]);
32504strings[2888] = str->add(strings[2888]);
32505strings[64] = str->add(strings[64]);
32506strings[2582] = str->add(strings[2582]);
32507strings[5633] = str->add(strings[5633]);
32508strings[1841] = str->add(strings[1841]);
32509strings[64] = str->add(strings[64]);
32510strings[2583] = str->add(strings[2583]);
32511strings[5633] = str->add(strings[5633]);
32512strings[1841] = str->add(strings[1841]);
32513strings[64] = str->add(strings[64]);
32514strings[2584] = str->add(strings[2584]);
32515strings[5633] = str->add(strings[5633]);
32516strings[1841] = str->add(strings[1841]);
32517strings[469] = str->add(strings[469]);
32518strings[2672] = str->add(strings[2672]);
32519strings[5633] = str->add(strings[5633]);
32520strings[469] = str->add(strings[469]);
32521strings[3130] = str->add(strings[3130]);
32522strings[1841] = str->add(strings[1841]);
32523strings[5634] = str->add(strings[5634]);
32524strings[5634] = str->add(strings[5634]);
32525strings[64] = str->add(strings[64]);
32526strings[2585] = str->add(strings[2585]);
32527strings[64] = str->add(strings[64]);
32528strings[5633] = str->add(strings[5633]);
32529strings[1713] = str->add(strings[1713]);
32530strings[1841] = str->add(strings[1841]);
32531str->del(strings[64]);
32532strings[385] = str->add(strings[385]);
32533strings[1713] = str->add(strings[1713]);
32534strings[64] = str->add(strings[64]);
32535strings[2886] = str->add(strings[2886]);
32536strings[64] = str->add(strings[64]);
32537strings[2888] = str->add(strings[2888]);
32538strings[64] = str->add(strings[64]);
32539strings[2583] = str->add(strings[2583]);
32540strings[5633] = str->add(strings[5633]);
32541strings[1841] = str->add(strings[1841]);
32542strings[64] = str->add(strings[64]);
32543strings[2584] = str->add(strings[2584]);
32544strings[5633] = str->add(strings[5633]);
32545strings[1841] = str->add(strings[1841]);
32546strings[469] = str->add(strings[469]);
32547strings[2673] = str->add(strings[2673]);
32548strings[5633] = str->add(strings[5633]);
32549strings[469] = str->add(strings[469]);
32550strings[3132] = str->add(strings[3132]);
32551strings[1841] = str->add(strings[1841]);
32552strings[5634] = str->add(strings[5634]);
32553strings[5634] = str->add(strings[5634]);
32554strings[64] = str->add(strings[64]);
32555strings[2585] = str->add(strings[2585]);
32556strings[64] = str->add(strings[64]);
32557strings[5633] = str->add(strings[5633]);
32558strings[1714] = str->add(strings[1714]);
32559strings[1841] = str->add(strings[1841]);
32560str->del(strings[64]);
32561strings[385] = str->add(strings[385]);
32562strings[1714] = str->add(strings[1714]);
32563strings[64] = str->add(strings[64]);
32564strings[2886] = str->add(strings[2886]);
32565strings[64] = str->add(strings[64]);
32566strings[2888] = str->add(strings[2888]);
32567strings[5634] = str->add(strings[5634]);
32568strings[5634] = str->add(strings[5634]);
32569strings[5634] = str->add(strings[5634]);
32570strings[5634] = str->add(strings[5634]);
32571strings[5634] = str->add(strings[5634]);
32572strings[5634] = str->add(strings[5634]);
32573strings[5634] = str->add(strings[5634]);
32574strings[5634] = str->add(strings[5634]);
32575strings[5634] = str->add(strings[5634]);
32576strings[5634] = str->add(strings[5634]);
32577strings[5634] = str->add(strings[5634]);
32578strings[5634] = str->add(strings[5634]);
32579strings[5634] = str->add(strings[5634]);
32580strings[5634] = str->add(strings[5634]);
32581strings[1933] = str->add(strings[1933]);
32582str->del(strings[1933]);
32583str->del(strings[64]);
32584str->del(strings[2583]);
32585strings[1933] = str->add(strings[1933]);
32586str->del(strings[1933]);
32587str->del(strings[64]);
32588str->del(strings[2584]);
32589strings[1933] = str->add(strings[1933]);
32590str->del(strings[1933]);
32591str->del(strings[469]);
32592str->del(strings[2688]);
32593strings[1933] = str->add(strings[1933]);
32594str->del(strings[1933]);
32595str->del(strings[2224]);
32596str->del(strings[2224]);
32597str->del(strings[2224]);
32598str->del(strings[64]);
32599str->del(strings[2585]);
32600strings[1933] = str->add(strings[1933]);
32601str->del(strings[1933]);
32602str->del(strings[64]);
32603str->del(strings[2582]);
32604strings[1933] = str->add(strings[1933]);
32605str->del(strings[1933]);
32606str->del(strings[64]);
32607str->del(strings[2583]);
32608strings[1933] = str->add(strings[1933]);
32609str->del(strings[1933]);
32610str->del(strings[64]);
32611str->del(strings[2584]);
32612strings[1933] = str->add(strings[1933]);
32613str->del(strings[1933]);
32614str->del(strings[469]);
32615str->del(strings[2685]);
32616strings[1933] = str->add(strings[1933]);
32617str->del(strings[1933]);
32618str->del(strings[4]);
32619str->del(strings[4]);
32620str->del(strings[4]);
32621str->del(strings[64]);
32622str->del(strings[2585]);
32623strings[1933] = str->add(strings[1933]);
32624str->del(strings[1933]);
32625str->del(strings[64]);
32626str->del(strings[2583]);
32627strings[1933] = str->add(strings[1933]);
32628str->del(strings[1933]);
32629str->del(strings[64]);
32630str->del(strings[2584]);
32631strings[1933] = str->add(strings[1933]);
32632str->del(strings[1933]);
32633str->del(strings[1926]);
32634str->del(strings[3083]);
32635strings[1933] = str->add(strings[1933]);
32636str->del(strings[1933]);
32637str->del(strings[1925]);
32638str->del(strings[1925]);
32639str->del(strings[1925]);
32640str->del(strings[64]);
32641str->del(strings[2585]);
32642strings[1933] = str->add(strings[1933]);
32643str->del(strings[1933]);
32644str->del(strings[64]);
32645str->del(strings[2583]);
32646strings[1933] = str->add(strings[1933]);
32647str->del(strings[1933]);
32648str->del(strings[64]);
32649str->del(strings[2584]);
32650strings[1933] = str->add(strings[1933]);
32651str->del(strings[1933]);
32652str->del(strings[469]);
32653str->del(strings[2711]);
32654strings[1933] = str->add(strings[1933]);
32655str->del(strings[1933]);
32656str->del(strings[2494]);
32657str->del(strings[2494]);
32658str->del(strings[2494]);
32659str->del(strings[64]);
32660str->del(strings[2585]);
32661strings[1933] = str->add(strings[1933]);
32662str->del(strings[1933]);
32663str->del(strings[64]);
32664str->del(strings[2583]);
32665strings[1933] = str->add(strings[1933]);
32666str->del(strings[1933]);
32667str->del(strings[64]);
32668str->del(strings[2584]);
32669strings[1933] = str->add(strings[1933]);
32670str->del(strings[1933]);
32671str->del(strings[469]);
32672str->del(strings[2680]);
32673strings[1933] = str->add(strings[1933]);
32674str->del(strings[1933]);
32675str->del(strings[2514]);
32676str->del(strings[2514]);
32677str->del(strings[2514]);
32678str->del(strings[64]);
32679str->del(strings[2585]);
32680strings[1933] = str->add(strings[1933]);
32681str->del(strings[1933]);
32682str->del(strings[64]);
32683str->del(strings[2583]);
32684strings[1933] = str->add(strings[1933]);
32685str->del(strings[1933]);
32686str->del(strings[64]);
32687str->del(strings[2584]);
32688strings[1933] = str->add(strings[1933]);
32689str->del(strings[1933]);
32690str->del(strings[469]);
32691str->del(strings[2713]);
32692strings[1933] = str->add(strings[1933]);
32693str->del(strings[1933]);
32694str->del(strings[2536]);
32695str->del(strings[2536]);
32696str->del(strings[2536]);
32697str->del(strings[64]);
32698str->del(strings[2585]);
32699strings[1933] = str->add(strings[1933]);
32700str->del(strings[1933]);
32701str->del(strings[1842]);
32702str->del(strings[1842]);
32703str->del(strings[64]);
32704str->del(strings[2581]);
32705str->del(strings[64]);
32706str->del(strings[2886]);
32707str->del(strings[64]);
32708str->del(strings[2888]);
32709str->del(strings[469]);
32710str->del(strings[2902]);
32711str->del(strings[2224]);
32712str->del(strings[385]);
32713str->del(strings[64]);
32714str->del(strings[2915]);
32715str->del(strings[64]);
32716str->del(strings[2886]);
32717str->del(strings[64]);
32718str->del(strings[2888]);
32719str->del(strings[469]);
32720str->del(strings[3089]);
32721str->del(strings[4]);
32722str->del(strings[385]);
32723str->del(strings[64]);
32724str->del(strings[2886]);
32725str->del(strings[64]);
32726str->del(strings[2888]);
32727str->del(strings[1926]);
32728str->del(strings[1552]);
32729str->del(strings[1925]);
32730str->del(strings[385]);
32731str->del(strings[64]);
32732str->del(strings[2886]);
32733str->del(strings[64]);
32734str->del(strings[2888]);
32735str->del(strings[469]);
32736str->del(strings[3092]);
32737str->del(strings[2494]);
32738str->del(strings[385]);
32739str->del(strings[64]);
32740str->del(strings[2886]);
32741str->del(strings[64]);
32742str->del(strings[2888]);
32743str->del(strings[469]);
32744str->del(strings[3094]);
32745str->del(strings[2514]);
32746str->del(strings[385]);
32747str->del(strings[64]);
32748str->del(strings[2886]);
32749str->del(strings[64]);
32750str->del(strings[2888]);
32751str->del(strings[469]);
32752str->del(strings[3096]);
32753str->del(strings[2536]);
32754str->del(strings[385]);
32755str->del(strings[64]);
32756str->del(strings[1949]);
32757str->del(strings[64]);
32758str->del(strings[1880]);
32759str->del(strings[64]);
32760str->del(strings[1876]);
32761str->del(strings[379]);
32762str->del(strings[64]);
32763str->del(strings[1874]);
32764str->del(strings[361]);
32765str->del(strings[362]);
32766str->del(strings[1842]);
32767strings[1842] = str->add(strings[1842]);
32768str->del(strings[1842]);
32769strings[1842] = str->add(strings[1842]);
32770strings[5634] = str->add(strings[5634]);
32771strings[4956] = str->add(strings[4956]);
32772strings[4956] = str->add(strings[4956]);
32773strings[5634] = str->add(strings[5634]);
32774strings[2514] = str->add(strings[2514]);
32775strings[2514] = str->add(strings[2514]);
32776strings[64] = str->add(strings[64]);
32777strings[2915] = str->add(strings[2915]);
32778strings[5634] = str->add(strings[5634]);
32779strings[1713] = str->add(strings[1713]);
32780strings[1713] = str->add(strings[1713]);
32781strings[5634] = str->add(strings[5634]);
32782strings[1714] = str->add(strings[1714]);
32783strings[1714] = str->add(strings[1714]);
32784str->del(strings[64]);
32785str->del(strings[2913]);
32786strings[64] = str->add(strings[64]);
32787strings[3021] = str->add(strings[3021]);
32788strings[5635] = str->add("font");
32789strings[5636] = str->add("font_fallbacks");
32790strings[5637] = str->add("font_size");
32791strings[5638] = str->add("font_source");
32792strings[5639] = str->add("color");
32793strings[5640] = str->add("underline_color");
32794strings[5641] = str->add("underline2_color");
32795strings[5642] = str->add("outline_color");
32796strings[5643] = str->add("shadow_color");
32797strings[5644] = str->add("glow_color");
32798strings[5645] = str->add("glow2_color");
32799strings[5646] = str->add("backing_color");
32800strings[5647] = str->add("strikethrough_color");
32801strings[5648] = str->add("align");
32802strings[5649] = str->add("valign");
32803strings[5650] = str->add("wrap");
32804strings[5651] = str->add("left_margin");
32805strings[5652] = str->add("right_margin");
32806strings[5653] = str->add("underline");
32807strings[5654] = str->add("strikethrough");
32808strings[5655] = str->add("backing");
32809strings[5656] = str->add("style");
32810strings[5657] = str->add("tabstops");
32811strings[5648] = str->add(strings[5648]);
32812strings[5658] = str->add("center");
32813str->del(strings[5648]);
32814str->del(strings[5658]);
32815strings[5639] = str->add(strings[5639]);
32816strings[5659] = str->add("#000");
32817str->del(strings[5639]);
32818str->del(strings[5659]);
32819strings[5656] = str->add(strings[5656]);
32820strings[5660] = str->add("shadow");
32821str->del(strings[5656]);
32822str->del(strings[5660]);
32823strings[5643] = str->add(strings[5643]);
32824strings[5661] = str->add("#ffffff80");
32825str->del(strings[5643]);
32826str->del(strings[5661]);
32827strings[5650] = str->add(strings[5650]);
32828strings[5662] = str->add("word");
32829str->del(strings[5650]);
32830str->del(strings[5662]);
32831strings[5638] = str->add(strings[5638]);
32832strings[469] = str->add(strings[469]);
32833strings[469] = str->add(strings[469]);
32834str->del(strings[5638]);
32835str->del(strings[469]);
32836strings[5637] = str->add(strings[5637]);
32837strings[5663] = str->add("10.000000");
32838str->del(strings[5637]);
32839str->del(strings[5663]);
32840strings[5635] = str->add(strings[5635]);
32841strings[470] = str->add(strings[470]);
32842strings[470] = str->add(strings[470]);
32843str->del(strings[5635]);
32844str->del(strings[470]);
32845strings[382] = str->add(strings[382]);
32846strings[382] = str->add(strings[382]);
32847strings[382] = str->add(strings[382]);
32848strings[382] = str->add(strings[382]);
32849strings[382] = str->add(strings[382]);
32850strings[382] = str->add(strings[382]);
32851strings[470] = str->add(strings[470]);
32852strings[469] = str->add(strings[469]);
32853strings[5656] = str->add(strings[5656]);
32854strings[5664] = str->add("glow");
32855str->del(strings[5656]);
32856str->del(strings[5664]);
32857strings[5639] = str->add(strings[5639]);
32858strings[5665] = str->add("#fff");
32859str->del(strings[5639]);
32860str->del(strings[5665]);
32861strings[5645] = str->add(strings[5645]);
32862strings[5666] = str->add("#fe87");
32863str->del(strings[5645]);
32864str->del(strings[5666]);
32865strings[5644] = str->add(strings[5644]);
32866strings[5667] = str->add("#fa14");
32867str->del(strings[5644]);
32868str->del(strings[5667]);
32869strings[5635] = str->add(strings[5635]);
32870strings[471] = str->add(strings[471]);
32871str->del(strings[470]);
32872strings[471] = str->add(strings[471]);
32873str->del(strings[5635]);
32874str->del(strings[471]);
32875strings[470] = str->add(strings[470]);
32876strings[469] = str->add(strings[469]);
32877strings[5656] = str->add(strings[5656]);
32878strings[5668] = str->add("glow");
32879str->del(strings[5656]);
32880str->del(strings[5668]);
32881strings[5639] = str->add(strings[5639]);
32882strings[5669] = str->add("#fff");
32883str->del(strings[5639]);
32884str->del(strings[5669]);
32885strings[5645] = str->add(strings[5645]);
32886strings[5670] = str->add("#fe87");
32887str->del(strings[5645]);
32888str->del(strings[5670]);
32889strings[5644] = str->add(strings[5644]);
32890strings[5671] = str->add("#fa14");
32891str->del(strings[5644]);
32892str->del(strings[5671]);
32893strings[5635] = str->add(strings[5635]);
32894strings[471] = str->add(strings[471]);
32895str->del(strings[470]);
32896strings[471] = str->add(strings[471]);
32897str->del(strings[5635]);
32898str->del(strings[471]);
32899str->del(strings[5635]);
32900str->del(strings[5636]);
32901str->del(strings[5637]);
32902str->del(strings[5638]);
32903str->del(strings[5639]);
32904str->del(strings[5640]);
32905str->del(strings[5641]);
32906str->del(strings[5642]);
32907str->del(strings[5643]);
32908str->del(strings[5644]);
32909str->del(strings[5645]);
32910str->del(strings[5646]);
32911str->del(strings[5647]);
32912str->del(strings[5648]);
32913str->del(strings[5649]);
32914str->del(strings[5650]);
32915str->del(strings[5651]);
32916str->del(strings[5652]);
32917str->del(strings[5653]);
32918str->del(strings[5654]);
32919str->del(strings[5655]);
32920str->del(strings[5656]);
32921str->del(strings[5657]);
32922str->del(strings[382]);
32923str->del(strings[382]);
32924str->del(strings[382]);
32925str->del(strings[382]);
32926str->del(strings[382]);
32927str->del(strings[382]);
32928str->del(strings[471]);
32929str->del(strings[469]);
32930str->del(strings[470]);
32931str->del(strings[469]);
32932str->del(strings[471]);
32933str->del(strings[469]);
32934strings[5672] = str->add("font");
32935strings[5673] = str->add("font_fallbacks");
32936strings[5674] = str->add("font_size");
32937strings[5675] = str->add("font_source");
32938strings[5676] = str->add("color");
32939strings[5677] = str->add("underline_color");
32940strings[5678] = str->add("underline2_color");
32941strings[5679] = str->add("outline_color");
32942strings[5680] = str->add("shadow_color");
32943strings[5681] = str->add("glow_color");
32944strings[5682] = str->add("glow2_color");
32945strings[5683] = str->add("backing_color");
32946strings[5684] = str->add("strikethrough_color");
32947strings[5685] = str->add("align");
32948strings[5686] = str->add("valign");
32949strings[5687] = str->add("wrap");
32950strings[5688] = str->add("left_margin");
32951strings[5689] = str->add("right_margin");
32952strings[5690] = str->add("underline");
32953strings[5691] = str->add("strikethrough");
32954strings[5692] = str->add("backing");
32955strings[5693] = str->add("style");
32956strings[5694] = str->add("tabstops");
32957strings[5685] = str->add(strings[5685]);
32958strings[5695] = str->add("center");
32959str->del(strings[5685]);
32960str->del(strings[5695]);
32961strings[5676] = str->add(strings[5676]);
32962strings[5696] = str->add("#000");
32963str->del(strings[5676]);
32964str->del(strings[5696]);
32965strings[5693] = str->add(strings[5693]);
32966strings[5697] = str->add("shadow");
32967str->del(strings[5693]);
32968str->del(strings[5697]);
32969strings[5680] = str->add(strings[5680]);
32970strings[5698] = str->add("#ffffff80");
32971str->del(strings[5680]);
32972str->del(strings[5698]);
32973strings[5687] = str->add(strings[5687]);
32974strings[5699] = str->add("word");
32975str->del(strings[5687]);
32976str->del(strings[5699]);
32977strings[5675] = str->add(strings[5675]);
32978strings[469] = str->add(strings[469]);
32979strings[469] = str->add(strings[469]);
32980str->del(strings[5675]);
32981str->del(strings[469]);
32982strings[5674] = str->add(strings[5674]);
32983strings[5700] = str->add("10.000000");
32984str->del(strings[5674]);
32985str->del(strings[5700]);
32986strings[5672] = str->add(strings[5672]);
32987strings[470] = str->add(strings[470]);
32988strings[470] = str->add(strings[470]);
32989str->del(strings[5672]);
32990str->del(strings[470]);
32991strings[470] = str->add(strings[470]);
32992strings[469] = str->add(strings[469]);
32993strings[5693] = str->add(strings[5693]);
32994strings[5701] = str->add("soft_shadow");
32995str->del(strings[5693]);
32996str->del(strings[5701]);
32997strings[5676] = str->add(strings[5676]);
32998strings[5702] = str->add("#fff");
32999str->del(strings[5676]);
33000str->del(strings[5702]);
33001strings[5680] = str->add(strings[5680]);
33002strings[5703] = str->add("#00000020");
33003str->del(strings[5680]);
33004str->del(strings[5703]);
33005strings[5674] = str->add(strings[5674]);
33006strings[5704] = str->add("12.000000");
33007str->del(strings[5674]);
33008str->del(strings[5704]);
33009strings[5672] = str->add(strings[5672]);
33010strings[471] = str->add(strings[471]);
33011str->del(strings[470]);
33012strings[471] = str->add(strings[471]);
33013str->del(strings[5672]);
33014str->del(strings[471]);
33015strings[382] = str->add(strings[382]);
33016strings[382] = str->add(strings[382]);
33017strings[382] = str->add(strings[382]);
33018strings[382] = str->add(strings[382]);
33019strings[382] = str->add(strings[382]);
33020strings[382] = str->add(strings[382]);
33021strings[382] = str->add(strings[382]);
33022strings[382] = str->add(strings[382]);
33023strings[382] = str->add(strings[382]);
33024strings[382] = str->add(strings[382]);
33025strings[382] = str->add(strings[382]);
33026strings[382] = str->add(strings[382]);
33027strings[382] = str->add(strings[382]);
33028strings[382] = str->add(strings[382]);
33029strings[382] = str->add(strings[382]);
33030strings[382] = str->add(strings[382]);
33031strings[382] = str->add(strings[382]);
33032strings[382] = str->add(strings[382]);
33033strings[382] = str->add(strings[382]);
33034strings[382] = str->add(strings[382]);
33035strings[382] = str->add(strings[382]);
33036strings[382] = str->add(strings[382]);
33037str->del(strings[5672]);
33038str->del(strings[5673]);
33039str->del(strings[5674]);
33040str->del(strings[5675]);
33041str->del(strings[5676]);
33042str->del(strings[5677]);
33043str->del(strings[5678]);
33044str->del(strings[5679]);
33045str->del(strings[5680]);
33046str->del(strings[5681]);
33047str->del(strings[5682]);
33048str->del(strings[5683]);
33049str->del(strings[5684]);
33050str->del(strings[5685]);
33051str->del(strings[5686]);
33052str->del(strings[5687]);
33053str->del(strings[5688]);
33054str->del(strings[5689]);
33055str->del(strings[5690]);
33056str->del(strings[5691]);
33057str->del(strings[5692]);
33058str->del(strings[5693]);
33059str->del(strings[5694]);
33060str->del(strings[471]);
33061str->del(strings[469]);
33062str->del(strings[382]);
33063str->del(strings[382]);
33064str->del(strings[382]);
33065str->del(strings[382]);
33066str->del(strings[382]);
33067str->del(strings[382]);
33068str->del(strings[382]);
33069str->del(strings[382]);
33070str->del(strings[382]);
33071str->del(strings[382]);
33072str->del(strings[382]);
33073str->del(strings[382]);
33074str->del(strings[382]);
33075str->del(strings[382]);
33076str->del(strings[382]);
33077str->del(strings[382]);
33078str->del(strings[382]);
33079str->del(strings[382]);
33080str->del(strings[382]);
33081str->del(strings[382]);
33082str->del(strings[382]);
33083str->del(strings[470]);
33084str->del(strings[469]);
33085str->del(strings[382]);
33086str->del(strings[5633]);
33087str->del(strings[1841]);
33088str->del(strings[5633]);
33089str->del(strings[1841]);
33090str->del(strings[5633]);
33091str->del(strings[1841]);
33092str->del(strings[5633]);
33093str->del(strings[1841]);
33094str->del(strings[5634]);
33095str->del(strings[5634]);
33096str->del(strings[5633]);
33097str->del(strings[1841]);
33098str->del(strings[5633]);
33099str->del(strings[1841]);
33100str->del(strings[5633]);
33101str->del(strings[1841]);
33102str->del(strings[5633]);
33103str->del(strings[1841]);
33104str->del(strings[5634]);
33105str->del(strings[5634]);
33106str->del(strings[5633]);
33107str->del(strings[1841]);
33108str->del(strings[5633]);
33109str->del(strings[1841]);
33110str->del(strings[5633]);
33111str->del(strings[1841]);
33112str->del(strings[5633]);
33113str->del(strings[1841]);
33114str->del(strings[5633]);
33115str->del(strings[1841]);
33116str->del(strings[5634]);
33117str->del(strings[5634]);
33118str->del(strings[5633]);
33119str->del(strings[1841]);
33120str->del(strings[5633]);
33121str->del(strings[1841]);
33122str->del(strings[5633]);
33123str->del(strings[1841]);
33124str->del(strings[5633]);
33125str->del(strings[1841]);
33126str->del(strings[5634]);
33127str->del(strings[5634]);
33128str->del(strings[5633]);
33129str->del(strings[1841]);
33130str->del(strings[5634]);
33131str->del(strings[5634]);
33132str->del(strings[5634]);
33133str->del(strings[5634]);
33134str->del(strings[5634]);
33135str->del(strings[5634]);
33136str->del(strings[5634]);
33137str->del(strings[5634]);
33138str->del(strings[5634]);
33139str->del(strings[5634]);
33140str->del(strings[5634]);
33141str->del(strings[5634]);
33142str->del(strings[5634]);
33143str->del(strings[5634]);
33144str->del(strings[5634]);
33145str->del(strings[5634]);
33146str->del(strings[5634]);
33147str->del(strings[5634]);
33148strings[5705] = str->add("e,action,mouse,move");
33149strings[5706] = str->add("e");
33150strings[5705] = str->add(strings[5705]);
33151strings[5706] = str->add(strings[5706]);
33152str->del(strings[5705]);
33153str->del(strings[5706]);
33154str->del(strings[5705]);
33155str->del(strings[5706]);
33156strings[5707] = str->add("e,action,mouse,move");
33157strings[5708] = str->add("e");
33158str->del(strings[5707]);
33159str->del(strings[5708]);
33160strings[5709] = str->add("font");
33161strings[5710] = str->add("font_fallbacks");
33162strings[5711] = str->add("font_size");
33163strings[5712] = str->add("font_source");
33164strings[5713] = str->add("color");
33165strings[5714] = str->add("underline_color");
33166strings[5715] = str->add("underline2_color");
33167strings[5716] = str->add("outline_color");
33168strings[5717] = str->add("shadow_color");
33169strings[5718] = str->add("glow_color");
33170strings[5719] = str->add("glow2_color");
33171strings[5720] = str->add("backing_color");
33172strings[5721] = str->add("strikethrough_color");
33173strings[5722] = str->add("align");
33174strings[5723] = str->add("valign");
33175strings[5724] = str->add("wrap");
33176strings[5725] = str->add("left_margin");
33177strings[5726] = str->add("right_margin");
33178strings[5727] = str->add("underline");
33179strings[5728] = str->add("strikethrough");
33180strings[5729] = str->add("backing");
33181strings[5730] = str->add("style");
33182strings[5731] = str->add("tabstops");
33183strings[5722] = str->add(strings[5722]);
33184strings[5732] = str->add("center");
33185str->del(strings[5722]);
33186str->del(strings[5732]);
33187strings[5713] = str->add(strings[5713]);
33188strings[5733] = str->add("#000");
33189str->del(strings[5713]);
33190str->del(strings[5733]);
33191strings[5730] = str->add(strings[5730]);
33192strings[5734] = str->add("shadow");
33193str->del(strings[5730]);
33194str->del(strings[5734]);
33195strings[5717] = str->add(strings[5717]);
33196strings[5735] = str->add("#ffffff80");
33197str->del(strings[5717]);
33198str->del(strings[5735]);
33199strings[5724] = str->add(strings[5724]);
33200strings[5736] = str->add("word");
33201str->del(strings[5724]);
33202str->del(strings[5736]);
33203strings[5712] = str->add(strings[5712]);
33204strings[469] = str->add(strings[469]);
33205strings[469] = str->add(strings[469]);
33206str->del(strings[5712]);
33207str->del(strings[469]);
33208strings[5711] = str->add(strings[5711]);
33209strings[5737] = str->add("10.000000");
33210str->del(strings[5711]);
33211str->del(strings[5737]);
33212strings[5709] = str->add(strings[5709]);
33213strings[470] = str->add(strings[470]);
33214strings[470] = str->add(strings[470]);
33215str->del(strings[5709]);
33216str->del(strings[470]);
33217strings[470] = str->add(strings[470]);
33218strings[469] = str->add(strings[469]);
33219strings[5730] = str->add(strings[5730]);
33220strings[5738] = str->add("soft_shadow");
33221str->del(strings[5730]);
33222str->del(strings[5738]);
33223strings[5713] = str->add(strings[5713]);
33224strings[5739] = str->add("#fff");
33225str->del(strings[5713]);
33226str->del(strings[5739]);
33227strings[5717] = str->add(strings[5717]);
33228strings[5740] = str->add("#00000020");
33229str->del(strings[5717]);
33230str->del(strings[5740]);
33231strings[5711] = str->add(strings[5711]);
33232strings[5741] = str->add("12.000000");
33233str->del(strings[5711]);
33234str->del(strings[5741]);
33235strings[5709] = str->add(strings[5709]);
33236strings[471] = str->add(strings[471]);
33237str->del(strings[470]);
33238strings[471] = str->add(strings[471]);
33239str->del(strings[5709]);
33240str->del(strings[471]);
33241strings[382] = str->add(strings[382]);
33242strings[382] = str->add(strings[382]);
33243strings[382] = str->add(strings[382]);
33244strings[382] = str->add(strings[382]);
33245strings[382] = str->add(strings[382]);
33246strings[382] = str->add(strings[382]);
33247strings[382] = str->add(strings[382]);
33248strings[382] = str->add(strings[382]);
33249strings[382] = str->add(strings[382]);
33250strings[382] = str->add(strings[382]);
33251strings[382] = str->add(strings[382]);
33252strings[382] = str->add(strings[382]);
33253strings[382] = str->add(strings[382]);
33254strings[382] = str->add(strings[382]);
33255strings[382] = str->add(strings[382]);
33256strings[382] = str->add(strings[382]);
33257strings[382] = str->add(strings[382]);
33258strings[382] = str->add(strings[382]);
33259strings[382] = str->add(strings[382]);
33260strings[382] = str->add(strings[382]);
33261strings[382] = str->add(strings[382]);
33262strings[382] = str->add(strings[382]);
33263str->del(strings[471]);
33264str->del(strings[469]);
33265str->del(strings[382]);
33266str->del(strings[382]);
33267str->del(strings[382]);
33268str->del(strings[382]);
33269str->del(strings[382]);
33270str->del(strings[382]);
33271str->del(strings[382]);
33272str->del(strings[382]);
33273str->del(strings[382]);
33274str->del(strings[382]);
33275str->del(strings[382]);
33276str->del(strings[382]);
33277str->del(strings[382]);
33278str->del(strings[382]);
33279str->del(strings[382]);
33280str->del(strings[382]);
33281str->del(strings[382]);
33282str->del(strings[382]);
33283str->del(strings[382]);
33284str->del(strings[382]);
33285str->del(strings[382]);
33286str->del(strings[470]);
33287str->del(strings[469]);
33288str->del(strings[382]);
33289str->del(strings[5709]);
33290str->del(strings[5710]);
33291str->del(strings[5711]);
33292str->del(strings[5712]);
33293str->del(strings[5713]);
33294str->del(strings[5714]);
33295str->del(strings[5715]);
33296str->del(strings[5716]);
33297str->del(strings[5717]);
33298str->del(strings[5718]);
33299str->del(strings[5719]);
33300str->del(strings[5720]);
33301str->del(strings[5721]);
33302str->del(strings[5722]);
33303str->del(strings[5723]);
33304str->del(strings[5724]);
33305str->del(strings[5725]);
33306str->del(strings[5726]);
33307str->del(strings[5727]);
33308str->del(strings[5728]);
33309str->del(strings[5729]);
33310str->del(strings[5730]);
33311str->del(strings[5731]);
33312strings[5742] = str->add("e,action,mouse,move");
33313strings[5743] = str->add("e");
33314str->del(strings[5742]);
33315str->del(strings[5743]);
33316strings[5744] = str->add("e,action,mouse,move");
33317strings[5745] = str->add("e");
33318str->del(strings[5744]);
33319str->del(strings[5745]);
33320strings[5746] = str->add("e,action,mouse,move");
33321strings[5747] = str->add("e");
33322str->del(strings[5746]);
33323str->del(strings[5747]);
33324strings[5748] = str->add("e,action,mouse,move");
33325strings[5749] = str->add("e");
33326str->del(strings[5748]);
33327str->del(strings[5749]);
33328str->del(strings[7]);
33329str->del(strings[2479]);
33330strings[7] = str->add(strings[7]);
33331strings[2489] = str->add(strings[2489]);
33332strings[5750] = str->add("e,action,mouse,move");
33333strings[5751] = str->add("e");
33334str->del(strings[5750]);
33335str->del(strings[5751]);
33336strings[5752] = str->add("e,action,mouse,move");
33337strings[5753] = str->add("e");
33338str->del(strings[5752]);
33339str->del(strings[5753]);
33340strings[5754] = str->add("e,action,mouse,move");
33341strings[5755] = str->add("e");
33342str->del(strings[5754]);
33343str->del(strings[5755]);
33344strings[5756] = str->add("e,action,mouse,move");
33345strings[5757] = str->add("e");
33346str->del(strings[5756]);
33347str->del(strings[5757]);
33348strings[1932] = str->add(strings[1932]);
33349strings[1847] = str->add(strings[1847]);
33350strings[5758] = str->add("program,start");
33351strings[1848] = str->add(strings[1848]);
33352strings[1932] = str->add(strings[1932]);
33353strings[1848] = str->add(strings[1848]);
33354strings[5758] = str->add(strings[5758]);
33355strings[1847] = str->add(strings[1847]);
33356str->del(strings[1932]);
33357str->del(strings[1847]);
33358str->del(strings[5758]);
33359str->del(strings[1848]);
33360str->del(strings[1932]);
33361str->del(strings[1848]);
33362str->del(strings[5758]);
33363str->del(strings[1847]);
33364strings[5759] = str->add("e,action,mouse,move");
33365strings[5760] = str->add("e");
33366str->del(strings[5759]);
33367str->del(strings[5760]);
33368strings[5761] = str->add("e,action,mouse,move");
33369strings[5762] = str->add("e");
33370str->del(strings[5761]);
33371str->del(strings[5762]);
33372strings[5763] = str->add("e,action,mouse,move");
33373strings[5764] = str->add("e");
33374str->del(strings[5763]);
33375str->del(strings[5764]);
33376strings[5765] = str->add("e,action,mouse,move");
33377strings[5766] = str->add("e");
33378str->del(strings[5765]);
33379str->del(strings[5766]);
33380strings[5767] = str->add("e,action,mouse,move");
33381strings[5768] = str->add("e");
33382str->del(strings[5767]);
33383str->del(strings[5768]);
33384strings[1932] = str->add(strings[1932]);
33385strings[5769] = str->add("go_activeb26");
33386strings[5770] = str->add("program,start");
33387strings[5771] = str->add("go_activec26");
33388strings[1932] = str->add(strings[1932]);
33389strings[5772] = str->add("go_activeb4");
33390strings[5770] = str->add(strings[5770]);
33391strings[5773] = str->add("go_activec4");
33392str->del(strings[1932]);
33393str->del(strings[5769]);
33394str->del(strings[5770]);
33395str->del(strings[5771]);
33396str->del(strings[1932]);
33397str->del(strings[5772]);
33398str->del(strings[5770]);
33399str->del(strings[5773]);
33400str->del(strings[7]);
33401str->del(strings[2489]);
33402strings[7] = str->add(strings[7]);
33403strings[2508] = str->add(strings[2508]);
33404strings[5774] = str->add("e,action,mouse,move");
33405strings[5775] = str->add("e");
33406str->del(strings[5774]);
33407str->del(strings[5775]);
33408strings[5776] = str->add("e,action,mouse,move");
33409strings[5777] = str->add("e");
33410str->del(strings[5776]);
33411str->del(strings[5777]);
33412strings[5778] = str->add("e,action,mouse,move");
33413strings[5779] = str->add("e");
33414str->del(strings[5778]);
33415str->del(strings[5779]);
33416strings[5780] = str->add("e,action,mouse,move");
33417strings[5781] = str->add("e");
33418str->del(strings[5780]);
33419str->del(strings[5781]);
33420strings[5782] = str->add("e,action,mouse,move");
33421strings[5783] = str->add("e");
33422str->del(strings[5782]);
33423str->del(strings[5783]);
33424strings[5784] = str->add("e,action,mouse,move");
33425strings[5785] = str->add("e");
33426str->del(strings[5784]);
33427str->del(strings[5785]);
33428strings[5786] = str->add("e,action,mouse,move");
33429strings[5787] = str->add("e");
33430str->del(strings[5786]);
33431str->del(strings[5787]);
33432strings[5788] = str->add("e,action,mouse,move");
33433strings[5789] = str->add("e");
33434str->del(strings[5788]);
33435str->del(strings[5789]);
33436strings[1932] = str->add(strings[1932]);
33437strings[5790] = str->add("go_activec23");
33438strings[5791] = str->add("program,start");
33439strings[5792] = str->add("go_activeb23");
33440strings[1932] = str->add(strings[1932]);
33441strings[5793] = str->add("go_activec7");
33442strings[5791] = str->add(strings[5791]);
33443strings[5794] = str->add("go_activeb7");
33444str->del(strings[1932]);
33445str->del(strings[5790]);
33446str->del(strings[5791]);
33447str->del(strings[5792]);
33448str->del(strings[1932]);
33449str->del(strings[5793]);
33450str->del(strings[5791]);
33451str->del(strings[5794]);
33452str->del(strings[7]);
33453str->del(strings[2508]);
33454strings[7] = str->add(strings[7]);
33455strings[2518] = str->add(strings[2518]);
33456strings[5795] = str->add("e,action,mouse,move");
33457strings[5796] = str->add("e");
33458str->del(strings[5795]);
33459str->del(strings[5796]);
33460strings[5797] = str->add("e,action,mouse,move");
33461strings[5798] = str->add("e");
33462str->del(strings[5797]);
33463str->del(strings[5798]);
33464strings[5799] = str->add("e,action,mouse,move");
33465strings[5800] = str->add("e");
33466str->del(strings[5799]);
33467str->del(strings[5800]);
33468strings[5801] = str->add("e,action,mouse,move");
33469strings[5802] = str->add("e");
33470str->del(strings[5801]);
33471str->del(strings[5802]);
33472strings[1932] = str->add(strings[1932]);
33473strings[5803] = str->add("sel");
33474strings[1932] = str->add(strings[1932]);
33475strings[5803] = str->add(strings[5803]);
33476str->del(strings[1932]);
33477str->del(strings[5803]);
33478str->del(strings[1932]);
33479str->del(strings[5803]);
33480strings[5804] = str->add("e,action,mouse,move");
33481strings[5805] = str->add("e");
33482str->del(strings[5804]);
33483str->del(strings[5805]);
33484strings[5806] = str->add("e,action,mouse,move");
33485strings[5807] = str->add("e");
33486str->del(strings[5806]);
33487str->del(strings[5807]);
33488strings[5808] = str->add("e,action,mouse,move");
33489strings[5809] = str->add("e");
33490str->del(strings[5808]);
33491str->del(strings[5809]);
33492strings[5810] = str->add("e,action,mouse,move");
33493strings[5811] = str->add("e");
33494str->del(strings[5810]);
33495str->del(strings[5811]);
33496str->del(strings[7]);
33497str->del(strings[2518]);
33498strings[7] = str->add(strings[7]);
33499strings[2531] = str->add(strings[2531]);
33500strings[5812] = str->add("e,action,mouse,move");
33501strings[5813] = str->add("e");
33502str->del(strings[5812]);
33503str->del(strings[5813]);
33504strings[5814] = str->add("e,action,mouse,move");
33505strings[5815] = str->add("e");
33506str->del(strings[5814]);
33507str->del(strings[5815]);
33508strings[5816] = str->add("e,action,mouse,move");
33509strings[5817] = str->add("e");
33510str->del(strings[5816]);
33511str->del(strings[5817]);
33512strings[5818] = str->add("e,action,mouse,move");
33513strings[5819] = str->add("e");
33514str->del(strings[5818]);
33515str->del(strings[5819]);
33516strings[5820] = str->add("e,action,mouse,move");
33517strings[5821] = str->add("e");
33518str->del(strings[5820]);
33519str->del(strings[5821]);
33520strings[5822] = str->add("e,action,mouse,move");
33521strings[5823] = str->add("e");
33522str->del(strings[5822]);
33523str->del(strings[5823]);
33524strings[5824] = str->add("e,action,mouse,move");
33525strings[5825] = str->add("e");
33526str->del(strings[5824]);
33527str->del(strings[5825]);
33528strings[5826] = str->add("e,action,mouse,move");
33529strings[5827] = str->add("e");
33530str->del(strings[5826]);
33531str->del(strings[5827]);
33532strings[5828] = str->add("e,action,mouse,move");
33533strings[5829] = str->add("e");
33534strings[5830] = str->add("e,state,unselected");
33535strings[5829] = str->add(strings[5829]);
33536strings[5830] = str->add(strings[5830]);
33537strings[5829] = str->add(strings[5829]);
33538strings[5830] = str->add(strings[5830]);
33539strings[5829] = str->add(strings[5829]);
33540strings[5830] = str->add(strings[5830]);
33541strings[5829] = str->add(strings[5829]);
33542strings[5830] = str->add(strings[5830]);
33543strings[5829] = str->add(strings[5829]);
33544strings[5830] = str->add(strings[5830]);
33545strings[5829] = str->add(strings[5829]);
33546str->del(strings[5828]);
33547str->del(strings[5829]);
33548strings[5831] = str->add("program,start");
33549strings[5832] = str->add("unsel");
33550str->del(strings[5830]);
33551str->del(strings[5829]);
33552str->del(strings[5830]);
33553str->del(strings[5829]);
33554strings[5831] = str->add(strings[5831]);
33555strings[5832] = str->add(strings[5832]);
33556str->del(strings[5830]);
33557str->del(strings[5829]);
33558strings[5831] = str->add(strings[5831]);
33559strings[5832] = str->add(strings[5832]);
33560strings[1932] = str->add(strings[1932]);
33561strings[5832] = str->add(strings[5832]);
33562str->del(strings[5830]);
33563str->del(strings[5829]);
33564strings[1932] = str->add(strings[1932]);
33565strings[5833] = str->add("e_in");
33566strings[5831] = str->add(strings[5831]);
33567strings[5834] = str->add("e_out");
33568str->del(strings[5830]);
33569str->del(strings[5829]);
33570str->del(strings[5830]);
33571str->del(strings[5829]);
33572str->del(strings[5831]);
33573str->del(strings[5832]);
33574str->del(strings[5831]);
33575str->del(strings[5832]);
33576str->del(strings[5831]);
33577str->del(strings[5832]);
33578str->del(strings[1932]);
33579str->del(strings[5832]);
33580str->del(strings[1932]);
33581str->del(strings[5833]);
33582str->del(strings[5831]);
33583str->del(strings[5834]);
33584str->del(strings[64]);
33585str->del(strings[3021]);
33586strings[64] = str->add(strings[64]);
33587strings[2913] = str->add(strings[2913]);
33588strings[1932] = str->add(strings[1932]);
33589strings[5835] = str->add("go_activeb25");
33590strings[5836] = str->add("program,start");
33591strings[5837] = str->add("go_activec25");
33592strings[1932] = str->add(strings[1932]);
33593strings[5838] = str->add("go_activeb5");
33594strings[5836] = str->add(strings[5836]);
33595strings[5839] = str->add("go_activec5");
33596str->del(strings[1932]);
33597str->del(strings[5835]);
33598str->del(strings[5836]);
33599str->del(strings[5837]);
33600str->del(strings[1932]);
33601str->del(strings[5838]);
33602str->del(strings[5836]);
33603str->del(strings[5839]);
33604str->del(strings[7]);
33605str->del(strings[2531]);
33606strings[7] = str->add(strings[7]);
33607strings[2544] = str->add(strings[2544]);
33608strings[5840] = str->add("e,action,mouse,move");
33609strings[5841] = str->add("e");
33610strings[5842] = str->add("e,state,selected");
33611strings[5841] = str->add(strings[5841]);
33612strings[5842] = str->add(strings[5842]);
33613strings[5841] = str->add(strings[5841]);
33614strings[5842] = str->add(strings[5842]);
33615strings[5841] = str->add(strings[5841]);
33616strings[5842] = str->add(strings[5842]);
33617strings[5841] = str->add(strings[5841]);
33618strings[5842] = str->add(strings[5842]);
33619strings[5841] = str->add(strings[5841]);
33620str->del(strings[5840]);
33621str->del(strings[5841]);
33622strings[5843] = str->add("program,start");
33623strings[5844] = str->add("sel");
33624str->del(strings[5842]);
33625str->del(strings[5841]);
33626str->del(strings[5842]);
33627str->del(strings[5841]);
33628strings[5843] = str->add(strings[5843]);
33629strings[5844] = str->add(strings[5844]);
33630str->del(strings[5842]);
33631str->del(strings[5841]);
33632strings[5843] = str->add(strings[5843]);
33633strings[5845] = str->add("e_in");
33634str->del(strings[5842]);
33635str->del(strings[5841]);
33636str->del(strings[5842]);
33637str->del(strings[5841]);
33638str->del(strings[5843]);
33639str->del(strings[5844]);
33640str->del(strings[5843]);
33641str->del(strings[5844]);
33642str->del(strings[5843]);
33643str->del(strings[5845]);
33644strings[5846] = str->add("e,action,mouse,move");
33645strings[5847] = str->add("e");
33646str->del(strings[5846]);
33647str->del(strings[5847]);
33648strings[5848] = str->add("e,action,mouse,move");
33649strings[5849] = str->add("e");
33650str->del(strings[5848]);
33651str->del(strings[5849]);
33652strings[5850] = str->add("e,action,mouse,move");
33653strings[5851] = str->add("e");
33654str->del(strings[5850]);
33655str->del(strings[5851]);
33656strings[5852] = str->add("e,action,mouse,move");
33657strings[5853] = str->add("e");
33658str->del(strings[5852]);
33659str->del(strings[5853]);
33660strings[5854] = str->add("e,action,mouse,move");
33661strings[5855] = str->add("e");
33662str->del(strings[5854]);
33663str->del(strings[5855]);
33664strings[1932] = str->add(strings[1932]);
33665strings[5856] = str->add("go_activec22");
33666strings[5857] = str->add("program,start");
33667strings[5858] = str->add("go_activeb22");
33668strings[1932] = str->add(strings[1932]);
33669strings[5859] = str->add("go_activec8");
33670strings[5857] = str->add(strings[5857]);
33671strings[5860] = str->add("go_activeb8");
33672str->del(strings[1932]);
33673str->del(strings[5856]);
33674str->del(strings[5857]);
33675str->del(strings[5858]);
33676str->del(strings[1932]);
33677str->del(strings[5859]);
33678str->del(strings[5857]);
33679str->del(strings[5860]);
33680str->del(strings[7]);
33681str->del(strings[2544]);
33682strings[7] = str->add(strings[7]);
33683strings[2561] = str->add(strings[2561]);
33684strings[5861] = str->add("e,action,mouse,move");
33685strings[5862] = str->add("e");
33686str->del(strings[5861]);
33687str->del(strings[5862]);
33688strings[5863] = str->add("e,action,mouse,move");
33689strings[5864] = str->add("e");
33690str->del(strings[5863]);
33691str->del(strings[5864]);
33692strings[5865] = str->add("e,action,mouse,move");
33693strings[5866] = str->add("e");
33694str->del(strings[5865]);
33695str->del(strings[5866]);
33696strings[5867] = str->add("e,action,mouse,move");
33697strings[5868] = str->add("e");
33698str->del(strings[5867]);
33699str->del(strings[5868]);
33700strings[5869] = str->add("e,action,mouse,move");
33701strings[5870] = str->add("e");
33702str->del(strings[5869]);
33703str->del(strings[5870]);
33704strings[5871] = str->add("e,action,mouse,move");
33705strings[5872] = str->add("e");
33706str->del(strings[5871]);
33707str->del(strings[5872]);
33708strings[5873] = str->add("e,action,mouse,move");
33709strings[5874] = str->add("e");
33710str->del(strings[5873]);
33711str->del(strings[5874]);
33712strings[5875] = str->add("e,action,mouse,move");
33713strings[5876] = str->add("e");
33714str->del(strings[5875]);
33715str->del(strings[5876]);
33716strings[1932] = str->add(strings[1932]);
33717strings[5877] = str->add("unsel");
33718str->del(strings[1932]);
33719str->del(strings[5877]);
33720str->del(strings[7]);
33721str->del(strings[2561]);
33722strings[7] = str->add(strings[7]);
33723strings[3580] = str->add(strings[3580]);
33724strings[5878] = str->add("e,action,mouse,move");
33725strings[5879] = str->add("e");
33726str->del(strings[5878]);
33727str->del(strings[5879]);
33728strings[5880] = str->add("e,action,mouse,move");
33729strings[5881] = str->add("e");
33730str->del(strings[5880]);
33731str->del(strings[5881]);
33732strings[5882] = str->add("e,action,mouse,move");
33733strings[5883] = str->add("e");
33734str->del(strings[5882]);
33735str->del(strings[5883]);
33736strings[1932] = str->add(strings[1932]);
33737strings[5884] = str->add("go_activeb24");
33738strings[5885] = str->add("program,start");
33739strings[5886] = str->add("go_activec24");
33740strings[1932] = str->add(strings[1932]);
33741strings[5887] = str->add("go_activeb6");
33742strings[5885] = str->add(strings[5885]);
33743strings[5888] = str->add("go_activec6");
33744str->del(strings[1932]);
33745str->del(strings[5884]);
33746str->del(strings[5885]);
33747str->del(strings[5886]);
33748str->del(strings[1932]);
33749str->del(strings[5887]);
33750str->del(strings[5885]);
33751str->del(strings[5888]);
33752strings[5889] = str->add("e,action,mouse,move");
33753strings[5890] = str->add("e");
33754str->del(strings[5889]);
33755str->del(strings[5890]);
33756strings[5891] = str->add("e,action,mouse,move");
33757strings[5892] = str->add("e");
33758str->del(strings[5891]);
33759str->del(strings[5892]);
33760str->del(strings[7]);
33761str->del(strings[3580]);
33762strings[7] = str->add(strings[7]);
33763strings[1756] = str->add(strings[1756]);
33764strings[5893] = str->add("e,action,mouse,move");
33765strings[5894] = str->add("e");
33766str->del(strings[5893]);
33767str->del(strings[5894]);
33768strings[5895] = str->add("e,action,mouse,move");
33769strings[5896] = str->add("e");
33770strings[5897] = str->add("e,state,unselected");
33771strings[5896] = str->add(strings[5896]);
33772strings[5897] = str->add(strings[5897]);
33773strings[5896] = str->add(strings[5896]);
33774strings[5897] = str->add(strings[5897]);
33775strings[5896] = str->add(strings[5896]);
33776strings[5897] = str->add(strings[5897]);
33777strings[5896] = str->add(strings[5896]);
33778strings[5897] = str->add(strings[5897]);
33779strings[5896] = str->add(strings[5896]);
33780strings[5898] = str->add("e,state,selected");
33781strings[5896] = str->add(strings[5896]);
33782strings[5898] = str->add(strings[5898]);
33783strings[5896] = str->add(strings[5896]);
33784strings[5898] = str->add(strings[5898]);
33785strings[5896] = str->add(strings[5896]);
33786strings[5898] = str->add(strings[5898]);
33787strings[5896] = str->add(strings[5896]);
33788strings[5898] = str->add(strings[5898]);
33789strings[5896] = str->add(strings[5896]);
33790str->del(strings[5895]);
33791str->del(strings[5896]);
33792strings[1932] = str->add(strings[1932]);
33793strings[5899] = str->add("sel");
33794strings[5900] = str->add("program,start");
33795strings[5901] = str->add("unsel");
33796str->del(strings[5897]);
33797str->del(strings[5896]);
33798str->del(strings[5897]);
33799str->del(strings[5896]);
33800strings[1932] = str->add(strings[1932]);
33801strings[5899] = str->add(strings[5899]);
33802strings[5900] = str->add(strings[5900]);
33803strings[5901] = str->add(strings[5901]);
33804str->del(strings[5897]);
33805str->del(strings[5896]);
33806strings[1932] = str->add(strings[1932]);
33807strings[5902] = str->add("e_in");
33808strings[5900] = str->add(strings[5900]);
33809strings[5903] = str->add("e_out");
33810str->del(strings[5897]);
33811str->del(strings[5896]);
33812str->del(strings[5897]);
33813str->del(strings[5896]);
33814strings[5900] = str->add(strings[5900]);
33815strings[5899] = str->add(strings[5899]);
33816str->del(strings[5898]);
33817str->del(strings[5896]);
33818str->del(strings[5898]);
33819str->del(strings[5896]);
33820strings[5900] = str->add(strings[5900]);
33821strings[5899] = str->add(strings[5899]);
33822str->del(strings[5898]);
33823str->del(strings[5896]);
33824str->del(strings[5898]);
33825str->del(strings[5896]);
33826str->del(strings[5898]);
33827str->del(strings[5896]);
33828str->del(strings[1932]);
33829str->del(strings[5899]);
33830str->del(strings[5900]);
33831str->del(strings[5901]);
33832str->del(strings[1932]);
33833str->del(strings[5899]);
33834str->del(strings[5900]);
33835str->del(strings[5901]);
33836str->del(strings[1932]);
33837str->del(strings[5902]);
33838str->del(strings[5900]);
33839str->del(strings[5903]);
33840str->del(strings[5900]);
33841str->del(strings[5899]);
33842str->del(strings[5900]);
33843str->del(strings[5899]);
33844strings[5904] = str->add("e,action,mouse,move");
33845strings[5905] = str->add("e");
33846str->del(strings[5904]);
33847str->del(strings[5905]);
33848strings[5906] = str->add("e,action,mouse,move");
33849strings[5907] = str->add("e");
33850str->del(strings[5906]);
33851str->del(strings[5907]);
33852strings[5908] = str->add("e,action,mouse,move");
33853strings[5909] = str->add("e");
33854str->del(strings[5908]);
33855str->del(strings[5909]);
33856strings[5910] = str->add("e,action,mouse,move");
33857strings[5911] = str->add("e");
33858str->del(strings[5910]);
33859str->del(strings[5911]);
33860strings[5912] = str->add("e,action,mouse,move");
33861strings[5913] = str->add("e");
33862str->del(strings[5912]);
33863str->del(strings[5913]);
33864strings[5914] = str->add("e,action,mouse,move");
33865strings[5915] = str->add("e");
33866str->del(strings[5914]);
33867str->del(strings[5915]);
33868strings[5916] = str->add("e,action,mouse,move");
33869strings[5917] = str->add("e");
33870str->del(strings[5916]);
33871str->del(strings[5917]);
33872strings[1932] = str->add(strings[1932]);
33873strings[5918] = str->add("go_activec21");
33874strings[5919] = str->add("program,start");
33875strings[5920] = str->add("go_activeb21");
33876strings[1932] = str->add(strings[1932]);
33877strings[5921] = str->add("go_activec9");
33878strings[5919] = str->add(strings[5919]);
33879strings[5922] = str->add("go_activeb9");
33880str->del(strings[1932]);
33881str->del(strings[5918]);
33882str->del(strings[5919]);
33883str->del(strings[5920]);
33884str->del(strings[1932]);
33885str->del(strings[5921]);
33886str->del(strings[5919]);
33887str->del(strings[5922]);
33888str->del(strings[7]);
33889str->del(strings[1756]);
33890strings[7] = str->add(strings[7]);
33891strings[1949] = str->add(strings[1949]);
33892strings[5923] = str->add("e,action,mouse,move");
33893strings[5924] = str->add("e");
33894str->del(strings[5923]);
33895str->del(strings[5924]);
33896strings[5925] = str->add("e,action,mouse,move");
33897strings[5926] = str->add("e");
33898str->del(strings[5925]);
33899str->del(strings[5926]);
33900strings[5927] = str->add("e,action,mouse,move");
33901strings[5928] = str->add("e");
33902str->del(strings[5927]);
33903str->del(strings[5928]);
33904strings[5929] = str->add("e,action,mouse,move");
33905strings[5930] = str->add("e");
33906str->del(strings[5929]);
33907str->del(strings[5930]);
33908strings[5931] = str->add("e,action,mouse,move");
33909strings[5932] = str->add("e");
33910str->del(strings[5931]);
33911str->del(strings[5932]);
33912strings[5933] = str->add("e,action,mouse,move");
33913strings[5934] = str->add("e");
33914str->del(strings[5933]);
33915str->del(strings[5934]);
33916strings[1932] = str->add(strings[1932]);
33917strings[5935] = str->add("unsel");
33918strings[1932] = str->add(strings[1932]);
33919strings[5935] = str->add(strings[5935]);
33920str->del(strings[1932]);
33921str->del(strings[5935]);
33922str->del(strings[1932]);
33923str->del(strings[5935]);
33924str->del(strings[7]);
33925str->del(strings[1949]);
33926strings[7] = str->add(strings[7]);
33927strings[2915] = str->add(strings[2915]);
33928strings[5936] = str->add("e,action,mouse,move");
33929strings[5937] = str->add("e");
33930str->del(strings[5936]);
33931str->del(strings[5937]);
33932strings[5938] = str->add("e,action,mouse,move");
33933strings[5939] = str->add("e");
33934str->del(strings[5938]);
33935str->del(strings[5939]);
33936strings[1932] = str->add(strings[1932]);
33937strings[5940] = str->add("go_activec1");
33938strings[5941] = str->add("program,start");
33939strings[5942] = str->add("go_activeb1");
33940strings[1932] = str->add(strings[1932]);
33941strings[5943] = str->add("go_activec29");
33942strings[5941] = str->add(strings[5941]);
33943strings[5944] = str->add("go_activeb29");
33944strings[1932] = str->add(strings[1932]);
33945strings[5945] = str->add("go_activeb23");
33946strings[5941] = str->add(strings[5941]);
33947strings[5946] = str->add("go_activec23");
33948strings[1932] = str->add(strings[1932]);
33949strings[5947] = str->add("go_activeb7");
33950strings[5941] = str->add(strings[5941]);
33951strings[5948] = str->add("go_activec7");
33952str->del(strings[1932]);
33953str->del(strings[5940]);
33954str->del(strings[5941]);
33955str->del(strings[5942]);
33956str->del(strings[1932]);
33957str->del(strings[5943]);
33958str->del(strings[5941]);
33959str->del(strings[5944]);
33960str->del(strings[1932]);
33961str->del(strings[5945]);
33962str->del(strings[5941]);
33963str->del(strings[5946]);
33964str->del(strings[1932]);
33965str->del(strings[5947]);
33966str->del(strings[5941]);
33967str->del(strings[5948]);
33968strings[5949] = str->add("e,action,mouse,move");
33969strings[5950] = str->add("e");
33970str->del(strings[5949]);
33971str->del(strings[5950]);
33972strings[5951] = str->add("e,action,mouse,move");
33973strings[5952] = str->add("e");
33974str->del(strings[5951]);
33975str->del(strings[5952]);
33976strings[5953] = str->add("e,action,mouse,move");
33977strings[5954] = str->add("e");
33978str->del(strings[5953]);
33979str->del(strings[5954]);
33980str->del(strings[7]);
33981str->del(strings[2915]);
33982strings[7] = str->add(strings[7]);
33983strings[2886] = str->add(strings[2886]);
33984strings[5955] = str->add("e,action,mouse,move");
33985strings[5956] = str->add("e");
33986str->del(strings[5955]);
33987str->del(strings[5956]);
33988strings[1932] = str->add(strings[1932]);
33989strings[5957] = str->add("sel");
33990strings[1932] = str->add(strings[1932]);
33991strings[5957] = str->add(strings[5957]);
33992str->del(strings[1932]);
33993str->del(strings[5957]);
33994str->del(strings[1932]);
33995str->del(strings[5957]);
33996str->del(strings[7]);
33997str->del(strings[2886]);
33998strings[7] = str->add(strings[7]);
33999strings[2888] = str->add(strings[2888]);
34000strings[1932] = str->add(strings[1932]);
34001strings[5958] = str->add("e_out");
34002str->del(strings[1932]);
34003str->del(strings[5958]);
34004strings[1932] = str->add(strings[1932]);
34005strings[5959] = str->add("unsel");
34006str->del(strings[1932]);
34007str->del(strings[5959]);
34008str->del(strings[7]);
34009str->del(strings[2888]);
34010strings[7] = str->add(strings[7]);
34011strings[2913] = str->add(strings[2913]);
34012strings[5960] = str->add("e,action,mouse,move");
34013strings[5961] = str->add("e");
34014str->del(strings[5960]);
34015str->del(strings[5961]);
34016strings[5962] = str->add("e,action,mouse,move");
34017strings[5963] = str->add("e");
34018str->del(strings[5962]);
34019str->del(strings[5963]);
34020strings[5964] = str->add("e,action,mouse,move");
34021strings[5965] = str->add("e");
34022str->del(strings[5964]);
34023str->del(strings[5965]);
34024strings[5966] = str->add("e,action,mouse,move");
34025strings[5967] = str->add("e");
34026str->del(strings[5966]);
34027str->del(strings[5967]);
34028strings[5968] = str->add("e,action,mouse,move");
34029strings[5969] = str->add("e");
34030str->del(strings[5968]);
34031str->del(strings[5969]);
34032strings[5970] = str->add("e,action,mouse,move");
34033strings[5971] = str->add("e");
34034str->del(strings[5970]);
34035str->del(strings[5971]);
34036strings[1932] = str->add(strings[1932]);
34037strings[5972] = str->add("go_activec28");
34038strings[5973] = str->add("program,start");
34039strings[5974] = str->add("go_activeb28");
34040strings[1932] = str->add(strings[1932]);
34041strings[5975] = str->add("go_activec2");
34042strings[5973] = str->add(strings[5973]);
34043strings[5976] = str->add("go_activeb2");
34044strings[1932] = str->add(strings[1932]);
34045strings[5977] = str->add("go_activeb22");
34046strings[5973] = str->add(strings[5973]);
34047strings[5978] = str->add("go_activec22");
34048strings[1932] = str->add(strings[1932]);
34049strings[5979] = str->add("go_activeb8");
34050strings[5973] = str->add(strings[5973]);
34051strings[5980] = str->add("go_activec8");
34052str->del(strings[1932]);
34053str->del(strings[5972]);
34054str->del(strings[5973]);
34055str->del(strings[5974]);
34056str->del(strings[1932]);
34057str->del(strings[5975]);
34058str->del(strings[5973]);
34059str->del(strings[5976]);
34060str->del(strings[1932]);
34061str->del(strings[5977]);
34062str->del(strings[5973]);
34063str->del(strings[5978]);
34064str->del(strings[1932]);
34065str->del(strings[5979]);
34066str->del(strings[5973]);
34067str->del(strings[5980]);
34068str->del(strings[7]);
34069str->del(strings[2913]);
34070strings[7] = str->add(strings[7]);
34071strings[3021] = str->add(strings[3021]);
34072str->del(strings[7]);
34073str->del(strings[3021]);
34074strings[7] = str->add(strings[7]);
34075strings[3695] = str->add(strings[3695]);
34076strings[5981] = str->add("e,action,mouse,move");
34077strings[5982] = str->add("e");
34078strings[5983] = str->add("e,action,mouse,down");
34079strings[5982] = str->add(strings[5982]);
34080str->del(strings[5981]);
34081str->del(strings[5982]);
34082str->del(strings[5983]);
34083str->del(strings[5982]);
34084strings[1932] = str->add(strings[1932]);
34085strings[5984] = str->add("e_out");
34086str->del(strings[1932]);
34087str->del(strings[5984]);
34088str->del(strings[7]);
34089str->del(strings[3695]);
34090strings[7] = str->add(strings[7]);
34091strings[3698] = str->add(strings[3698]);
34092strings[5985] = str->add("e,action,mouse,move");
34093strings[5986] = str->add("e");
34094strings[5987] = str->add("e,action,mouse,up");
34095strings[5986] = str->add(strings[5986]);
34096strings[361] = str->add(strings[361]);
34097strings[362] = str->add(strings[362]);
34098strings[361] = str->add(strings[361]);
34099str->del(strings[361]);
34100strings[362] = str->add(strings[362]);
34101str->del(strings[362]);
34102strings[64] = str->add(strings[64]);
34103strings[2770] = str->add(strings[2770]);
34104str->del(strings[64]);
34105str->del(strings[2770]);
34106strings[469] = str->add(strings[469]);
34107strings[2770] = str->add(strings[2770]);
34108strings[2770] = str->add(strings[2770]);
34109strings[469] = str->add(strings[469]);
34110strings[5988] = str->add("load");
34111strings[1841] = str->add(strings[1841]);
34112strings[3712] = str->add(strings[3712]);
34113strings[5989] = str->add("resize");
34114strings[469] = str->add(strings[469]);
34115strings[4177] = str->add(strings[4177]);
34116strings[469] = str->add(strings[469]);
34117strings[4179] = str->add(strings[4179]);
34118strings[469] = str->add(strings[469]);
34119strings[4181] = str->add(strings[4181]);
34120strings[469] = str->add(strings[469]);
34121strings[5990] = str->add("images/267");
34122strings[5991] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/267");
34123strings[469] = str->add(strings[469]);
34124strings[5990] = str->add(strings[5990]);
34125strings[469] = str->add(strings[469]);
34126strings[4336] = str->add(strings[4336]);
34127strings[5992] = str->add("font");
34128strings[5993] = str->add("font_fallbacks");
34129strings[5994] = str->add("font_size");
34130strings[5995] = str->add("font_source");
34131strings[5996] = str->add("color");
34132strings[5997] = str->add("underline_color");
34133strings[5998] = str->add("underline2_color");
34134strings[5999] = str->add("outline_color");
34135strings[6000] = str->add("shadow_color");
34136strings[6001] = str->add("glow_color");
34137strings[6002] = str->add("glow2_color");
34138strings[6003] = str->add("backing_color");
34139strings[6004] = str->add("strikethrough_color");
34140strings[6005] = str->add("align");
34141strings[6006] = str->add("valign");
34142strings[6007] = str->add("wrap");
34143strings[6008] = str->add("left_margin");
34144strings[6009] = str->add("right_margin");
34145strings[6010] = str->add("underline");
34146strings[6011] = str->add("strikethrough");
34147strings[6012] = str->add("backing");
34148strings[6013] = str->add("style");
34149strings[6014] = str->add("tabstops");
34150strings[6013] = str->add(strings[6013]);
34151strings[6015] = str->add("glow");
34152str->del(strings[6013]);
34153str->del(strings[6015]);
34154strings[5996] = str->add(strings[5996]);
34155strings[6016] = str->add("#fff");
34156str->del(strings[5996]);
34157str->del(strings[6016]);
34158strings[6002] = str->add(strings[6002]);
34159strings[6017] = str->add("#fe87");
34160str->del(strings[6002]);
34161str->del(strings[6017]);
34162strings[6001] = str->add(strings[6001]);
34163strings[6018] = str->add("#fa14");
34164str->del(strings[6001]);
34165str->del(strings[6018]);
34166strings[6005] = str->add(strings[6005]);
34167strings[6019] = str->add("center");
34168str->del(strings[6005]);
34169str->del(strings[6019]);
34170strings[6007] = str->add(strings[6007]);
34171strings[6020] = str->add("word");
34172str->del(strings[6007]);
34173str->del(strings[6020]);
34174strings[5995] = str->add(strings[5995]);
34175strings[469] = str->add(strings[469]);
34176strings[469] = str->add(strings[469]);
34177str->del(strings[5995]);
34178str->del(strings[469]);
34179strings[5994] = str->add(strings[5994]);
34180strings[6021] = str->add("12.000000");
34181str->del(strings[5994]);
34182str->del(strings[6021]);
34183strings[5992] = str->add(strings[5992]);
34184strings[470] = str->add(strings[470]);
34185strings[470] = str->add(strings[470]);
34186str->del(strings[5992]);
34187str->del(strings[470]);
34188strings[470] = str->add(strings[470]);
34189strings[469] = str->add(strings[469]);
34190strings[5992] = str->add(strings[5992]);
34191strings[471] = str->add(strings[471]);
34192str->del(strings[470]);
34193strings[471] = str->add(strings[471]);
34194str->del(strings[5992]);
34195str->del(strings[471]);
34196strings[382] = str->add(strings[382]);
34197strings[382] = str->add(strings[382]);
34198strings[470] = str->add(strings[470]);
34199strings[469] = str->add(strings[469]);
34200strings[6013] = str->add(strings[6013]);
34201strings[6022] = str->add("none");
34202str->del(strings[6013]);
34203str->del(strings[6022]);
34204strings[5996] = str->add(strings[5996]);
34205strings[6023] = str->add("#0002");
34206str->del(strings[5996]);
34207str->del(strings[6023]);
34208strings[5994] = str->add(strings[5994]);
34209strings[6024] = str->add("7.000000");
34210strings[470] = str->add(strings[470]);
34211str->del(strings[470]);
34212strings[470] = str->add(strings[470]);
34213strings[469] = str->add(strings[469]);
34214str->del(strings[5994]);
34215str->del(strings[6024]);
34216strings[5992] = str->add(strings[5992]);
34217strings[470] = str->add(strings[470]);
34218str->del(strings[5992]);
34219str->del(strings[470]);
34220strings[5992] = str->add(strings[5992]);
34221strings[5993] = str->add(strings[5993]);
34222strings[5994] = str->add(strings[5994]);
34223strings[5995] = str->add(strings[5995]);
34224strings[5996] = str->add(strings[5996]);
34225strings[5997] = str->add(strings[5997]);
34226strings[5998] = str->add(strings[5998]);
34227strings[5999] = str->add(strings[5999]);
34228strings[6000] = str->add(strings[6000]);
34229strings[6001] = str->add(strings[6001]);
34230strings[6002] = str->add(strings[6002]);
34231strings[6003] = str->add(strings[6003]);
34232strings[6004] = str->add(strings[6004]);
34233strings[6005] = str->add(strings[6005]);
34234strings[6006] = str->add(strings[6006]);
34235strings[6007] = str->add(strings[6007]);
34236strings[6008] = str->add(strings[6008]);
34237strings[6009] = str->add(strings[6009]);
34238strings[6010] = str->add(strings[6010]);
34239strings[6011] = str->add(strings[6011]);
34240strings[6012] = str->add(strings[6012]);
34241strings[6013] = str->add(strings[6013]);
34242strings[6014] = str->add(strings[6014]);
34243strings[6013] = str->add(strings[6013]);
34244strings[6025] = str->add("glow");
34245str->del(strings[6013]);
34246str->del(strings[6025]);
34247strings[5996] = str->add(strings[5996]);
34248strings[6026] = str->add("#fff");
34249str->del(strings[5996]);
34250str->del(strings[6026]);
34251strings[6002] = str->add(strings[6002]);
34252strings[6027] = str->add("#fe87");
34253str->del(strings[6002]);
34254str->del(strings[6027]);
34255strings[6001] = str->add(strings[6001]);
34256strings[6028] = str->add("#fa14");
34257str->del(strings[6001]);
34258str->del(strings[6028]);
34259strings[6005] = str->add(strings[6005]);
34260strings[6029] = str->add("center");
34261str->del(strings[6005]);
34262str->del(strings[6029]);
34263strings[6007] = str->add(strings[6007]);
34264strings[6030] = str->add("word");
34265str->del(strings[6007]);
34266str->del(strings[6030]);
34267strings[5995] = str->add(strings[5995]);
34268strings[469] = str->add(strings[469]);
34269strings[469] = str->add(strings[469]);
34270str->del(strings[5995]);
34271str->del(strings[469]);
34272strings[5994] = str->add(strings[5994]);
34273strings[6031] = str->add("12.000000");
34274str->del(strings[5994]);
34275str->del(strings[6031]);
34276strings[5992] = str->add(strings[5992]);
34277strings[470] = str->add(strings[470]);
34278strings[470] = str->add(strings[470]);
34279str->del(strings[5992]);
34280str->del(strings[470]);
34281strings[470] = str->add(strings[470]);
34282strings[469] = str->add(strings[469]);
34283strings[5992] = str->add(strings[5992]);
34284strings[471] = str->add(strings[471]);
34285str->del(strings[470]);
34286strings[471] = str->add(strings[471]);
34287str->del(strings[5992]);
34288str->del(strings[471]);
34289strings[382] = str->add(strings[382]);
34290strings[382] = str->add(strings[382]);
34291strings[470] = str->add(strings[470]);
34292strings[469] = str->add(strings[469]);
34293strings[6013] = str->add(strings[6013]);
34294strings[6032] = str->add("none");
34295str->del(strings[6013]);
34296str->del(strings[6032]);
34297strings[5996] = str->add(strings[5996]);
34298strings[6033] = str->add("#0002");
34299str->del(strings[5996]);
34300str->del(strings[6033]);
34301strings[5994] = str->add(strings[5994]);
34302strings[6034] = str->add("7.000000");
34303str->del(strings[5994]);
34304str->del(strings[6034]);
34305strings[5992] = str->add(strings[5992]);
34306strings[470] = str->add(strings[470]);
34307str->del(strings[5992]);
34308str->del(strings[470]);
34309str->del(strings[5992]);
34310str->del(strings[5993]);
34311str->del(strings[5994]);
34312str->del(strings[5995]);
34313str->del(strings[5996]);
34314str->del(strings[5997]);
34315str->del(strings[5998]);
34316str->del(strings[5999]);
34317str->del(strings[6000]);
34318str->del(strings[6001]);
34319str->del(strings[6002]);
34320str->del(strings[6003]);
34321str->del(strings[6004]);
34322str->del(strings[6005]);
34323str->del(strings[6006]);
34324str->del(strings[6007]);
34325str->del(strings[6008]);
34326str->del(strings[6009]);
34327str->del(strings[6010]);
34328str->del(strings[6011]);
34329str->del(strings[6012]);
34330str->del(strings[6013]);
34331str->del(strings[6014]);
34332str->del(strings[471]);
34333str->del(strings[469]);
34334str->del(strings[470]);
34335str->del(strings[469]);
34336str->del(strings[382]);
34337str->del(strings[382]);
34338str->del(strings[470]);
34339str->del(strings[469]);
34340str->del(strings[5992]);
34341str->del(strings[5993]);
34342str->del(strings[5994]);
34343str->del(strings[5995]);
34344str->del(strings[5996]);
34345str->del(strings[5997]);
34346str->del(strings[5998]);
34347str->del(strings[5999]);
34348str->del(strings[6000]);
34349str->del(strings[6001]);
34350str->del(strings[6002]);
34351str->del(strings[6003]);
34352str->del(strings[6004]);
34353str->del(strings[6005]);
34354str->del(strings[6006]);
34355str->del(strings[6007]);
34356str->del(strings[6008]);
34357str->del(strings[6009]);
34358str->del(strings[6010]);
34359str->del(strings[6011]);
34360str->del(strings[6012]);
34361str->del(strings[6013]);
34362str->del(strings[6014]);
34363strings[469] = str->add(strings[469]);
34364strings[4183] = str->add(strings[4183]);
34365strings[469] = str->add(strings[469]);
34366strings[4185] = str->add(strings[4185]);
34367strings[469] = str->add(strings[469]);
34368strings[4187] = str->add(strings[4187]);
34369strings[470] = str->add(strings[470]);
34370strings[3879] = str->add(strings[3879]);
34371strings[3879] = str->add(strings[3879]);
34372strings[3879] = str->add(strings[3879]);
34373strings[361] = str->add(strings[361]);
34374strings[362] = str->add(strings[362]);
34375strings[361] = str->add(strings[361]);
34376str->del(strings[361]);
34377strings[362] = str->add(strings[362]);
34378str->del(strings[362]);
34379strings[376] = str->add(strings[376]);
34380strings[6035] = str->add("e,state,unfocused");
34381strings[5986] = str->add(strings[5986]);
34382str->del(strings[5985]);
34383str->del(strings[5986]);
34384str->del(strings[5987]);
34385str->del(strings[5986]);
34386str->del(strings[5988]);
34387strings[6036] = str->add("program,start");
34388strings[6037] = str->add("anim_sky1a");
34389strings[6036] = str->add(strings[6036]);
34390strings[6038] = str->add("anim_sky4a");
34391strings[6036] = str->add(strings[6036]);
34392strings[6039] = str->add("anim_sky2a");
34393strings[6036] = str->add(strings[6036]);
34394strings[6040] = str->add("anim_sky3a");
34395str->del(strings[1841]);
34396str->del(strings[5989]);
34397strings[6036] = str->add(strings[6036]);
34398strings[6041] = str->add("off");
34399str->del(strings[6035]);
34400str->del(strings[5986]);
34401str->del(strings[6036]);
34402str->del(strings[6037]);
34403str->del(strings[6036]);
34404str->del(strings[6038]);
34405str->del(strings[6036]);
34406str->del(strings[6039]);
34407str->del(strings[6036]);
34408str->del(strings[6040]);
34409str->del(strings[6036]);
34410str->del(strings[6041]);
34411strings[1933] = str->add(strings[1933]);
34412str->del(strings[1933]);
34413str->del(strings[64]);
34414str->del(strings[2634]);
34415strings[1933] = str->add(strings[1933]);
34416str->del(strings[1933]);
34417str->del(strings[64]);
34418str->del(strings[2584]);
34419strings[1933] = str->add(strings[1933]);
34420str->del(strings[1933]);
34421str->del(strings[469]);
34422str->del(strings[2686]);
34423strings[1933] = str->add(strings[1933]);
34424str->del(strings[1933]);
34425str->del(strings[4952]);
34426str->del(strings[4952]);
34427str->del(strings[4952]);
34428str->del(strings[64]);
34429str->del(strings[2585]);
34430strings[1933] = str->add(strings[1933]);
34431str->del(strings[1933]);
34432str->del(strings[64]);
34433str->del(strings[2586]);
34434strings[1933] = str->add(strings[1933]);
34435str->del(strings[1933]);
34436str->del(strings[64]);
34437str->del(strings[2634]);
34438strings[1933] = str->add(strings[1933]);
34439str->del(strings[1933]);
34440str->del(strings[64]);
34441str->del(strings[2584]);
34442strings[1933] = str->add(strings[1933]);
34443str->del(strings[1933]);
34444str->del(strings[469]);
34445str->del(strings[2715]);
34446strings[1933] = str->add(strings[1933]);
34447str->del(strings[1933]);
34448str->del(strings[2231]);
34449str->del(strings[2231]);
34450str->del(strings[2231]);
34451str->del(strings[64]);
34452str->del(strings[2585]);
34453strings[1933] = str->add(strings[1933]);
34454str->del(strings[1933]);
34455str->del(strings[64]);
34456str->del(strings[2586]);
34457strings[1933] = str->add(strings[1933]);
34458str->del(strings[1933]);
34459str->del(strings[64]);
34460str->del(strings[2583]);
34461strings[1933] = str->add(strings[1933]);
34462str->del(strings[1933]);
34463str->del(strings[64]);
34464str->del(strings[2584]);
34465strings[1933] = str->add(strings[1933]);
34466str->del(strings[1933]);
34467str->del(strings[469]);
34468str->del(strings[2691]);
34469strings[1933] = str->add(strings[1933]);
34470str->del(strings[1933]);
34471str->del(strings[2338]);
34472str->del(strings[2338]);
34473str->del(strings[2338]);
34474str->del(strings[64]);
34475str->del(strings[2585]);
34476strings[1933] = str->add(strings[1933]);
34477str->del(strings[1933]);
34478str->del(strings[64]);
34479str->del(strings[2583]);
34480strings[1933] = str->add(strings[1933]);
34481str->del(strings[1933]);
34482str->del(strings[64]);
34483str->del(strings[2584]);
34484strings[1933] = str->add(strings[1933]);
34485str->del(strings[1933]);
34486str->del(strings[469]);
34487str->del(strings[2693]);
34488strings[1933] = str->add(strings[1933]);
34489str->del(strings[1933]);
34490str->del(strings[4953]);
34491str->del(strings[4953]);
34492str->del(strings[4953]);
34493str->del(strings[64]);
34494str->del(strings[2585]);
34495strings[1933] = str->add(strings[1933]);
34496str->del(strings[1933]);
34497str->del(strings[64]);
34498str->del(strings[2582]);
34499strings[1933] = str->add(strings[1933]);
34500str->del(strings[1933]);
34501str->del(strings[64]);
34502str->del(strings[2634]);
34503strings[1933] = str->add(strings[1933]);
34504str->del(strings[1933]);
34505str->del(strings[64]);
34506str->del(strings[2584]);
34507strings[1933] = str->add(strings[1933]);
34508str->del(strings[1933]);
34509str->del(strings[469]);
34510str->del(strings[2687]);
34511strings[1933] = str->add(strings[1933]);
34512str->del(strings[1933]);
34513str->del(strings[1619]);
34514str->del(strings[1619]);
34515str->del(strings[1619]);
34516str->del(strings[64]);
34517str->del(strings[2585]);
34518strings[1933] = str->add(strings[1933]);
34519str->del(strings[1933]);
34520str->del(strings[64]);
34521str->del(strings[2586]);
34522strings[1933] = str->add(strings[1933]);
34523str->del(strings[1933]);
34524str->del(strings[64]);
34525str->del(strings[2634]);
34526strings[1933] = str->add(strings[1933]);
34527str->del(strings[1933]);
34528str->del(strings[64]);
34529str->del(strings[2584]);
34530strings[1933] = str->add(strings[1933]);
34531str->del(strings[1933]);
34532str->del(strings[469]);
34533str->del(strings[2682]);
34534strings[1933] = str->add(strings[1933]);
34535str->del(strings[1933]);
34536str->del(strings[2552]);
34537str->del(strings[2552]);
34538str->del(strings[2552]);
34539str->del(strings[64]);
34540str->del(strings[2585]);
34541strings[1933] = str->add(strings[1933]);
34542str->del(strings[1933]);
34543str->del(strings[64]);
34544str->del(strings[2586]);
34545strings[1933] = str->add(strings[1933]);
34546str->del(strings[1933]);
34547str->del(strings[64]);
34548str->del(strings[2582]);
34549strings[1933] = str->add(strings[1933]);
34550str->del(strings[1933]);
34551str->del(strings[64]);
34552str->del(strings[2634]);
34553strings[1933] = str->add(strings[1933]);
34554str->del(strings[1933]);
34555str->del(strings[64]);
34556str->del(strings[2584]);
34557strings[1933] = str->add(strings[1933]);
34558str->del(strings[1933]);
34559str->del(strings[469]);
34560str->del(strings[2671]);
34561strings[1933] = str->add(strings[1933]);
34562str->del(strings[1933]);
34563str->del(strings[1712]);
34564str->del(strings[1712]);
34565str->del(strings[1712]);
34566str->del(strings[64]);
34567str->del(strings[2585]);
34568strings[1933] = str->add(strings[1933]);
34569str->del(strings[1933]);
34570str->del(strings[64]);
34571str->del(strings[2586]);
34572strings[1933] = str->add(strings[1933]);
34573str->del(strings[1933]);
34574str->del(strings[64]);
34575str->del(strings[2582]);
34576strings[1933] = str->add(strings[1933]);
34577str->del(strings[1933]);
34578str->del(strings[64]);
34579str->del(strings[2634]);
34580strings[1933] = str->add(strings[1933]);
34581str->del(strings[1933]);
34582str->del(strings[64]);
34583str->del(strings[2584]);
34584strings[1933] = str->add(strings[1933]);
34585str->del(strings[1933]);
34586str->del(strings[469]);
34587str->del(strings[2688]);
34588strings[1933] = str->add(strings[1933]);
34589str->del(strings[1933]);
34590str->del(strings[4957]);
34591str->del(strings[4957]);
34592str->del(strings[4957]);
34593str->del(strings[64]);
34594str->del(strings[2585]);
34595strings[1933] = str->add(strings[1933]);
34596str->del(strings[1933]);
34597str->del(strings[64]);
34598str->del(strings[2586]);
34599strings[1933] = str->add(strings[1933]);
34600str->del(strings[1933]);
34601str->del(strings[64]);
34602str->del(strings[2582]);
34603strings[1933] = str->add(strings[1933]);
34604str->del(strings[1933]);
34605str->del(strings[64]);
34606str->del(strings[2634]);
34607strings[1933] = str->add(strings[1933]);
34608str->del(strings[1933]);
34609str->del(strings[64]);
34610str->del(strings[2584]);
34611strings[1933] = str->add(strings[1933]);
34612str->del(strings[1933]);
34613str->del(strings[469]);
34614str->del(strings[2690]);
34615strings[1933] = str->add(strings[1933]);
34616str->del(strings[1933]);
34617str->del(strings[1721]);
34618str->del(strings[1721]);
34619str->del(strings[1721]);
34620str->del(strings[64]);
34621str->del(strings[2585]);
34622strings[1933] = str->add(strings[1933]);
34623str->del(strings[1933]);
34624str->del(strings[64]);
34625str->del(strings[2586]);
34626strings[1933] = str->add(strings[1933]);
34627str->del(strings[1933]);
34628str->del(strings[4951]);
34629str->del(strings[4951]);
34630str->del(strings[4951]);
34631str->del(strings[64]);
34632str->del(strings[2581]);
34633str->del(strings[64]);
34634str->del(strings[2886]);
34635str->del(strings[64]);
34636str->del(strings[2888]);
34637str->del(strings[469]);
34638str->del(strings[2871]);
34639str->del(strings[4952]);
34640str->del(strings[385]);
34641str->del(strings[64]);
34642str->del(strings[2913]);
34643str->del(strings[64]);
34644str->del(strings[2886]);
34645str->del(strings[64]);
34646str->del(strings[2888]);
34647str->del(strings[469]);
34648str->del(strings[2890]);
34649str->del(strings[2231]);
34650str->del(strings[385]);
34651str->del(strings[64]);
34652str->del(strings[2913]);
34653str->del(strings[64]);
34654str->del(strings[2886]);
34655str->del(strings[64]);
34656str->del(strings[2888]);
34657str->del(strings[469]);
34658str->del(strings[2892]);
34659str->del(strings[2338]);
34660str->del(strings[385]);
34661str->del(strings[64]);
34662str->del(strings[2886]);
34663str->del(strings[64]);
34664str->del(strings[2888]);
34665str->del(strings[469]);
34666str->del(strings[4965]);
34667str->del(strings[469]);
34668str->del(strings[4967]);
34669str->del(strings[4953]);
34670str->del(strings[385]);
34671str->del(strings[64]);
34672str->del(strings[2915]);
34673str->del(strings[64]);
34674str->del(strings[2886]);
34675str->del(strings[64]);
34676str->del(strings[2888]);
34677str->del(strings[469]);
34678str->del(strings[2894]);
34679str->del(strings[1619]);
34680str->del(strings[385]);
34681str->del(strings[64]);
34682str->del(strings[2913]);
34683str->del(strings[64]);
34684str->del(strings[2886]);
34685str->del(strings[64]);
34686str->del(strings[2888]);
34687str->del(strings[469]);
34688str->del(strings[2896]);
34689str->del(strings[2552]);
34690str->del(strings[385]);
34691str->del(strings[64]);
34692str->del(strings[2913]);
34693str->del(strings[64]);
34694str->del(strings[2915]);
34695str->del(strings[64]);
34696str->del(strings[2886]);
34697str->del(strings[64]);
34698str->del(strings[2888]);
34699str->del(strings[469]);
34700str->del(strings[2898]);
34701str->del(strings[469]);
34702str->del(strings[2900]);
34703str->del(strings[1712]);
34704str->del(strings[385]);
34705str->del(strings[64]);
34706str->del(strings[2913]);
34707str->del(strings[64]);
34708str->del(strings[2915]);
34709str->del(strings[64]);
34710str->del(strings[2886]);
34711str->del(strings[64]);
34712str->del(strings[2888]);
34713str->del(strings[469]);
34714str->del(strings[2902]);
34715str->del(strings[4957]);
34716str->del(strings[385]);
34717str->del(strings[64]);
34718str->del(strings[2913]);
34719str->del(strings[64]);
34720str->del(strings[2915]);
34721str->del(strings[64]);
34722str->del(strings[2886]);
34723str->del(strings[64]);
34724str->del(strings[2888]);
34725str->del(strings[469]);
34726str->del(strings[2904]);
34727str->del(strings[1721]);
34728str->del(strings[385]);
34729str->del(strings[64]);
34730str->del(strings[2913]);
34731str->del(strings[64]);
34732str->del(strings[1949]);
34733str->del(strings[64]);
34734str->del(strings[1880]);
34735str->del(strings[64]);
34736str->del(strings[1876]);
34737str->del(strings[4951]);
34738str->del(strings[379]);
34739str->del(strings[64]);
34740str->del(strings[1874]);
34741str->del(strings[361]);
34742str->del(strings[362]);
34743strings[1933] = str->add(strings[1933]);
34744str->del(strings[1933]);
34745str->del(strings[64]);
34746str->del(strings[2583]);
34747strings[1933] = str->add(strings[1933]);
34748str->del(strings[1933]);
34749str->del(strings[64]);
34750str->del(strings[2584]);
34751strings[1933] = str->add(strings[1933]);
34752str->del(strings[1933]);
34753str->del(strings[469]);
34754str->del(strings[2671]);
34755strings[1933] = str->add(strings[1933]);
34756str->del(strings[1933]);
34757str->del(strings[4956]);
34758str->del(strings[4956]);
34759str->del(strings[4956]);
34760str->del(strings[64]);
34761str->del(strings[2585]);
34762strings[1933] = str->add(strings[1933]);
34763str->del(strings[1933]);
34764str->del(strings[64]);
34765str->del(strings[2583]);
34766strings[1933] = str->add(strings[1933]);
34767str->del(strings[1933]);
34768str->del(strings[64]);
34769str->del(strings[2584]);
34770strings[1933] = str->add(strings[1933]);
34771str->del(strings[1933]);
34772str->del(strings[469]);
34773str->del(strings[2680]);
34774strings[1933] = str->add(strings[1933]);
34775str->del(strings[1933]);
34776str->del(strings[2514]);
34777str->del(strings[2514]);
34778str->del(strings[2514]);
34779str->del(strings[64]);
34780str->del(strings[2585]);
34781strings[1933] = str->add(strings[1933]);
34782str->del(strings[1933]);
34783str->del(strings[64]);
34784str->del(strings[2582]);
34785strings[1933] = str->add(strings[1933]);
34786str->del(strings[1933]);
34787str->del(strings[64]);
34788str->del(strings[2583]);
34789strings[1933] = str->add(strings[1933]);
34790str->del(strings[1933]);
34791str->del(strings[64]);
34792str->del(strings[2584]);
34793strings[1933] = str->add(strings[1933]);
34794str->del(strings[1933]);
34795str->del(strings[469]);
34796str->del(strings[2672]);
34797strings[1933] = str->add(strings[1933]);
34798str->del(strings[1933]);
34799str->del(strings[1713]);
34800str->del(strings[1713]);
34801str->del(strings[1713]);
34802str->del(strings[64]);
34803str->del(strings[2585]);
34804strings[1933] = str->add(strings[1933]);
34805str->del(strings[1933]);
34806str->del(strings[64]);
34807str->del(strings[2583]);
34808strings[1933] = str->add(strings[1933]);
34809str->del(strings[1933]);
34810str->del(strings[64]);
34811str->del(strings[2584]);
34812strings[1933] = str->add(strings[1933]);
34813str->del(strings[1933]);
34814str->del(strings[469]);
34815str->del(strings[2673]);
34816strings[1933] = str->add(strings[1933]);
34817str->del(strings[1933]);
34818str->del(strings[1714]);
34819str->del(strings[1714]);
34820str->del(strings[1714]);
34821str->del(strings[64]);
34822str->del(strings[2585]);
34823strings[1933] = str->add(strings[1933]);
34824str->del(strings[1933]);
34825str->del(strings[1842]);
34826str->del(strings[1842]);
34827str->del(strings[64]);
34828str->del(strings[2581]);
34829str->del(strings[64]);
34830str->del(strings[2886]);
34831str->del(strings[64]);
34832str->del(strings[2888]);
34833str->del(strings[469]);
34834str->del(strings[2898]);
34835str->del(strings[469]);
34836str->del(strings[2900]);
34837str->del(strings[4956]);
34838str->del(strings[385]);
34839str->del(strings[64]);
34840str->del(strings[2886]);
34841str->del(strings[64]);
34842str->del(strings[2888]);
34843str->del(strings[469]);
34844str->del(strings[3094]);
34845str->del(strings[2514]);
34846str->del(strings[385]);
34847str->del(strings[64]);
34848str->del(strings[2915]);
34849str->del(strings[64]);
34850str->del(strings[2886]);
34851str->del(strings[64]);
34852str->del(strings[2888]);
34853str->del(strings[469]);
34854str->del(strings[3130]);
34855str->del(strings[1713]);
34856str->del(strings[385]);
34857str->del(strings[64]);
34858str->del(strings[2886]);
34859str->del(strings[64]);
34860str->del(strings[2888]);
34861str->del(strings[469]);
34862str->del(strings[3132]);
34863str->del(strings[1714]);
34864str->del(strings[385]);
34865str->del(strings[64]);
34866str->del(strings[1949]);
34867str->del(strings[64]);
34868str->del(strings[1880]);
34869str->del(strings[64]);
34870str->del(strings[1876]);
34871str->del(strings[379]);
34872str->del(strings[64]);
34873str->del(strings[1874]);
34874str->del(strings[361]);
34875str->del(strings[362]);
34876str->del(strings[469]);
34877str->del(strings[2686]);
34878str->del(strings[4952]);
34879str->del(strings[469]);
34880str->del(strings[2715]);
34881str->del(strings[2231]);
34882str->del(strings[469]);
34883str->del(strings[2691]);
34884str->del(strings[2338]);
34885str->del(strings[469]);
34886str->del(strings[2693]);
34887str->del(strings[4953]);
34888str->del(strings[469]);
34889str->del(strings[2687]);
34890str->del(strings[4954]);
34891str->del(strings[469]);
34892str->del(strings[2711]);
34893str->del(strings[2494]);
34894str->del(strings[4955]);
34895str->del(strings[469]);
34896str->del(strings[2687]);
34897str->del(strings[1619]);
34898str->del(strings[469]);
34899str->del(strings[2682]);
34900str->del(strings[2552]);
34901str->del(strings[469]);
34902str->del(strings[2671]);
34903str->del(strings[1712]);
34904str->del(strings[469]);
34905str->del(strings[2688]);
34906str->del(strings[2224]);
34907str->del(strings[469]);
34908str->del(strings[2685]);
34909str->del(strings[4]);
34910str->del(strings[1926]);
34911str->del(strings[3083]);
34912str->del(strings[1925]);
34913str->del(strings[469]);
34914str->del(strings[2711]);
34915str->del(strings[2494]);
34916str->del(strings[469]);
34917str->del(strings[2680]);
34918str->del(strings[2514]);
34919str->del(strings[469]);
34920str->del(strings[2713]);
34921str->del(strings[2536]);
34922str->del(strings[469]);
34923str->del(strings[2688]);
34924str->del(strings[4957]);
34925str->del(strings[469]);
34926str->del(strings[2708]);
34927str->del(strings[5146]);
34928str->del(strings[469]);
34929str->del(strings[2677]);
34930str->del(strings[1726]);
34931str->del(strings[469]);
34932str->del(strings[2678]);
34933str->del(strings[5147]);
34934str->del(strings[469]);
34935str->del(strings[2676]);
34936str->del(strings[1724]);
34937str->del(strings[469]);
34938str->del(strings[2675]);
34939str->del(strings[1722]);
34940str->del(strings[469]);
34941str->del(strings[2674]);
34942str->del(strings[5148]);
34943str->del(strings[469]);
34944str->del(strings[2690]);
34945str->del(strings[1721]);
34946str->del(strings[4951]);
34947str->del(strings[469]);
34948str->del(strings[2671]);
34949str->del(strings[4956]);
34950str->del(strings[469]);
34951str->del(strings[2680]);
34952str->del(strings[2514]);
34953str->del(strings[469]);
34954str->del(strings[2672]);
34955str->del(strings[1713]);
34956str->del(strings[469]);
34957str->del(strings[2673]);
34958str->del(strings[1714]);
34959strings[863] = str->add(strings[863]);
34960strings[64] = str->add(strings[64]);
34961strings[2578] = str->add(strings[2578]);
34962strings[64] = str->add(strings[64]);
34963strings[64] = str->add(strings[64]);
34964strings[6042] = str->add("load");
34965strings[330] = str->add(strings[330]);
34966strings[6043] = str->add("resize");
34967str->del(strings[64]);
34968strings[379] = str->add(strings[379]);
34969strings[330] = str->add(strings[330]);
34970strings[330] = str->add(strings[330]);
34971strings[1842] = str->add(strings[1842]);
34972str->del(strings[330]);
34973strings[64] = str->add(strings[64]);
34974strings[1865] = str->add(strings[1865]);
34975strings[330] = str->add(strings[330]);
34976str->del(strings[330]);
34977strings[64] = str->add(strings[64]);
34978strings[2276] = str->add(strings[2276]);
34979strings[64] = str->add(strings[64]);
34980strings[3259] = str->add(strings[3259]);
34981strings[64] = str->add(strings[64]);
34982strings[3259] = str->add(strings[3259]);
34983strings[64] = str->add(strings[64]);
34984strings[2292] = str->add(strings[2292]);
34985strings[330] = str->add(strings[330]);
34986str->del(strings[330]);
34987strings[330] = str->add(strings[330]);
34988str->del(strings[1842]);
34989strings[330] = str->add(strings[330]);
34990strings[64] = str->add(strings[64]);
34991strings[1880] = str->add(strings[1880]);
34992strings[64] = str->add(strings[64]);
34993strings[3279] = str->add(strings[3279]);
34994strings[64] = str->add(strings[64]);
34995strings[2310] = str->add(strings[2310]);
34996strings[64] = str->add(strings[64]);
34997strings[1876] = str->add(strings[1876]);
34998str->del(strings[64]);
34999strings[379] = str->add(strings[379]);
35000strings[330] = str->add(strings[330]);
35001strings[330] = str->add(strings[330]);
35002strings[330] = str->add(strings[330]);
35003strings[64] = str->add(strings[64]);
35004strings[1874] = str->add(strings[1874]);
35005strings[2085] = str->add(strings[2085]);
35006strings[2085] = str->add(strings[2085]);
35007strings[6043] = str->add(strings[6043]);
35008strings[1841] = str->add(strings[1841]);
35009strings[469] = str->add(strings[469]);
35010strings[2680] = str->add(strings[2680]);
35011strings[6042] = str->add(strings[6042]);
35012strings[1841] = str->add(strings[1841]);
35013str->del(strings[330]);
35014strings[330] = str->add(strings[330]);
35015str->del(strings[330]);
35016strings[330] = str->add(strings[330]);
35017str->del(strings[330]);
35018strings[330] = str->add(strings[330]);
35019str->del(strings[330]);
35020strings[330] = str->add(strings[330]);
35021strings[469] = str->add(strings[469]);
35022strings[3094] = str->add(strings[3094]);
35023strings[6043] = str->add(strings[6043]);
35024str->del(strings[190]);
35025str->del(strings[329]);
35026str->del(strings[330]);
35027str->del(strings[193]);
35028strings[190] = str->add(strings[190]);
35029strings[6044] = str->add("_theme_about");
35030strings[330] = str->add(strings[330]);
35031strings[193] = str->add(strings[193]);
35032strings[6045] = str->add("font");
35033strings[6046] = str->add("font_fallbacks");
35034strings[6047] = str->add("font_size");
35035strings[6048] = str->add("font_source");
35036strings[6049] = str->add("color");
35037strings[6050] = str->add("underline_color");
35038strings[6051] = str->add("underline2_color");
35039strings[6052] = str->add("outline_color");
35040strings[6053] = str->add("shadow_color");
35041strings[6054] = str->add("glow_color");
35042strings[6055] = str->add("glow2_color");
35043strings[6056] = str->add("backing_color");
35044strings[6057] = str->add("strikethrough_color");
35045strings[6058] = str->add("align");
35046strings[6059] = str->add("valign");
35047strings[6060] = str->add("wrap");
35048strings[6061] = str->add("left_margin");
35049strings[6062] = str->add("right_margin");
35050strings[6063] = str->add("underline");
35051strings[6064] = str->add("strikethrough");
35052strings[6065] = str->add("backing");
35053strings[6066] = str->add("style");
35054strings[6067] = str->add("tabstops");
35055strings[6058] = str->add(strings[6058]);
35056strings[6068] = str->add("center");
35057str->del(strings[6058]);
35058str->del(strings[6068]);
35059strings[6049] = str->add(strings[6049]);
35060strings[6069] = str->add("#000");
35061str->del(strings[6049]);
35062str->del(strings[6069]);
35063strings[6066] = str->add(strings[6066]);
35064strings[6070] = str->add("shadow");
35065str->del(strings[6066]);
35066str->del(strings[6070]);
35067strings[6053] = str->add(strings[6053]);
35068strings[6071] = str->add("#ffffff80");
35069str->del(strings[6053]);
35070str->del(strings[6071]);
35071strings[6060] = str->add(strings[6060]);
35072strings[6072] = str->add("word");
35073str->del(strings[6060]);
35074str->del(strings[6072]);
35075strings[6048] = str->add(strings[6048]);
35076strings[469] = str->add(strings[469]);
35077strings[469] = str->add(strings[469]);
35078str->del(strings[6048]);
35079str->del(strings[469]);
35080strings[6047] = str->add(strings[6047]);
35081strings[6073] = str->add("10.000000");
35082str->del(strings[6047]);
35083str->del(strings[6073]);
35084strings[6045] = str->add(strings[6045]);
35085strings[470] = str->add(strings[470]);
35086strings[470] = str->add(strings[470]);
35087str->del(strings[6045]);
35088str->del(strings[470]);
35089strings[382] = str->add(strings[382]);
35090strings[382] = str->add(strings[382]);
35091strings[382] = str->add(strings[382]);
35092strings[382] = str->add(strings[382]);
35093strings[382] = str->add(strings[382]);
35094strings[382] = str->add(strings[382]);
35095strings[470] = str->add(strings[470]);
35096strings[469] = str->add(strings[469]);
35097strings[6066] = str->add(strings[6066]);
35098strings[6074] = str->add("glow");
35099str->del(strings[6066]);
35100str->del(strings[6074]);
35101strings[6049] = str->add(strings[6049]);
35102strings[6075] = str->add("#fff");
35103str->del(strings[6049]);
35104str->del(strings[6075]);
35105strings[6055] = str->add(strings[6055]);
35106strings[6076] = str->add("#fe87");
35107str->del(strings[6055]);
35108str->del(strings[6076]);
35109strings[6054] = str->add(strings[6054]);
35110strings[6077] = str->add("#fa14");
35111str->del(strings[6054]);
35112str->del(strings[6077]);
35113strings[6045] = str->add(strings[6045]);
35114strings[471] = str->add(strings[471]);
35115str->del(strings[470]);
35116strings[471] = str->add(strings[471]);
35117str->del(strings[6045]);
35118str->del(strings[471]);
35119strings[470] = str->add(strings[470]);
35120strings[469] = str->add(strings[469]);
35121strings[6066] = str->add(strings[6066]);
35122strings[6078] = str->add("glow");
35123str->del(strings[6066]);
35124str->del(strings[6078]);
35125strings[6049] = str->add(strings[6049]);
35126strings[6079] = str->add("#fff");
35127str->del(strings[6049]);
35128str->del(strings[6079]);
35129strings[6055] = str->add(strings[6055]);
35130strings[6080] = str->add("#fe87");
35131str->del(strings[6055]);
35132str->del(strings[6080]);
35133strings[6054] = str->add(strings[6054]);
35134strings[6081] = str->add("#fa14");
35135str->del(strings[6054]);
35136str->del(strings[6081]);
35137strings[6045] = str->add(strings[6045]);
35138strings[471] = str->add(strings[471]);
35139str->del(strings[470]);
35140strings[471] = str->add(strings[471]);
35141str->del(strings[6045]);
35142str->del(strings[471]);
35143str->del(strings[6045]);
35144str->del(strings[6046]);
35145str->del(strings[6047]);
35146str->del(strings[6048]);
35147str->del(strings[6049]);
35148str->del(strings[6050]);
35149str->del(strings[6051]);
35150str->del(strings[6052]);
35151str->del(strings[6053]);
35152str->del(strings[6054]);
35153str->del(strings[6055]);
35154str->del(strings[6056]);
35155str->del(strings[6057]);
35156str->del(strings[6058]);
35157str->del(strings[6059]);
35158str->del(strings[6060]);
35159str->del(strings[6061]);
35160str->del(strings[6062]);
35161str->del(strings[6063]);
35162str->del(strings[6064]);
35163str->del(strings[6065]);
35164str->del(strings[6066]);
35165str->del(strings[6067]);
35166str->del(strings[382]);
35167str->del(strings[382]);
35168str->del(strings[382]);
35169str->del(strings[382]);
35170str->del(strings[382]);
35171str->del(strings[382]);
35172str->del(strings[471]);
35173str->del(strings[469]);
35174str->del(strings[470]);
35175str->del(strings[469]);
35176str->del(strings[471]);
35177str->del(strings[469]);
35178strings[6082] = str->add("font");
35179strings[6083] = str->add("font_fallbacks");
35180strings[6084] = str->add("font_size");
35181strings[6085] = str->add("font_source");
35182strings[6086] = str->add("color");
35183strings[6087] = str->add("underline_color");
35184strings[6088] = str->add("underline2_color");
35185strings[6089] = str->add("outline_color");
35186strings[6090] = str->add("shadow_color");
35187strings[6091] = str->add("glow_color");
35188strings[6092] = str->add("glow2_color");
35189strings[6093] = str->add("backing_color");
35190strings[6094] = str->add("strikethrough_color");
35191strings[6095] = str->add("align");
35192strings[6096] = str->add("valign");
35193strings[6097] = str->add("wrap");
35194strings[6098] = str->add("left_margin");
35195strings[6099] = str->add("right_margin");
35196strings[6100] = str->add("underline");
35197strings[6101] = str->add("strikethrough");
35198strings[6102] = str->add("backing");
35199strings[6103] = str->add("style");
35200strings[6104] = str->add("tabstops");
35201strings[6095] = str->add(strings[6095]);
35202strings[6105] = str->add("center");
35203str->del(strings[6095]);
35204str->del(strings[6105]);
35205strings[6086] = str->add(strings[6086]);
35206strings[6106] = str->add("#000");
35207str->del(strings[6086]);
35208str->del(strings[6106]);
35209strings[6103] = str->add(strings[6103]);
35210strings[6107] = str->add("shadow");
35211str->del(strings[6103]);
35212str->del(strings[6107]);
35213strings[6090] = str->add(strings[6090]);
35214strings[6108] = str->add("#ffffff80");
35215str->del(strings[6090]);
35216str->del(strings[6108]);
35217strings[6097] = str->add(strings[6097]);
35218strings[6109] = str->add("word");
35219str->del(strings[6097]);
35220str->del(strings[6109]);
35221strings[6085] = str->add(strings[6085]);
35222strings[469] = str->add(strings[469]);
35223strings[469] = str->add(strings[469]);
35224str->del(strings[6085]);
35225str->del(strings[469]);
35226strings[6084] = str->add(strings[6084]);
35227strings[6110] = str->add("10.000000");
35228str->del(strings[6084]);
35229str->del(strings[6110]);
35230strings[6082] = str->add(strings[6082]);
35231strings[470] = str->add(strings[470]);
35232strings[470] = str->add(strings[470]);
35233str->del(strings[6082]);
35234str->del(strings[470]);
35235strings[470] = str->add(strings[470]);
35236strings[469] = str->add(strings[469]);
35237strings[6103] = str->add(strings[6103]);
35238strings[6111] = str->add("soft_shadow");
35239str->del(strings[6103]);
35240str->del(strings[6111]);
35241strings[6086] = str->add(strings[6086]);
35242strings[6112] = str->add("#fff");
35243str->del(strings[6086]);
35244str->del(strings[6112]);
35245strings[6090] = str->add(strings[6090]);
35246strings[6113] = str->add("#00000020");
35247str->del(strings[6090]);
35248str->del(strings[6113]);
35249strings[6084] = str->add(strings[6084]);
35250strings[6114] = str->add("12.000000");
35251str->del(strings[6084]);
35252str->del(strings[6114]);
35253strings[6082] = str->add(strings[6082]);
35254strings[471] = str->add(strings[471]);
35255str->del(strings[470]);
35256strings[471] = str->add(strings[471]);
35257str->del(strings[6082]);
35258str->del(strings[471]);
35259strings[382] = str->add(strings[382]);
35260strings[382] = str->add(strings[382]);
35261strings[382] = str->add(strings[382]);
35262strings[382] = str->add(strings[382]);
35263strings[382] = str->add(strings[382]);
35264strings[382] = str->add(strings[382]);
35265strings[382] = str->add(strings[382]);
35266strings[382] = str->add(strings[382]);
35267strings[382] = str->add(strings[382]);
35268strings[382] = str->add(strings[382]);
35269strings[382] = str->add(strings[382]);
35270strings[382] = str->add(strings[382]);
35271strings[382] = str->add(strings[382]);
35272strings[382] = str->add(strings[382]);
35273strings[382] = str->add(strings[382]);
35274strings[382] = str->add(strings[382]);
35275strings[382] = str->add(strings[382]);
35276strings[382] = str->add(strings[382]);
35277strings[382] = str->add(strings[382]);
35278strings[382] = str->add(strings[382]);
35279strings[382] = str->add(strings[382]);
35280strings[382] = str->add(strings[382]);
35281str->del(strings[6082]);
35282str->del(strings[6083]);
35283str->del(strings[6084]);
35284str->del(strings[6085]);
35285str->del(strings[6086]);
35286str->del(strings[6087]);
35287str->del(strings[6088]);
35288str->del(strings[6089]);
35289str->del(strings[6090]);
35290str->del(strings[6091]);
35291str->del(strings[6092]);
35292str->del(strings[6093]);
35293str->del(strings[6094]);
35294str->del(strings[6095]);
35295str->del(strings[6096]);
35296str->del(strings[6097]);
35297str->del(strings[6098]);
35298str->del(strings[6099]);
35299str->del(strings[6100]);
35300str->del(strings[6101]);
35301str->del(strings[6102]);
35302str->del(strings[6103]);
35303str->del(strings[6104]);
35304str->del(strings[471]);
35305str->del(strings[469]);
35306str->del(strings[382]);
35307str->del(strings[382]);
35308str->del(strings[382]);
35309str->del(strings[382]);
35310str->del(strings[382]);
35311str->del(strings[382]);
35312str->del(strings[382]);
35313str->del(strings[382]);
35314str->del(strings[382]);
35315str->del(strings[382]);
35316str->del(strings[382]);
35317str->del(strings[382]);
35318str->del(strings[382]);
35319str->del(strings[382]);
35320str->del(strings[382]);
35321str->del(strings[382]);
35322str->del(strings[382]);
35323str->del(strings[382]);
35324str->del(strings[382]);
35325str->del(strings[382]);
35326str->del(strings[382]);
35327str->del(strings[470]);
35328str->del(strings[469]);
35329str->del(strings[382]);
35330strings[1932] = str->add(strings[1932]);
35331strings[6115] = str->add("go_activeb21");
35332strings[6116] = str->add("program,start");
35333strings[6117] = str->add("go_activec21");
35334strings[1932] = str->add(strings[1932]);
35335strings[6118] = str->add("go_activeb9");
35336strings[6116] = str->add(strings[6116]);
35337strings[6119] = str->add("go_activec9");
35338str->del(strings[6042]);
35339str->del(strings[6043]);
35340str->del(strings[6043]);
35341str->del(strings[1841]);
35342str->del(strings[6042]);
35343str->del(strings[1841]);
35344str->del(strings[6043]);
35345str->del(strings[1932]);
35346str->del(strings[6115]);
35347str->del(strings[6116]);
35348str->del(strings[6117]);
35349str->del(strings[1932]);
35350str->del(strings[6118]);
35351str->del(strings[6116]);
35352str->del(strings[6119]);
35353strings[64] = str->add(strings[64]);
35354strings[2595] = str->add(strings[2595]);
35355strings[6120] = str->add("load");
35356strings[1841] = str->add(strings[1841]);
35357strings[469] = str->add(strings[469]);
35358strings[2680] = str->add(strings[2680]);
35359strings[6120] = str->add(strings[6120]);
35360strings[1841] = str->add(strings[1841]);
35361strings[64] = str->add(strings[64]);
35362strings[4503] = str->add(strings[4503]);
35363strings[64] = str->add(strings[64]);
35364strings[3259] = str->add(strings[3259]);
35365strings[64] = str->add(strings[64]);
35366strings[3259] = str->add(strings[3259]);
35367strings[469] = str->add(strings[469]);
35368strings[3094] = str->add(strings[3094]);
35369strings[6121] = str->add("resize");
35370strings[1933] = str->add(strings[1933]);
35371str->del(strings[6120]);
35372str->del(strings[1841]);
35373str->del(strings[1933]);
35374str->del(strings[469]);
35375str->del(strings[2680]);
35376strings[469] = str->add(strings[469]);
35377strings[2680] = str->add(strings[2680]);
35378strings[6120] = str->add(strings[6120]);
35379strings[1841] = str->add(strings[1841]);
35380strings[469] = str->add(strings[469]);
35381strings[3094] = str->add(strings[3094]);
35382strings[6121] = str->add(strings[6121]);
35383strings[6122] = str->add("e,action,mouse,move");
35384strings[6123] = str->add("e");
35385strings[6122] = str->add(strings[6122]);
35386strings[6123] = str->add(strings[6123]);
35387strings[6122] = str->add(strings[6122]);
35388strings[6123] = str->add(strings[6123]);
35389strings[6122] = str->add(strings[6122]);
35390strings[6123] = str->add(strings[6123]);
35391strings[1737] = str->add(strings[1737]);
35392strings[1856] = str->add(strings[1856]);
35393str->del(strings[6120]);
35394str->del(strings[1841]);
35395str->del(strings[6121]);
35396str->del(strings[6120]);
35397str->del(strings[1841]);
35398str->del(strings[6121]);
35399str->del(strings[6122]);
35400str->del(strings[6123]);
35401str->del(strings[6122]);
35402str->del(strings[6123]);
35403str->del(strings[6122]);
35404str->del(strings[6123]);
35405str->del(strings[6122]);
35406str->del(strings[6123]);
35407str->del(strings[1737]);
35408str->del(strings[1856]);
35409str->del(strings[190]);
35410str->del(strings[6044]);
35411str->del(strings[330]);
35412str->del(strings[193]);
35413strings[190] = str->add(strings[190]);
35414strings[6124] = str->add("_theme_about");
35415strings[330] = str->add(strings[330]);
35416strings[193] = str->add(strings[193]);
35417strings[6125] = str->add("font");
35418strings[6126] = str->add("font_fallbacks");
35419strings[6127] = str->add("font_size");
35420strings[6128] = str->add("font_source");
35421strings[6129] = str->add("color");
35422strings[6130] = str->add("underline_color");
35423strings[6131] = str->add("underline2_color");
35424strings[6132] = str->add("outline_color");
35425strings[6133] = str->add("shadow_color");
35426strings[6134] = str->add("glow_color");
35427strings[6135] = str->add("glow2_color");
35428strings[6136] = str->add("backing_color");
35429strings[6137] = str->add("strikethrough_color");
35430strings[6138] = str->add("align");
35431strings[6139] = str->add("valign");
35432strings[6140] = str->add("wrap");
35433strings[6141] = str->add("left_margin");
35434strings[6142] = str->add("right_margin");
35435strings[6143] = str->add("underline");
35436strings[6144] = str->add("strikethrough");
35437strings[6145] = str->add("backing");
35438strings[6146] = str->add("style");
35439strings[6147] = str->add("tabstops");
35440strings[6138] = str->add(strings[6138]);
35441strings[6148] = str->add("center");
35442str->del(strings[6138]);
35443str->del(strings[6148]);
35444strings[6129] = str->add(strings[6129]);
35445strings[6149] = str->add("#000");
35446str->del(strings[6129]);
35447str->del(strings[6149]);
35448strings[6146] = str->add(strings[6146]);
35449strings[6150] = str->add("shadow");
35450str->del(strings[6146]);
35451str->del(strings[6150]);
35452strings[6133] = str->add(strings[6133]);
35453strings[6151] = str->add("#ffffff80");
35454str->del(strings[6133]);
35455str->del(strings[6151]);
35456strings[6140] = str->add(strings[6140]);
35457strings[6152] = str->add("word");
35458str->del(strings[6140]);
35459str->del(strings[6152]);
35460strings[6128] = str->add(strings[6128]);
35461strings[469] = str->add(strings[469]);
35462strings[469] = str->add(strings[469]);
35463str->del(strings[6128]);
35464str->del(strings[469]);
35465strings[6127] = str->add(strings[6127]);
35466strings[6153] = str->add("10.000000");
35467str->del(strings[6127]);
35468str->del(strings[6153]);
35469strings[6125] = str->add(strings[6125]);
35470strings[470] = str->add(strings[470]);
35471strings[470] = str->add(strings[470]);
35472str->del(strings[6125]);
35473str->del(strings[470]);
35474strings[382] = str->add(strings[382]);
35475strings[382] = str->add(strings[382]);
35476strings[382] = str->add(strings[382]);
35477strings[382] = str->add(strings[382]);
35478strings[382] = str->add(strings[382]);
35479strings[382] = str->add(strings[382]);
35480strings[470] = str->add(strings[470]);
35481strings[469] = str->add(strings[469]);
35482strings[6146] = str->add(strings[6146]);
35483strings[6154] = str->add("glow");
35484str->del(strings[6146]);
35485str->del(strings[6154]);
35486strings[6129] = str->add(strings[6129]);
35487strings[6155] = str->add("#fff");
35488str->del(strings[6129]);
35489str->del(strings[6155]);
35490strings[6135] = str->add(strings[6135]);
35491strings[6156] = str->add("#fe87");
35492str->del(strings[6135]);
35493str->del(strings[6156]);
35494strings[6134] = str->add(strings[6134]);
35495strings[6157] = str->add("#fa14");
35496str->del(strings[6134]);
35497str->del(strings[6157]);
35498strings[6125] = str->add(strings[6125]);
35499strings[471] = str->add(strings[471]);
35500str->del(strings[470]);
35501strings[471] = str->add(strings[471]);
35502str->del(strings[6125]);
35503str->del(strings[471]);
35504strings[470] = str->add(strings[470]);
35505strings[469] = str->add(strings[469]);
35506strings[6146] = str->add(strings[6146]);
35507strings[6158] = str->add("glow");
35508str->del(strings[6146]);
35509str->del(strings[6158]);
35510strings[6129] = str->add(strings[6129]);
35511strings[6159] = str->add("#fff");
35512str->del(strings[6129]);
35513str->del(strings[6159]);
35514strings[6135] = str->add(strings[6135]);
35515strings[6160] = str->add("#fe87");
35516str->del(strings[6135]);
35517str->del(strings[6160]);
35518strings[6134] = str->add(strings[6134]);
35519strings[6161] = str->add("#fa14");
35520str->del(strings[6134]);
35521str->del(strings[6161]);
35522strings[6125] = str->add(strings[6125]);
35523strings[471] = str->add(strings[471]);
35524str->del(strings[470]);
35525strings[471] = str->add(strings[471]);
35526str->del(strings[6125]);
35527str->del(strings[471]);
35528str->del(strings[6125]);
35529str->del(strings[6126]);
35530str->del(strings[6127]);
35531str->del(strings[6128]);
35532str->del(strings[6129]);
35533str->del(strings[6130]);
35534str->del(strings[6131]);
35535str->del(strings[6132]);
35536str->del(strings[6133]);
35537str->del(strings[6134]);
35538str->del(strings[6135]);
35539str->del(strings[6136]);
35540str->del(strings[6137]);
35541str->del(strings[6138]);
35542str->del(strings[6139]);
35543str->del(strings[6140]);
35544str->del(strings[6141]);
35545str->del(strings[6142]);
35546str->del(strings[6143]);
35547str->del(strings[6144]);
35548str->del(strings[6145]);
35549str->del(strings[6146]);
35550str->del(strings[6147]);
35551str->del(strings[382]);
35552str->del(strings[382]);
35553str->del(strings[382]);
35554str->del(strings[382]);
35555str->del(strings[382]);
35556str->del(strings[382]);
35557str->del(strings[471]);
35558str->del(strings[469]);
35559str->del(strings[470]);
35560str->del(strings[469]);
35561str->del(strings[471]);
35562str->del(strings[469]);
35563strings[6162] = str->add("font");
35564strings[6163] = str->add("font_fallbacks");
35565strings[6164] = str->add("font_size");
35566strings[6165] = str->add("font_source");
35567strings[6166] = str->add("color");
35568strings[6167] = str->add("underline_color");
35569strings[6168] = str->add("underline2_color");
35570strings[6169] = str->add("outline_color");
35571strings[6170] = str->add("shadow_color");
35572strings[6171] = str->add("glow_color");
35573strings[6172] = str->add("glow2_color");
35574strings[6173] = str->add("backing_color");
35575strings[6174] = str->add("strikethrough_color");
35576strings[6175] = str->add("align");
35577strings[6176] = str->add("valign");
35578strings[6177] = str->add("wrap");
35579strings[6178] = str->add("left_margin");
35580strings[6179] = str->add("right_margin");
35581strings[6180] = str->add("underline");
35582strings[6181] = str->add("strikethrough");
35583strings[6182] = str->add("backing");
35584strings[6183] = str->add("style");
35585strings[6184] = str->add("tabstops");
35586strings[6175] = str->add(strings[6175]);
35587strings[6185] = str->add("center");
35588str->del(strings[6175]);
35589str->del(strings[6185]);
35590strings[6166] = str->add(strings[6166]);
35591strings[6186] = str->add("#000");
35592str->del(strings[6166]);
35593str->del(strings[6186]);
35594strings[6183] = str->add(strings[6183]);
35595strings[6187] = str->add("shadow");
35596str->del(strings[6183]);
35597str->del(strings[6187]);
35598strings[6170] = str->add(strings[6170]);
35599strings[6188] = str->add("#ffffff80");
35600str->del(strings[6170]);
35601str->del(strings[6188]);
35602strings[6177] = str->add(strings[6177]);
35603strings[6189] = str->add("word");
35604str->del(strings[6177]);
35605str->del(strings[6189]);
35606strings[6165] = str->add(strings[6165]);
35607strings[469] = str->add(strings[469]);
35608strings[469] = str->add(strings[469]);
35609str->del(strings[6165]);
35610str->del(strings[469]);
35611strings[6164] = str->add(strings[6164]);
35612strings[6190] = str->add("10.000000");
35613str->del(strings[6164]);
35614str->del(strings[6190]);
35615strings[6162] = str->add(strings[6162]);
35616strings[470] = str->add(strings[470]);
35617strings[470] = str->add(strings[470]);
35618str->del(strings[6162]);
35619str->del(strings[470]);
35620strings[470] = str->add(strings[470]);
35621strings[469] = str->add(strings[469]);
35622strings[6183] = str->add(strings[6183]);
35623strings[6191] = str->add("soft_shadow");
35624str->del(strings[6183]);
35625str->del(strings[6191]);
35626strings[6166] = str->add(strings[6166]);
35627strings[6192] = str->add("#fff");
35628str->del(strings[6166]);
35629str->del(strings[6192]);
35630strings[6170] = str->add(strings[6170]);
35631strings[6193] = str->add("#00000020");
35632str->del(strings[6170]);
35633str->del(strings[6193]);
35634strings[6164] = str->add(strings[6164]);
35635strings[6194] = str->add("12.000000");
35636str->del(strings[6164]);
35637str->del(strings[6194]);
35638strings[6162] = str->add(strings[6162]);
35639strings[471] = str->add(strings[471]);
35640str->del(strings[470]);
35641strings[471] = str->add(strings[471]);
35642str->del(strings[6162]);
35643str->del(strings[471]);
35644strings[382] = str->add(strings[382]);
35645strings[382] = str->add(strings[382]);
35646strings[382] = str->add(strings[382]);
35647strings[382] = str->add(strings[382]);
35648strings[382] = str->add(strings[382]);
35649strings[382] = str->add(strings[382]);
35650strings[382] = str->add(strings[382]);
35651strings[382] = str->add(strings[382]);
35652strings[382] = str->add(strings[382]);
35653strings[382] = str->add(strings[382]);
35654strings[382] = str->add(strings[382]);
35655strings[382] = str->add(strings[382]);
35656strings[382] = str->add(strings[382]);
35657strings[382] = str->add(strings[382]);
35658strings[382] = str->add(strings[382]);
35659strings[382] = str->add(strings[382]);
35660strings[382] = str->add(strings[382]);
35661strings[382] = str->add(strings[382]);
35662strings[382] = str->add(strings[382]);
35663strings[382] = str->add(strings[382]);
35664strings[382] = str->add(strings[382]);
35665strings[382] = str->add(strings[382]);
35666str->del(strings[471]);
35667str->del(strings[469]);
35668str->del(strings[382]);
35669str->del(strings[382]);
35670str->del(strings[382]);
35671str->del(strings[382]);
35672str->del(strings[382]);
35673str->del(strings[382]);
35674str->del(strings[382]);
35675str->del(strings[382]);
35676str->del(strings[382]);
35677str->del(strings[382]);
35678str->del(strings[382]);
35679str->del(strings[382]);
35680str->del(strings[382]);
35681str->del(strings[382]);
35682str->del(strings[382]);
35683str->del(strings[382]);
35684str->del(strings[382]);
35685str->del(strings[382]);
35686str->del(strings[382]);
35687str->del(strings[382]);
35688str->del(strings[382]);
35689str->del(strings[470]);
35690str->del(strings[469]);
35691str->del(strings[382]);
35692str->del(strings[6162]);
35693str->del(strings[6163]);
35694str->del(strings[6164]);
35695str->del(strings[6165]);
35696str->del(strings[6166]);
35697str->del(strings[6167]);
35698str->del(strings[6168]);
35699str->del(strings[6169]);
35700str->del(strings[6170]);
35701str->del(strings[6171]);
35702str->del(strings[6172]);
35703str->del(strings[6173]);
35704str->del(strings[6174]);
35705str->del(strings[6175]);
35706str->del(strings[6176]);
35707str->del(strings[6177]);
35708str->del(strings[6178]);
35709str->del(strings[6179]);
35710str->del(strings[6180]);
35711str->del(strings[6181]);
35712str->del(strings[6182]);
35713str->del(strings[6183]);
35714str->del(strings[6184]);
35715strings[6195] = str->add("font");
35716strings[6196] = str->add("font_fallbacks");
35717strings[6197] = str->add("font_size");
35718strings[6198] = str->add("font_source");
35719strings[6199] = str->add("color");
35720strings[6200] = str->add("underline_color");
35721strings[6201] = str->add("underline2_color");
35722strings[6202] = str->add("outline_color");
35723strings[6203] = str->add("shadow_color");
35724strings[6204] = str->add("glow_color");
35725strings[6205] = str->add("glow2_color");
35726strings[6206] = str->add("backing_color");
35727strings[6207] = str->add("strikethrough_color");
35728strings[6208] = str->add("align");
35729strings[6209] = str->add("valign");
35730strings[6210] = str->add("wrap");
35731strings[6211] = str->add("left_margin");
35732strings[6212] = str->add("right_margin");
35733strings[6213] = str->add("underline");
35734strings[6214] = str->add("strikethrough");
35735strings[6215] = str->add("backing");
35736strings[6216] = str->add("style");
35737strings[6217] = str->add("tabstops");
35738strings[6208] = str->add(strings[6208]);
35739strings[6218] = str->add("center");
35740str->del(strings[6208]);
35741str->del(strings[6218]);
35742strings[6199] = str->add(strings[6199]);
35743strings[6219] = str->add("#000");
35744str->del(strings[6199]);
35745str->del(strings[6219]);
35746strings[6216] = str->add(strings[6216]);
35747strings[6220] = str->add("shadow");
35748str->del(strings[6216]);
35749str->del(strings[6220]);
35750strings[6203] = str->add(strings[6203]);
35751strings[6221] = str->add("#ffffff80");
35752str->del(strings[6203]);
35753str->del(strings[6221]);
35754strings[6210] = str->add(strings[6210]);
35755strings[6222] = str->add("word");
35756str->del(strings[6210]);
35757str->del(strings[6222]);
35758strings[6198] = str->add(strings[6198]);
35759strings[469] = str->add(strings[469]);
35760strings[469] = str->add(strings[469]);
35761str->del(strings[6198]);
35762str->del(strings[469]);
35763strings[6197] = str->add(strings[6197]);
35764strings[6223] = str->add("10.000000");
35765str->del(strings[6197]);
35766str->del(strings[6223]);
35767strings[6195] = str->add(strings[6195]);
35768strings[470] = str->add(strings[470]);
35769strings[470] = str->add(strings[470]);
35770str->del(strings[6195]);
35771str->del(strings[470]);
35772strings[470] = str->add(strings[470]);
35773strings[469] = str->add(strings[469]);
35774strings[6216] = str->add(strings[6216]);
35775strings[6224] = str->add("soft_shadow");
35776str->del(strings[6216]);
35777str->del(strings[6224]);
35778strings[6199] = str->add(strings[6199]);
35779strings[6225] = str->add("#fff");
35780str->del(strings[6199]);
35781str->del(strings[6225]);
35782strings[6203] = str->add(strings[6203]);
35783strings[6226] = str->add("#00000020");
35784str->del(strings[6203]);
35785str->del(strings[6226]);
35786strings[6197] = str->add(strings[6197]);
35787strings[6227] = str->add("12.000000");
35788str->del(strings[6197]);
35789str->del(strings[6227]);
35790strings[6195] = str->add(strings[6195]);
35791strings[471] = str->add(strings[471]);
35792str->del(strings[470]);
35793strings[471] = str->add(strings[471]);
35794str->del(strings[6195]);
35795str->del(strings[471]);
35796strings[382] = str->add(strings[382]);
35797strings[382] = str->add(strings[382]);
35798strings[382] = str->add(strings[382]);
35799strings[382] = str->add(strings[382]);
35800strings[382] = str->add(strings[382]);
35801strings[382] = str->add(strings[382]);
35802strings[382] = str->add(strings[382]);
35803strings[382] = str->add(strings[382]);
35804strings[382] = str->add(strings[382]);
35805strings[382] = str->add(strings[382]);
35806strings[382] = str->add(strings[382]);
35807strings[382] = str->add(strings[382]);
35808strings[382] = str->add(strings[382]);
35809strings[382] = str->add(strings[382]);
35810strings[382] = str->add(strings[382]);
35811strings[382] = str->add(strings[382]);
35812strings[382] = str->add(strings[382]);
35813strings[382] = str->add(strings[382]);
35814strings[382] = str->add(strings[382]);
35815strings[382] = str->add(strings[382]);
35816strings[382] = str->add(strings[382]);
35817strings[382] = str->add(strings[382]);
35818str->del(strings[6195]);
35819str->del(strings[6196]);
35820str->del(strings[6197]);
35821str->del(strings[6198]);
35822str->del(strings[6199]);
35823str->del(strings[6200]);
35824str->del(strings[6201]);
35825str->del(strings[6202]);
35826str->del(strings[6203]);
35827str->del(strings[6204]);
35828str->del(strings[6205]);
35829str->del(strings[6206]);
35830str->del(strings[6207]);
35831str->del(strings[6208]);
35832str->del(strings[6209]);
35833str->del(strings[6210]);
35834str->del(strings[6211]);
35835str->del(strings[6212]);
35836str->del(strings[6213]);
35837str->del(strings[6214]);
35838str->del(strings[6215]);
35839str->del(strings[6216]);
35840str->del(strings[6217]);
35841str->del(strings[471]);
35842str->del(strings[469]);
35843str->del(strings[382]);
35844str->del(strings[382]);
35845str->del(strings[382]);
35846str->del(strings[382]);
35847str->del(strings[382]);
35848str->del(strings[382]);
35849str->del(strings[382]);
35850str->del(strings[382]);
35851str->del(strings[382]);
35852str->del(strings[382]);
35853str->del(strings[382]);
35854str->del(strings[382]);
35855str->del(strings[382]);
35856str->del(strings[382]);
35857str->del(strings[382]);
35858str->del(strings[382]);
35859str->del(strings[382]);
35860str->del(strings[382]);
35861str->del(strings[382]);
35862str->del(strings[382]);
35863str->del(strings[382]);
35864str->del(strings[470]);
35865str->del(strings[469]);
35866str->del(strings[382]);
35867strings[6228] = str->add("font");
35868strings[6229] = str->add("font_fallbacks");
35869strings[6230] = str->add("font_size");
35870strings[6231] = str->add("font_source");
35871strings[6232] = str->add("color");
35872strings[6233] = str->add("underline_color");
35873strings[6234] = str->add("underline2_color");
35874strings[6235] = str->add("outline_color");
35875strings[6236] = str->add("shadow_color");
35876strings[6237] = str->add("glow_color");
35877strings[6238] = str->add("glow2_color");
35878strings[6239] = str->add("backing_color");
35879strings[6240] = str->add("strikethrough_color");
35880strings[6241] = str->add("align");
35881strings[6242] = str->add("valign");
35882strings[6243] = str->add("wrap");
35883strings[6244] = str->add("left_margin");
35884strings[6245] = str->add("right_margin");
35885strings[6246] = str->add("underline");
35886strings[6247] = str->add("strikethrough");
35887strings[6248] = str->add("backing");
35888strings[6249] = str->add("style");
35889strings[6250] = str->add("tabstops");
35890strings[6241] = str->add(strings[6241]);
35891strings[6251] = str->add("center");
35892str->del(strings[6241]);
35893str->del(strings[6251]);
35894strings[6232] = str->add(strings[6232]);
35895strings[6252] = str->add("#000");
35896str->del(strings[6232]);
35897str->del(strings[6252]);
35898strings[6249] = str->add(strings[6249]);
35899strings[6253] = str->add("shadow");
35900str->del(strings[6249]);
35901str->del(strings[6253]);
35902strings[6236] = str->add(strings[6236]);
35903strings[6254] = str->add("#ffffff80");
35904str->del(strings[6236]);
35905str->del(strings[6254]);
35906strings[6243] = str->add(strings[6243]);
35907strings[6255] = str->add("word");
35908str->del(strings[6243]);
35909str->del(strings[6255]);
35910strings[6231] = str->add(strings[6231]);
35911strings[469] = str->add(strings[469]);
35912strings[469] = str->add(strings[469]);
35913str->del(strings[6231]);
35914str->del(strings[469]);
35915strings[6230] = str->add(strings[6230]);
35916strings[6256] = str->add("10.000000");
35917str->del(strings[6230]);
35918str->del(strings[6256]);
35919strings[6228] = str->add(strings[6228]);
35920strings[470] = str->add(strings[470]);
35921strings[470] = str->add(strings[470]);
35922str->del(strings[6228]);
35923str->del(strings[470]);
35924strings[470] = str->add(strings[470]);
35925strings[469] = str->add(strings[469]);
35926strings[6249] = str->add(strings[6249]);
35927strings[6257] = str->add("soft_shadow");
35928str->del(strings[6249]);
35929str->del(strings[6257]);
35930strings[6232] = str->add(strings[6232]);
35931strings[6258] = str->add("#fff");
35932str->del(strings[6232]);
35933str->del(strings[6258]);
35934strings[6236] = str->add(strings[6236]);
35935strings[6259] = str->add("#00000020");
35936str->del(strings[6236]);
35937str->del(strings[6259]);
35938strings[6230] = str->add(strings[6230]);
35939strings[6260] = str->add("12.000000");
35940str->del(strings[6230]);
35941str->del(strings[6260]);
35942strings[6228] = str->add(strings[6228]);
35943strings[471] = str->add(strings[471]);
35944str->del(strings[470]);
35945strings[471] = str->add(strings[471]);
35946str->del(strings[6228]);
35947str->del(strings[471]);
35948strings[382] = str->add(strings[382]);
35949strings[382] = str->add(strings[382]);
35950strings[382] = str->add(strings[382]);
35951strings[382] = str->add(strings[382]);
35952strings[382] = str->add(strings[382]);
35953strings[382] = str->add(strings[382]);
35954strings[382] = str->add(strings[382]);
35955strings[382] = str->add(strings[382]);
35956strings[382] = str->add(strings[382]);
35957strings[382] = str->add(strings[382]);
35958strings[382] = str->add(strings[382]);
35959strings[382] = str->add(strings[382]);
35960strings[382] = str->add(strings[382]);
35961strings[382] = str->add(strings[382]);
35962strings[382] = str->add(strings[382]);
35963strings[382] = str->add(strings[382]);
35964strings[382] = str->add(strings[382]);
35965strings[382] = str->add(strings[382]);
35966strings[382] = str->add(strings[382]);
35967strings[382] = str->add(strings[382]);
35968strings[382] = str->add(strings[382]);
35969strings[382] = str->add(strings[382]);
35970str->del(strings[471]);
35971str->del(strings[469]);
35972str->del(strings[382]);
35973str->del(strings[382]);
35974str->del(strings[382]);
35975str->del(strings[382]);
35976str->del(strings[382]);
35977str->del(strings[382]);
35978str->del(strings[382]);
35979str->del(strings[382]);
35980str->del(strings[382]);
35981str->del(strings[382]);
35982str->del(strings[382]);
35983str->del(strings[382]);
35984str->del(strings[382]);
35985str->del(strings[382]);
35986str->del(strings[382]);
35987str->del(strings[382]);
35988str->del(strings[382]);
35989str->del(strings[382]);
35990str->del(strings[382]);
35991str->del(strings[382]);
35992str->del(strings[382]);
35993str->del(strings[470]);
35994str->del(strings[469]);
35995str->del(strings[382]);
35996str->del(strings[6228]);
35997str->del(strings[6229]);
35998str->del(strings[6230]);
35999str->del(strings[6231]);
36000str->del(strings[6232]);
36001str->del(strings[6233]);
36002str->del(strings[6234]);
36003str->del(strings[6235]);
36004str->del(strings[6236]);
36005str->del(strings[6237]);
36006str->del(strings[6238]);
36007str->del(strings[6239]);
36008str->del(strings[6240]);
36009str->del(strings[6241]);
36010str->del(strings[6242]);
36011str->del(strings[6243]);
36012str->del(strings[6244]);
36013str->del(strings[6245]);
36014str->del(strings[6246]);
36015str->del(strings[6247]);
36016str->del(strings[6248]);
36017str->del(strings[6249]);
36018str->del(strings[6250]);
36019str->del(strings[7]);
36020str->del(strings[3698]);
36021strings[7] = str->add(strings[7]);
36022strings[3703] = str->add(strings[3703]);
36023strings[1932] = str->add(strings[1932]);
36024strings[1845] = str->add(strings[1845]);
36025strings[6261] = str->add("program,start");
36026strings[1846] = str->add(strings[1846]);
36027strings[1932] = str->add(strings[1932]);
36028strings[1846] = str->add(strings[1846]);
36029strings[6261] = str->add(strings[6261]);
36030strings[1845] = str->add(strings[1845]);
36031strings[1932] = str->add(strings[1932]);
36032strings[6262] = str->add("go_activec27");
36033strings[6261] = str->add(strings[6261]);
36034strings[6263] = str->add("go_activeb27");
36035strings[1932] = str->add(strings[1932]);
36036strings[6264] = str->add("go_activec3");
36037strings[6261] = str->add(strings[6261]);
36038strings[6265] = str->add("go_activeb3");
36039str->del(strings[1932]);
36040str->del(strings[1845]);
36041str->del(strings[6261]);
36042str->del(strings[1846]);
36043str->del(strings[1932]);
36044str->del(strings[1846]);
36045str->del(strings[6261]);
36046str->del(strings[1845]);
36047str->del(strings[1932]);
36048str->del(strings[6262]);
36049str->del(strings[6261]);
36050str->del(strings[6263]);
36051str->del(strings[1932]);
36052str->del(strings[6264]);
36053str->del(strings[6261]);
36054str->del(strings[6265]);
36055strings[6266] = str->add("e,action,mouse,move");
36056strings[6267] = str->add("e");
36057strings[6268] = str->add("mouse,move");
36058strings[1856] = str->add(strings[1856]);
36059str->del(strings[6266]);
36060str->del(strings[6267]);
36061str->del(strings[6268]);
36062str->del(strings[1856]);
36063str->del(strings[469]);
36064str->del(strings[3094]);
36065strings[6269] = str->add("e,action,mouse,move");
36066strings[6270] = str->add("e");
36067strings[6271] = str->add("mouse,move");
36068strings[1856] = str->add(strings[1856]);
36069strings[6269] = str->add(strings[6269]);
36070strings[6270] = str->add(strings[6270]);
36071strings[6271] = str->add(strings[6271]);
36072strings[1856] = str->add(strings[1856]);
36073strings[6269] = str->add(strings[6269]);
36074strings[6270] = str->add(strings[6270]);
36075strings[1740] = str->add(strings[1740]);
36076strings[1856] = str->add(strings[1856]);
36077strings[1737] = str->add(strings[1737]);
36078strings[1853] = str->add(strings[1853]);
36079str->del(strings[6269]);
36080str->del(strings[6270]);
36081str->del(strings[6271]);
36082str->del(strings[1856]);
36083str->del(strings[6269]);
36084str->del(strings[6270]);
36085str->del(strings[6271]);
36086str->del(strings[1856]);
36087str->del(strings[6269]);
36088str->del(strings[6270]);
36089str->del(strings[1740]);
36090str->del(strings[1856]);
36091str->del(strings[1737]);
36092str->del(strings[1853]);
36093strings[6272] = str->add("e,action,mouse,move");
36094strings[6273] = str->add("e");
36095strings[6274] = str->add("mouse,move");
36096strings[1853] = str->add(strings[1853]);
36097str->del(strings[6272]);
36098str->del(strings[6273]);
36099str->del(strings[6274]);
36100str->del(strings[1853]);
36101strings[6275] = str->add("e,action,mouse,move");
36102strings[6276] = str->add("e");
36103strings[6277] = str->add("mouse,move");
36104strings[1853] = str->add(strings[1853]);
36105strings[6275] = str->add(strings[6275]);
36106strings[6276] = str->add(strings[6276]);
36107strings[6277] = str->add(strings[6277]);
36108strings[1853] = str->add(strings[1853]);
36109str->del(strings[6275]);
36110str->del(strings[6276]);
36111str->del(strings[6277]);
36112str->del(strings[1853]);
36113str->del(strings[6275]);
36114str->del(strings[6276]);
36115str->del(strings[6277]);
36116str->del(strings[1853]);
36117strings[6278] = str->add("e,action,mouse,move");
36118strings[6279] = str->add("e");
36119strings[6280] = str->add("mouse,move");
36120strings[1853] = str->add(strings[1853]);
36121str->del(strings[6278]);
36122str->del(strings[6279]);
36123str->del(strings[6280]);
36124str->del(strings[1853]);
36125strings[6281] = str->add("e,action,mouse,move");
36126strings[6282] = str->add("e");
36127strings[6283] = str->add("mouse,move");
36128strings[1853] = str->add(strings[1853]);
36129str->del(strings[6281]);
36130str->del(strings[6282]);
36131str->del(strings[6283]);
36132str->del(strings[1853]);
36133str->del(strings[7]);
36134str->del(strings[3703]);
36135strings[7] = str->add(strings[7]);
36136strings[2990] = str->add(strings[2990]);
36137strings[6284] = str->add("e,action,mouse,move");
36138strings[6285] = str->add("e");
36139strings[6286] = str->add("mouse,move");
36140strings[1853] = str->add(strings[1853]);
36141strings[6284] = str->add(strings[6284]);
36142strings[6285] = str->add(strings[6285]);
36143strings[6286] = str->add(strings[6286]);
36144strings[1853] = str->add(strings[1853]);
36145str->del(strings[6284]);
36146str->del(strings[6285]);
36147str->del(strings[6286]);
36148str->del(strings[1853]);
36149str->del(strings[6284]);
36150str->del(strings[6285]);
36151str->del(strings[6286]);
36152str->del(strings[1853]);
36153strings[6287] = str->add("e,action,mouse,move");
36154strings[6288] = str->add("e");
36155strings[6289] = str->add("mouse,move");
36156strings[1853] = str->add(strings[1853]);
36157str->del(strings[6287]);
36158str->del(strings[6288]);
36159str->del(strings[6289]);
36160str->del(strings[1853]);
36161strings[6290] = str->add("e,action,mouse,move");
36162strings[6291] = str->add("e");
36163strings[6292] = str->add("mouse,move");
36164strings[1853] = str->add(strings[1853]);
36165str->del(strings[6290]);
36166str->del(strings[6291]);
36167str->del(strings[6292]);
36168str->del(strings[1853]);
36169strings[1932] = str->add(strings[1932]);
36170strings[6293] = str->add("go_activeb1");
36171strings[6294] = str->add("program,start");
36172strings[6295] = str->add("go_activec1");
36173strings[1932] = str->add(strings[1932]);
36174strings[6296] = str->add("go_activeb29");
36175strings[6294] = str->add(strings[6294]);
36176strings[6297] = str->add("go_activec29");
36177str->del(strings[1932]);
36178str->del(strings[6293]);
36179str->del(strings[6294]);
36180str->del(strings[6295]);
36181str->del(strings[1932]);
36182str->del(strings[6296]);
36183str->del(strings[6294]);
36184str->del(strings[6297]);
36185strings[6298] = str->add("e,action,mouse,move");
36186strings[6299] = str->add("e");
36187strings[6300] = str->add("mouse,move");
36188strings[1853] = str->add(strings[1853]);
36189strings[6298] = str->add(strings[6298]);
36190strings[6299] = str->add(strings[6299]);
36191strings[6300] = str->add(strings[6300]);
36192strings[1853] = str->add(strings[1853]);
36193str->del(strings[6298]);
36194str->del(strings[6299]);
36195str->del(strings[6300]);
36196str->del(strings[1853]);
36197str->del(strings[6298]);
36198str->del(strings[6299]);
36199str->del(strings[6300]);
36200str->del(strings[1853]);
36201strings[6301] = str->add("e,action,mouse,move");
36202strings[6302] = str->add("e");
36203strings[6303] = str->add("mouse,move");
36204strings[1853] = str->add(strings[1853]);
36205str->del(strings[6301]);
36206str->del(strings[6302]);
36207str->del(strings[6303]);
36208str->del(strings[1853]);
36209strings[6304] = str->add("e,action,mouse,move");
36210strings[6305] = str->add("e");
36211strings[6306] = str->add("mouse,move");
36212strings[1853] = str->add(strings[1853]);
36213str->del(strings[6304]);
36214str->del(strings[6305]);
36215str->del(strings[6306]);
36216str->del(strings[1853]);
36217str->del(strings[7]);
36218str->del(strings[2990]);
36219strings[7] = str->add(strings[7]);
36220strings[3027] = str->add(strings[3027]);
36221strings[6307] = str->add("e,action,mouse,move");
36222strings[6308] = str->add("e");
36223strings[6309] = str->add("mouse,move");
36224strings[1853] = str->add(strings[1853]);
36225strings[6307] = str->add(strings[6307]);
36226strings[6308] = str->add(strings[6308]);
36227strings[6309] = str->add(strings[6309]);
36228strings[1853] = str->add(strings[1853]);
36229str->del(strings[6307]);
36230str->del(strings[6308]);
36231str->del(strings[6309]);
36232str->del(strings[1853]);
36233str->del(strings[6307]);
36234str->del(strings[6308]);
36235str->del(strings[6309]);
36236str->del(strings[1853]);
36237strings[6310] = str->add("e,action,mouse,move");
36238strings[6311] = str->add("e");
36239strings[6312] = str->add("mouse,move");
36240strings[1853] = str->add(strings[1853]);
36241str->del(strings[6310]);
36242str->del(strings[6311]);
36243str->del(strings[6312]);
36244str->del(strings[1853]);
36245strings[6313] = str->add("e,action,mouse,move");
36246strings[6314] = str->add("e");
36247strings[6315] = str->add("mouse,move");
36248strings[1853] = str->add(strings[1853]);
36249str->del(strings[6313]);
36250str->del(strings[6314]);
36251str->del(strings[6315]);
36252str->del(strings[1853]);
36253strings[6316] = str->add("e,action,mouse,move");
36254strings[6317] = str->add("e");
36255strings[6318] = str->add("mouse,move");
36256strings[1853] = str->add(strings[1853]);
36257strings[6316] = str->add(strings[6316]);
36258strings[6317] = str->add(strings[6317]);
36259strings[6318] = str->add(strings[6318]);
36260strings[1853] = str->add(strings[1853]);
36261str->del(strings[6316]);
36262str->del(strings[6317]);
36263str->del(strings[6318]);
36264str->del(strings[1853]);
36265str->del(strings[6316]);
36266str->del(strings[6317]);
36267str->del(strings[6318]);
36268str->del(strings[1853]);
36269strings[6319] = str->add("e,action,mouse,move");
36270strings[6320] = str->add("e");
36271strings[6321] = str->add("mouse,move");
36272strings[1853] = str->add(strings[1853]);
36273str->del(strings[6319]);
36274str->del(strings[6320]);
36275str->del(strings[6321]);
36276str->del(strings[1853]);
36277strings[6322] = str->add("e,action,mouse,move");
36278strings[6323] = str->add("e");
36279strings[6324] = str->add("mouse,move");
36280strings[1853] = str->add(strings[1853]);
36281str->del(strings[6322]);
36282str->del(strings[6323]);
36283str->del(strings[6324]);
36284str->del(strings[1853]);
36285strings[6325] = str->add("e,action,mouse,move");
36286strings[6326] = str->add("e");
36287strings[6327] = str->add("mouse,move");
36288strings[1853] = str->add(strings[1853]);
36289str->del(strings[6325]);
36290str->del(strings[6326]);
36291str->del(strings[6327]);
36292str->del(strings[1853]);
36293str->del(strings[7]);
36294str->del(strings[3027]);
36295strings[7] = str->add(strings[7]);
36296strings[3033] = str->add(strings[3033]);
36297strings[6328] = str->add("e,action,mouse,move");
36298strings[6329] = str->add("e");
36299strings[6330] = str->add("mouse,move");
36300strings[1853] = str->add(strings[1853]);
36301strings[6328] = str->add(strings[6328]);
36302strings[6329] = str->add(strings[6329]);
36303strings[6330] = str->add(strings[6330]);
36304strings[1853] = str->add(strings[1853]);
36305str->del(strings[6328]);
36306str->del(strings[6329]);
36307str->del(strings[6330]);
36308str->del(strings[1853]);
36309str->del(strings[6328]);
36310str->del(strings[6329]);
36311str->del(strings[6330]);
36312str->del(strings[1853]);
36313strings[6331] = str->add("e,action,mouse,move");
36314strings[6332] = str->add("e");
36315strings[6333] = str->add("mouse,move");
36316strings[1853] = str->add(strings[1853]);
36317str->del(strings[6331]);
36318str->del(strings[6332]);
36319str->del(strings[6333]);
36320str->del(strings[1853]);
36321strings[6334] = str->add("e,action,mouse,move");
36322strings[6335] = str->add("e");
36323strings[6336] = str->add("mouse,move");
36324strings[1853] = str->add(strings[1853]);
36325str->del(strings[6334]);
36326str->del(strings[6335]);
36327str->del(strings[6336]);
36328str->del(strings[1853]);
36329strings[1932] = str->add(strings[1932]);
36330strings[6337] = str->add("go_activec26");
36331strings[6338] = str->add("program,start");
36332strings[6339] = str->add("go_activeb26");
36333strings[1932] = str->add(strings[1932]);
36334strings[6340] = str->add("go_activec4");
36335strings[6338] = str->add(strings[6338]);
36336strings[6341] = str->add("go_activeb4");
36337str->del(strings[1932]);
36338str->del(strings[6337]);
36339str->del(strings[6338]);
36340str->del(strings[6339]);
36341str->del(strings[1932]);
36342str->del(strings[6340]);
36343str->del(strings[6338]);
36344str->del(strings[6341]);
36345strings[6342] = str->add("e,action,mouse,move");
36346strings[6343] = str->add("e");
36347strings[6344] = str->add("mouse,move");
36348strings[1853] = str->add(strings[1853]);
36349strings[6342] = str->add(strings[6342]);
36350strings[6343] = str->add(strings[6343]);
36351strings[6344] = str->add(strings[6344]);
36352strings[1853] = str->add(strings[1853]);
36353str->del(strings[6342]);
36354str->del(strings[6343]);
36355str->del(strings[6344]);
36356str->del(strings[1853]);
36357str->del(strings[6342]);
36358str->del(strings[6343]);
36359str->del(strings[6344]);
36360str->del(strings[1853]);
36361strings[6345] = str->add("e,action,mouse,move");
36362strings[6346] = str->add("e");
36363strings[6347] = str->add("mouse,move");
36364strings[1853] = str->add(strings[1853]);
36365str->del(strings[6345]);
36366str->del(strings[6346]);
36367str->del(strings[6347]);
36368str->del(strings[1853]);
36369strings[6348] = str->add("e,action,mouse,move");
36370strings[6349] = str->add("e");
36371strings[6350] = str->add("mouse,move");
36372strings[1853] = str->add(strings[1853]);
36373str->del(strings[6348]);
36374str->del(strings[6349]);
36375str->del(strings[6350]);
36376str->del(strings[1853]);
36377strings[1932] = str->add(strings[1932]);
36378strings[6351] = str->add("off");
36379str->del(strings[1932]);
36380str->del(strings[6351]);
36381str->del(strings[7]);
36382str->del(strings[3033]);
36383strings[7] = str->add(strings[7]);
36384strings[2062] = str->add(strings[2062]);
36385strings[6352] = str->add("e,action,mouse,move");
36386strings[6353] = str->add("e");
36387strings[6354] = str->add("mouse,move");
36388strings[1853] = str->add(strings[1853]);
36389strings[6352] = str->add(strings[6352]);
36390strings[6353] = str->add(strings[6353]);
36391strings[6354] = str->add(strings[6354]);
36392strings[1853] = str->add(strings[1853]);
36393str->del(strings[6352]);
36394str->del(strings[6353]);
36395str->del(strings[6354]);
36396str->del(strings[1853]);
36397str->del(strings[6352]);
36398str->del(strings[6353]);
36399str->del(strings[6354]);
36400str->del(strings[1853]);
36401strings[6355] = str->add("e,action,mouse,move");
36402strings[6356] = str->add("e");
36403strings[6357] = str->add("mouse,move");
36404strings[1853] = str->add(strings[1853]);
36405str->del(strings[6355]);
36406str->del(strings[6356]);
36407str->del(strings[6357]);
36408str->del(strings[1853]);
36409strings[6358] = str->add("e,action,mouse,move");
36410strings[6359] = str->add("e");
36411strings[6360] = str->add("mouse,move");
36412strings[1853] = str->add(strings[1853]);
36413str->del(strings[6358]);
36414str->del(strings[6359]);
36415str->del(strings[6360]);
36416str->del(strings[1853]);
36417strings[6361] = str->add("e,action,mouse,move");
36418strings[6362] = str->add("e");
36419strings[1740] = str->add(strings[1740]);
36420strings[1853] = str->add(strings[1853]);
36421strings[1737] = str->add(strings[1737]);
36422strings[1856] = str->add(strings[1856]);
36423strings[6361] = str->add(strings[6361]);
36424strings[6362] = str->add(strings[6362]);
36425strings[1740] = str->add(strings[1740]);
36426strings[1856] = str->add(strings[1856]);
36427strings[1737] = str->add(strings[1737]);
36428strings[1862] = str->add(strings[1862]);
36429str->del(strings[6361]);
36430str->del(strings[6362]);
36431str->del(strings[1740]);
36432str->del(strings[1853]);
36433str->del(strings[1737]);
36434str->del(strings[1856]);
36435str->del(strings[6361]);
36436str->del(strings[6362]);
36437str->del(strings[1740]);
36438str->del(strings[1856]);
36439str->del(strings[1737]);
36440str->del(strings[1862]);
36441strings[6363] = str->add("e,action,mouse,move");
36442strings[6364] = str->add("e");
36443strings[6365] = str->add("mouse,move");
36444strings[1862] = str->add(strings[1862]);
36445str->del(strings[6363]);
36446str->del(strings[6364]);
36447str->del(strings[6365]);
36448str->del(strings[1862]);
36449strings[6366] = str->add("e,action,mouse,move");
36450strings[6367] = str->add("e");
36451strings[6368] = str->add("mouse,move");
36452strings[1862] = str->add(strings[1862]);
36453str->del(strings[6366]);
36454str->del(strings[6367]);
36455str->del(strings[6368]);
36456str->del(strings[1862]);
36457strings[1932] = str->add(strings[1932]);
36458strings[6369] = str->add("go_activeb28");
36459strings[6370] = str->add("program,start");
36460strings[6371] = str->add("go_activec28");
36461strings[1932] = str->add(strings[1932]);
36462strings[6372] = str->add("go_activeb2");
36463strings[6370] = str->add(strings[6370]);
36464strings[6373] = str->add("go_activec2");
36465str->del(strings[1932]);
36466str->del(strings[6369]);
36467str->del(strings[6370]);
36468str->del(strings[6371]);
36469str->del(strings[1932]);
36470str->del(strings[6372]);
36471str->del(strings[6370]);
36472str->del(strings[6373]);
36473str->del(strings[7]);
36474str->del(strings[2062]);
36475strings[7] = str->add(strings[7]);
36476strings[3100] = str->add(strings[3100]);
36477strings[6374] = str->add("e,action,mouse,move");
36478strings[6375] = str->add("e");
36479strings[6376] = str->add("mouse,move");
36480strings[1862] = str->add(strings[1862]);
36481strings[6374] = str->add(strings[6374]);
36482strings[6375] = str->add(strings[6375]);
36483strings[6376] = str->add(strings[6376]);
36484strings[1862] = str->add(strings[1862]);
36485str->del(strings[6374]);
36486str->del(strings[6375]);
36487str->del(strings[6376]);
36488str->del(strings[1862]);
36489str->del(strings[6374]);
36490str->del(strings[6375]);
36491str->del(strings[6376]);
36492str->del(strings[1862]);
36493strings[6377] = str->add("e,action,mouse,move");
36494strings[6378] = str->add("e");
36495strings[6379] = str->add("mouse,move");
36496strings[1862] = str->add(strings[1862]);
36497str->del(strings[6377]);
36498str->del(strings[6378]);
36499str->del(strings[6379]);
36500str->del(strings[1862]);
36501strings[6380] = str->add("e,action,mouse,move");
36502strings[6381] = str->add("e");
36503strings[6382] = str->add("mouse,move");
36504strings[1862] = str->add(strings[1862]);
36505str->del(strings[6380]);
36506str->del(strings[6381]);
36507str->del(strings[6382]);
36508str->del(strings[1862]);
36509strings[6383] = str->add("e,action,mouse,move");
36510strings[6384] = str->add("e");
36511strings[6385] = str->add("mouse,move");
36512strings[1862] = str->add(strings[1862]);
36513str->del(strings[6383]);
36514str->del(strings[6384]);
36515str->del(strings[6385]);
36516str->del(strings[1862]);
36517strings[6386] = str->add("e,action,mouse,move");
36518strings[6387] = str->add("e");
36519strings[6388] = str->add("mouse,move");
36520strings[1862] = str->add(strings[1862]);
36521str->del(strings[6386]);
36522str->del(strings[6387]);
36523str->del(strings[6388]);
36524str->del(strings[1862]);
36525strings[6389] = str->add("e,action,mouse,move");
36526strings[6390] = str->add("e");
36527strings[6391] = str->add("mouse,move");
36528strings[1862] = str->add(strings[1862]);
36529str->del(strings[6389]);
36530str->del(strings[6390]);
36531str->del(strings[6391]);
36532str->del(strings[1862]);
36533strings[6392] = str->add("e,action,mouse,move");
36534strings[6393] = str->add("e");
36535strings[6394] = str->add("mouse,move");
36536strings[1862] = str->add(strings[1862]);
36537str->del(strings[6392]);
36538str->del(strings[6393]);
36539str->del(strings[6394]);
36540str->del(strings[1862]);
36541strings[6395] = str->add("e,action,mouse,move");
36542strings[6396] = str->add("e");
36543strings[6397] = str->add("mouse,move");
36544strings[1862] = str->add(strings[1862]);
36545str->del(strings[6395]);
36546str->del(strings[6396]);
36547str->del(strings[6397]);
36548str->del(strings[1862]);
36549str->del(strings[7]);
36550str->del(strings[3100]);
36551strings[7] = str->add(strings[7]);
36552strings[3111] = str->add(strings[3111]);
36553strings[6398] = str->add("e,action,mouse,move");
36554strings[6399] = str->add("e");
36555strings[1740] = str->add(strings[1740]);
36556strings[1862] = str->add(strings[1862]);
36557strings[1737] = str->add(strings[1737]);
36558strings[1856] = str->add(strings[1856]);
36559strings[6398] = str->add(strings[6398]);
36560strings[6399] = str->add(strings[6399]);
36561strings[6400] = str->add("mouse,move");
36562strings[1856] = str->add(strings[1856]);
36563str->del(strings[6398]);
36564str->del(strings[6399]);
36565str->del(strings[1740]);
36566str->del(strings[1862]);
36567str->del(strings[1737]);
36568str->del(strings[1856]);
36569str->del(strings[6398]);
36570str->del(strings[6399]);
36571str->del(strings[6400]);
36572str->del(strings[1856]);
36573strings[6401] = str->add("e,action,mouse,move");
36574strings[6402] = str->add("e");
36575strings[6403] = str->add("mouse,move");
36576strings[1856] = str->add(strings[1856]);
36577str->del(strings[6401]);
36578str->del(strings[6402]);
36579str->del(strings[6403]);
36580str->del(strings[1856]);
36581strings[6404] = str->add("e,action,mouse,move");
36582strings[6405] = str->add("e");
36583strings[6406] = str->add("mouse,move");
36584strings[1856] = str->add(strings[1856]);
36585str->del(strings[6404]);
36586str->del(strings[6405]);
36587str->del(strings[6406]);
36588str->del(strings[1856]);
36589strings[1932] = str->add(strings[1932]);
36590strings[6407] = str->add("go_activec25");
36591strings[6408] = str->add("program,start");
36592strings[6409] = str->add("go_activeb25");
36593strings[1932] = str->add(strings[1932]);
36594strings[6410] = str->add("go_activec5");
36595strings[6408] = str->add(strings[6408]);
36596strings[6411] = str->add("go_activeb5");
36597str->del(strings[1932]);
36598str->del(strings[6407]);
36599str->del(strings[6408]);
36600str->del(strings[6409]);
36601str->del(strings[1932]);
36602str->del(strings[6410]);
36603str->del(strings[6408]);
36604str->del(strings[6411]);
36605strings[6412] = str->add("e,action,mouse,move");
36606strings[6413] = str->add("e");
36607strings[6414] = str->add("mouse,move");
36608strings[1856] = str->add(strings[1856]);
36609str->del(strings[6412]);
36610str->del(strings[6413]);
36611str->del(strings[6414]);
36612str->del(strings[1856]);
36613strings[6415] = str->add("e,action,mouse,move");
36614strings[6416] = str->add("e");
36615strings[6417] = str->add("mouse,move");
36616strings[1856] = str->add(strings[1856]);
36617str->del(strings[6415]);
36618str->del(strings[6416]);
36619str->del(strings[6417]);
36620str->del(strings[1856]);
36621strings[6418] = str->add("e,action,mouse,move");
36622strings[6419] = str->add("e");
36623strings[1740] = str->add(strings[1740]);
36624strings[1856] = str->add(strings[1856]);
36625strings[1737] = str->add(strings[1737]);
36626strings[1853] = str->add(strings[1853]);
36627str->del(strings[6418]);
36628str->del(strings[6419]);
36629str->del(strings[1740]);
36630str->del(strings[1856]);
36631str->del(strings[1737]);
36632str->del(strings[1853]);
36633str->del(strings[7]);
36634str->del(strings[3111]);
36635strings[7] = str->add(strings[7]);
36636strings[3136] = str->add(strings[3136]);
36637strings[6420] = str->add("e,action,mouse,move");
36638strings[6421] = str->add("e");
36639strings[6422] = str->add("mouse,move");
36640strings[1853] = str->add(strings[1853]);
36641str->del(strings[6420]);
36642str->del(strings[6421]);
36643str->del(strings[6422]);
36644str->del(strings[1853]);
36645strings[6423] = str->add("e,action,mouse,move");
36646strings[6424] = str->add("e");
36647strings[6425] = str->add("mouse,move");
36648strings[1853] = str->add(strings[1853]);
36649strings[1740] = str->add(strings[1740]);
36650strings[1853] = str->add(strings[1853]);
36651strings[6423] = str->add(strings[6423]);
36652strings[6424] = str->add(strings[6424]);
36653strings[6423] = str->add(strings[6423]);
36654strings[6424] = str->add(strings[6424]);
36655strings[6426] = str->add("e,state,focused");
36656strings[6424] = str->add(strings[6424]);
36657str->del(strings[6423]);
36658str->del(strings[6424]);
36659str->del(strings[6425]);
36660str->del(strings[1853]);
36661str->del(strings[1740]);
36662str->del(strings[1853]);
36663str->del(strings[6423]);
36664str->del(strings[6424]);
36665str->del(strings[6423]);
36666str->del(strings[6424]);
36667str->del(strings[6426]);
36668str->del(strings[6424]);
36669strings[6427] = str->add("e,action,mouse,move");
36670strings[6428] = str->add("e");
36671str->del(strings[6427]);
36672str->del(strings[6428]);
36673strings[6429] = str->add("e,action,mouse,move");
36674strings[6430] = str->add("e");
36675strings[1737] = str->add(strings[1737]);
36676strings[377] = str->add(strings[377]);
36677strings[1737] = str->add(strings[1737]);
36678strings[1946] = str->add(strings[1946]);
36679strings[1737] = str->add(strings[1737]);
36680strings[1946] = str->add(strings[1946]);
36681str->del(strings[6429]);
36682str->del(strings[6430]);
36683str->del(strings[1737]);
36684str->del(strings[377]);
36685str->del(strings[1737]);
36686str->del(strings[1946]);
36687str->del(strings[1737]);
36688str->del(strings[1946]);
36689strings[6431] = str->add("e,action,mouse,move");
36690strings[6432] = str->add("e");
36691strings[6433] = str->add("mouse,move");
36692strings[377] = str->add(strings[377]);
36693strings[6433] = str->add(strings[6433]);
36694strings[1946] = str->add(strings[1946]);
36695strings[6433] = str->add(strings[6433]);
36696strings[1946] = str->add(strings[1946]);
36697str->del(strings[6431]);
36698str->del(strings[6432]);
36699str->del(strings[6433]);
36700str->del(strings[377]);
36701str->del(strings[6433]);
36702str->del(strings[1946]);
36703str->del(strings[6433]);
36704str->del(strings[1946]);
36705strings[1932] = str->add(strings[1932]);
36706strings[6434] = str->add("go_activeb27");
36707strings[6435] = str->add("program,start");
36708strings[6436] = str->add("go_activec27");
36709strings[1932] = str->add(strings[1932]);
36710strings[6437] = str->add("go_activeb3");
36711strings[6435] = str->add(strings[6435]);
36712strings[6438] = str->add("go_activec3");
36713str->del(strings[1932]);
36714str->del(strings[6434]);
36715str->del(strings[6435]);
36716str->del(strings[6436]);
36717str->del(strings[1932]);
36718str->del(strings[6437]);
36719str->del(strings[6435]);
36720str->del(strings[6438]);
36721str->del(strings[7]);
36722str->del(strings[3136]);
36723strings[7] = str->add(strings[7]);
36724strings[3167] = str->add(strings[3167]);
36725strings[6439] = str->add("e,action,mouse,move");
36726strings[6440] = str->add("e");
36727strings[6441] = str->add("mouse,move");
36728strings[377] = str->add(strings[377]);
36729strings[6441] = str->add(strings[6441]);
36730strings[1946] = str->add(strings[1946]);
36731strings[6441] = str->add(strings[6441]);
36732strings[1946] = str->add(strings[1946]);
36733strings[6439] = str->add(strings[6439]);
36734strings[6440] = str->add(strings[6440]);
36735strings[6441] = str->add(strings[6441]);
36736strings[377] = str->add(strings[377]);
36737strings[6441] = str->add(strings[6441]);
36738strings[1946] = str->add(strings[1946]);
36739strings[6441] = str->add(strings[6441]);
36740strings[1946] = str->add(strings[1946]);
36741str->del(strings[6439]);
36742str->del(strings[6440]);
36743str->del(strings[6441]);
36744str->del(strings[377]);
36745str->del(strings[6441]);
36746str->del(strings[1946]);
36747str->del(strings[6441]);
36748str->del(strings[1946]);
36749str->del(strings[6439]);
36750str->del(strings[6440]);
36751str->del(strings[6441]);
36752str->del(strings[377]);
36753str->del(strings[6441]);
36754str->del(strings[1946]);
36755str->del(strings[6441]);
36756str->del(strings[1946]);
36757strings[6442] = str->add("e,action,mouse,move");
36758strings[6443] = str->add("e");
36759strings[6444] = str->add("mouse,move");
36760strings[377] = str->add(strings[377]);
36761strings[6444] = str->add(strings[6444]);
36762strings[1946] = str->add(strings[1946]);
36763strings[6444] = str->add(strings[6444]);
36764strings[1946] = str->add(strings[1946]);
36765str->del(strings[6442]);
36766str->del(strings[6443]);
36767str->del(strings[6444]);
36768str->del(strings[377]);
36769str->del(strings[6444]);
36770str->del(strings[1946]);
36771str->del(strings[6444]);
36772str->del(strings[1946]);
36773strings[6445] = str->add("e,action,mouse,move");
36774strings[6446] = str->add("e");
36775strings[6447] = str->add("mouse,move");
36776strings[377] = str->add(strings[377]);
36777strings[6447] = str->add(strings[6447]);
36778strings[1946] = str->add(strings[1946]);
36779strings[6447] = str->add(strings[6447]);
36780strings[1946] = str->add(strings[1946]);
36781strings[6445] = str->add(strings[6445]);
36782strings[6446] = str->add(strings[6446]);
36783strings[6447] = str->add(strings[6447]);
36784strings[377] = str->add(strings[377]);
36785strings[6447] = str->add(strings[6447]);
36786strings[1946] = str->add(strings[1946]);
36787strings[6447] = str->add(strings[6447]);
36788strings[1946] = str->add(strings[1946]);
36789str->del(strings[6445]);
36790str->del(strings[6446]);
36791str->del(strings[6447]);
36792str->del(strings[377]);
36793str->del(strings[6447]);
36794str->del(strings[1946]);
36795str->del(strings[6447]);
36796str->del(strings[1946]);
36797str->del(strings[6445]);
36798str->del(strings[6446]);
36799str->del(strings[6447]);
36800str->del(strings[377]);
36801str->del(strings[6447]);
36802str->del(strings[1946]);
36803str->del(strings[6447]);
36804str->del(strings[1946]);
36805strings[6448] = str->add("e,action,mouse,move");
36806strings[6449] = str->add("e");
36807strings[6450] = str->add("mouse,move");
36808strings[377] = str->add(strings[377]);
36809strings[6450] = str->add(strings[6450]);
36810strings[1946] = str->add(strings[1946]);
36811strings[6450] = str->add(strings[6450]);
36812strings[1946] = str->add(strings[1946]);
36813str->del(strings[6448]);
36814str->del(strings[6449]);
36815str->del(strings[6450]);
36816str->del(strings[377]);
36817str->del(strings[6450]);
36818str->del(strings[1946]);
36819str->del(strings[6450]);
36820str->del(strings[1946]);
36821strings[1932] = str->add(strings[1932]);
36822strings[6451] = str->add("go_activec24");
36823strings[6452] = str->add("program,start");
36824strings[6453] = str->add("go_activeb24");
36825strings[1932] = str->add(strings[1932]);
36826strings[6454] = str->add("go_activec6");
36827strings[6452] = str->add(strings[6452]);
36828strings[6455] = str->add("go_activeb6");
36829str->del(strings[1932]);
36830str->del(strings[6451]);
36831str->del(strings[6452]);
36832str->del(strings[6453]);
36833str->del(strings[1932]);
36834str->del(strings[6454]);
36835str->del(strings[6452]);
36836str->del(strings[6455]);
36837str->del(strings[7]);
36838str->del(strings[3167]);
36839strings[7] = str->add(strings[7]);
36840strings[3190] = str->add(strings[3190]);
36841strings[6456] = str->add("e,action,mouse,move");
36842strings[6457] = str->add("e");
36843strings[6458] = str->add("mouse,move");
36844strings[377] = str->add(strings[377]);
36845strings[6458] = str->add(strings[6458]);
36846strings[1946] = str->add(strings[1946]);
36847strings[6458] = str->add(strings[6458]);
36848strings[1946] = str->add(strings[1946]);
36849str->del(strings[6456]);
36850str->del(strings[6457]);
36851str->del(strings[6458]);
36852str->del(strings[377]);
36853str->del(strings[6458]);
36854str->del(strings[1946]);
36855str->del(strings[6458]);
36856str->del(strings[1946]);
36857strings[6459] = str->add("e,action,mouse,move");
36858strings[6460] = str->add("e");
36859strings[6461] = str->add("mouse,move");
36860strings[377] = str->add(strings[377]);
36861strings[6461] = str->add(strings[6461]);
36862strings[1946] = str->add(strings[1946]);
36863strings[6461] = str->add(strings[6461]);
36864strings[1946] = str->add(strings[1946]);
36865str->del(strings[6459]);
36866str->del(strings[6460]);
36867str->del(strings[6461]);
36868str->del(strings[377]);
36869str->del(strings[6461]);
36870str->del(strings[1946]);
36871str->del(strings[6461]);
36872str->del(strings[1946]);
36873strings[6462] = str->add("e,action,mouse,move");
36874strings[6463] = str->add("e");
36875strings[6464] = str->add("mouse,move");
36876strings[377] = str->add(strings[377]);
36877strings[6464] = str->add(strings[6464]);
36878strings[1946] = str->add(strings[1946]);
36879strings[6464] = str->add(strings[6464]);
36880strings[1946] = str->add(strings[1946]);
36881str->del(strings[6462]);
36882str->del(strings[6463]);
36883str->del(strings[6464]);
36884str->del(strings[377]);
36885str->del(strings[6464]);
36886str->del(strings[1946]);
36887str->del(strings[6464]);
36888str->del(strings[1946]);
36889strings[6465] = str->add("e,action,mouse,move");
36890strings[6466] = str->add("e");
36891strings[6467] = str->add("mouse,move");
36892strings[377] = str->add(strings[377]);
36893strings[6467] = str->add(strings[6467]);
36894strings[1946] = str->add(strings[1946]);
36895strings[6467] = str->add(strings[6467]);
36896strings[1946] = str->add(strings[1946]);
36897str->del(strings[6465]);
36898str->del(strings[6466]);
36899str->del(strings[6467]);
36900str->del(strings[377]);
36901str->del(strings[6467]);
36902str->del(strings[1946]);
36903str->del(strings[6467]);
36904str->del(strings[1946]);
36905str->del(strings[7]);
36906str->del(strings[3190]);
36907strings[7] = str->add(strings[7]);
36908strings[2148] = str->add(strings[2148]);
36909strings[6468] = str->add("e,action,mouse,move");
36910strings[6469] = str->add("e");
36911strings[6470] = str->add("mouse,move");
36912strings[377] = str->add(strings[377]);
36913strings[6470] = str->add(strings[6470]);
36914strings[1946] = str->add(strings[1946]);
36915strings[6470] = str->add(strings[6470]);
36916strings[1946] = str->add(strings[1946]);
36917str->del(strings[6468]);
36918str->del(strings[6469]);
36919str->del(strings[6470]);
36920str->del(strings[377]);
36921str->del(strings[6470]);
36922str->del(strings[1946]);
36923str->del(strings[6470]);
36924str->del(strings[1946]);
36925strings[6471] = str->add("e,action,mouse,move");
36926strings[6472] = str->add("e");
36927strings[6473] = str->add("mouse,move");
36928strings[377] = str->add(strings[377]);
36929strings[6473] = str->add(strings[6473]);
36930strings[1946] = str->add(strings[1946]);
36931strings[6473] = str->add(strings[6473]);
36932strings[1946] = str->add(strings[1946]);
36933str->del(strings[6471]);
36934str->del(strings[6472]);
36935str->del(strings[6473]);
36936str->del(strings[377]);
36937str->del(strings[6473]);
36938str->del(strings[1946]);
36939str->del(strings[6473]);
36940str->del(strings[1946]);
36941strings[1932] = str->add(strings[1932]);
36942strings[6474] = str->add("go_activeb26");
36943strings[6475] = str->add("program,start");
36944strings[6476] = str->add("go_activec26");
36945strings[1932] = str->add(strings[1932]);
36946strings[6477] = str->add("go_activeb4");
36947strings[6475] = str->add(strings[6475]);
36948strings[6478] = str->add("go_activec4");
36949str->del(strings[1932]);
36950str->del(strings[6474]);
36951str->del(strings[6475]);
36952str->del(strings[6476]);
36953str->del(strings[1932]);
36954str->del(strings[6477]);
36955str->del(strings[6475]);
36956str->del(strings[6478]);
36957str->del(strings[7]);
36958str->del(strings[2148]);
36959strings[7] = str->add(strings[7]);
36960strings[2150] = str->add(strings[2150]);
36961strings[6479] = str->add("e,action,mouse,move");
36962strings[6480] = str->add("e");
36963strings[6481] = str->add("e,action,mouse,down");
36964strings[6480] = str->add(strings[6480]);
36965strings[167] = str->add(strings[167]);
36966strings[377] = str->add(strings[377]);
36967strings[6482] = str->add("Main");
36968strings[66] = str->add(strings[66]);
36969strings[6483] = str->add("Favorite Applications");
36970strings[469] = str->add(strings[469]);
36971strings[2686] = str->add(strings[2686]);
36972strings[2231] = str->add(strings[2231]);
36973strings[469] = str->add(strings[469]);
36974strings[2715] = str->add(strings[2715]);
36975strings[2338] = str->add(strings[2338]);
36976strings[469] = str->add(strings[469]);
36977strings[2691] = str->add(strings[2691]);
36978strings[6484] = str->add("Files");
36979strings[469] = str->add(strings[469]);
36980strings[2693] = str->add(strings[2693]);
36981strings[6485] = str->add("Virtual");
36982strings[469] = str->add(strings[469]);
36983strings[2687] = str->add(strings[2687]);
36984strings[2494] = str->add(strings[2494]);
36985strings[469] = str->add(strings[469]);
36986strings[2711] = str->add(strings[2711]);
36987strings[6486] = str->add("Show/Hide All Windows");
36988strings[1619] = str->add(strings[1619]);
36989strings[469] = str->add(strings[469]);
36990strings[2687] = str->add(strings[2687]);
36991strings[2552] = str->add(strings[2552]);
36992strings[469] = str->add(strings[469]);
36993strings[2682] = str->add(strings[2682]);
36994strings[1712] = str->add(strings[1712]);
36995strings[469] = str->add(strings[469]);
36996strings[2671] = str->add(strings[2671]);
36997strings[6487] = str->add("About");
36998strings[469] = str->add(strings[469]);
36999strings[2671] = str->add(strings[2671]);
37000strings[2514] = str->add(strings[2514]);
37001strings[469] = str->add(strings[469]);
37002strings[2680] = str->add(strings[2680]);
37003strings[1713] = str->add(strings[1713]);
37004strings[469] = str->add(strings[469]);
37005strings[2672] = str->add(strings[2672]);
37006strings[1714] = str->add(strings[1714]);
37007strings[469] = str->add(strings[469]);
37008strings[2673] = str->add(strings[2673]);
37009strings[6488] = str->add("Configuration");
37010strings[469] = str->add(strings[469]);
37011strings[2688] = str->add(strings[2688]);
37012strings[1721] = str->add(strings[1721]);
37013strings[469] = str->add(strings[469]);
37014strings[2690] = str->add(strings[2690]);
37015strings[361] = str->add(strings[361]);
37016strings[362] = str->add(strings[362]);
37017strings[361] = str->add(strings[361]);
37018str->del(strings[361]);
37019strings[362] = str->add(strings[362]);
37020str->del(strings[362]);
37021strings[6489] = str->add("resize");
37022str->del(strings[6489]);
37023strings[64] = str->add(strings[64]);
37024strings[2581] = str->add(strings[2581]);
37025strings[64] = str->add(strings[64]);
37026strings[6490] = str->add("load");
37027strings[6482] = str->add(strings[6482]);
37028strings[6491] = str->add("e,action,show,title");
37029strings[6480] = str->add(strings[6480]);
37030str->del(strings[6490]);
37031strings[6492] = str->add("program,start");
37032strings[6493] = str->add("on");
37033strings[1932] = str->add(strings[1932]);
37034strings[6493] = str->add(strings[6493]);
37035str->del(strings[6491]);
37036str->del(strings[6480]);
37037strings[1841] = str->add(strings[1841]);
37038strings[64] = str->add(strings[64]);
37039strings[1949] = str->add(strings[1949]);
37040strings[64] = str->add(strings[64]);
37041strings[1880] = str->add(strings[1880]);
37042str->del(strings[64]);
37043strings[379] = str->add(strings[379]);
37044strings[6482] = str->add(strings[6482]);
37045strings[6482] = str->add(strings[6482]);
37046strings[6482] = str->add(strings[6482]);
37047strings[64] = str->add(strings[64]);
37048strings[1876] = str->add(strings[1876]);
37049strings[64] = str->add(strings[64]);
37050strings[1874] = str->add(strings[1874]);
37051strings[64] = str->add(strings[64]);
37052strings[2634] = str->add(strings[2634]);
37053strings[6494] = str->add("load");
37054strings[1841] = str->add(strings[1841]);
37055strings[64] = str->add(strings[64]);
37056strings[2584] = str->add(strings[2584]);
37057strings[6494] = str->add(strings[6494]);
37058strings[1841] = str->add(strings[1841]);
37059strings[469] = str->add(strings[469]);
37060strings[2686] = str->add(strings[2686]);
37061strings[6494] = str->add(strings[6494]);
37062strings[469] = str->add(strings[469]);
37063strings[2871] = str->add(strings[2871]);
37064strings[1841] = str->add(strings[1841]);
37065strings[6495] = str->add("resize");
37066strings[6495] = str->add(strings[6495]);
37067strings[64] = str->add(strings[64]);
37068strings[2585] = str->add(strings[2585]);
37069strings[64] = str->add(strings[64]);
37070strings[6494] = str->add(strings[6494]);
37071strings[6483] = str->add(strings[6483]);
37072strings[1841] = str->add(strings[1841]);
37073str->del(strings[64]);
37074strings[385] = str->add(strings[385]);
37075strings[6483] = str->add(strings[6483]);
37076strings[64] = str->add(strings[64]);
37077strings[2586] = str->add(strings[2586]);
37078strings[6494] = str->add(strings[6494]);
37079strings[1841] = str->add(strings[1841]);
37080strings[64] = str->add(strings[64]);
37081strings[2886] = str->add(strings[2886]);
37082strings[64] = str->add(strings[64]);
37083strings[2888] = str->add(strings[2888]);
37084strings[64] = str->add(strings[64]);
37085strings[2634] = str->add(strings[2634]);
37086strings[6494] = str->add(strings[6494]);
37087strings[1841] = str->add(strings[1841]);
37088strings[64] = str->add(strings[64]);
37089strings[2584] = str->add(strings[2584]);
37090strings[6494] = str->add(strings[6494]);
37091strings[1841] = str->add(strings[1841]);
37092strings[469] = str->add(strings[469]);
37093strings[2715] = str->add(strings[2715]);
37094strings[6494] = str->add(strings[6494]);
37095strings[469] = str->add(strings[469]);
37096strings[2890] = str->add(strings[2890]);
37097strings[1841] = str->add(strings[1841]);
37098strings[6495] = str->add(strings[6495]);
37099strings[6495] = str->add(strings[6495]);
37100strings[64] = str->add(strings[64]);
37101strings[2585] = str->add(strings[2585]);
37102strings[64] = str->add(strings[64]);
37103strings[6494] = str->add(strings[6494]);
37104strings[2231] = str->add(strings[2231]);
37105strings[1841] = str->add(strings[1841]);
37106str->del(strings[64]);
37107strings[385] = str->add(strings[385]);
37108strings[2231] = str->add(strings[2231]);
37109strings[64] = str->add(strings[64]);
37110strings[2586] = str->add(strings[2586]);
37111strings[6494] = str->add(strings[6494]);
37112strings[1841] = str->add(strings[1841]);
37113strings[64] = str->add(strings[64]);
37114strings[2886] = str->add(strings[2886]);
37115strings[64] = str->add(strings[64]);
37116strings[2888] = str->add(strings[2888]);
37117strings[64] = str->add(strings[64]);
37118strings[2583] = str->add(strings[2583]);
37119strings[6494] = str->add(strings[6494]);
37120strings[1841] = str->add(strings[1841]);
37121strings[64] = str->add(strings[64]);
37122strings[2584] = str->add(strings[2584]);
37123strings[6494] = str->add(strings[6494]);
37124strings[1841] = str->add(strings[1841]);
37125strings[469] = str->add(strings[469]);
37126strings[2691] = str->add(strings[2691]);
37127strings[6494] = str->add(strings[6494]);
37128strings[469] = str->add(strings[469]);
37129strings[2892] = str->add(strings[2892]);
37130strings[1841] = str->add(strings[1841]);
37131strings[6495] = str->add(strings[6495]);
37132strings[6495] = str->add(strings[6495]);
37133strings[64] = str->add(strings[64]);
37134strings[2585] = str->add(strings[2585]);
37135strings[64] = str->add(strings[64]);
37136strings[6494] = str->add(strings[6494]);
37137strings[2338] = str->add(strings[2338]);
37138strings[1841] = str->add(strings[1841]);
37139str->del(strings[64]);
37140strings[385] = str->add(strings[385]);
37141strings[2338] = str->add(strings[2338]);
37142strings[64] = str->add(strings[64]);
37143strings[2886] = str->add(strings[2886]);
37144strings[64] = str->add(strings[64]);
37145strings[2888] = str->add(strings[2888]);
37146strings[64] = str->add(strings[64]);
37147strings[2583] = str->add(strings[2583]);
37148strings[6494] = str->add(strings[6494]);
37149strings[1841] = str->add(strings[1841]);
37150strings[64] = str->add(strings[64]);
37151strings[2584] = str->add(strings[2584]);
37152strings[6494] = str->add(strings[6494]);
37153strings[1841] = str->add(strings[1841]);
37154strings[469] = str->add(strings[469]);
37155strings[2693] = str->add(strings[2693]);
37156strings[6494] = str->add(strings[6494]);
37157strings[469] = str->add(strings[469]);
37158strings[4965] = str->add(strings[4965]);
37159strings[469] = str->add(strings[469]);
37160strings[4967] = str->add(strings[4967]);
37161strings[1841] = str->add(strings[1841]);
37162strings[6495] = str->add(strings[6495]);
37163strings[6495] = str->add(strings[6495]);
37164strings[64] = str->add(strings[64]);
37165strings[2585] = str->add(strings[2585]);
37166strings[64] = str->add(strings[64]);
37167strings[6494] = str->add(strings[6494]);
37168strings[6484] = str->add(strings[6484]);
37169strings[1841] = str->add(strings[1841]);
37170str->del(strings[64]);
37171strings[385] = str->add(strings[385]);
37172strings[6484] = str->add(strings[6484]);
37173strings[64] = str->add(strings[64]);
37174strings[2886] = str->add(strings[2886]);
37175strings[64] = str->add(strings[64]);
37176strings[2888] = str->add(strings[2888]);
37177strings[64] = str->add(strings[64]);
37178strings[2582] = str->add(strings[2582]);
37179strings[6494] = str->add(strings[6494]);
37180strings[1841] = str->add(strings[1841]);
37181strings[64] = str->add(strings[64]);
37182strings[2634] = str->add(strings[2634]);
37183strings[6494] = str->add(strings[6494]);
37184strings[1841] = str->add(strings[1841]);
37185strings[64] = str->add(strings[64]);
37186strings[2584] = str->add(strings[2584]);
37187strings[6494] = str->add(strings[6494]);
37188strings[1841] = str->add(strings[1841]);
37189strings[469] = str->add(strings[469]);
37190strings[2687] = str->add(strings[2687]);
37191strings[6494] = str->add(strings[6494]);
37192strings[469] = str->add(strings[469]);
37193strings[2894] = str->add(strings[2894]);
37194strings[1841] = str->add(strings[1841]);
37195strings[6495] = str->add(strings[6495]);
37196strings[6495] = str->add(strings[6495]);
37197strings[64] = str->add(strings[64]);
37198strings[2585] = str->add(strings[2585]);
37199strings[64] = str->add(strings[64]);
37200strings[6494] = str->add(strings[6494]);
37201strings[1619] = str->add(strings[1619]);
37202strings[1841] = str->add(strings[1841]);
37203str->del(strings[64]);
37204strings[385] = str->add(strings[385]);
37205strings[1619] = str->add(strings[1619]);
37206strings[64] = str->add(strings[64]);
37207strings[2586] = str->add(strings[2586]);
37208strings[6494] = str->add(strings[6494]);
37209strings[1841] = str->add(strings[1841]);
37210strings[64] = str->add(strings[64]);
37211strings[2886] = str->add(strings[2886]);
37212strings[64] = str->add(strings[64]);
37213strings[2888] = str->add(strings[2888]);
37214strings[64] = str->add(strings[64]);
37215strings[2634] = str->add(strings[2634]);
37216strings[6494] = str->add(strings[6494]);
37217strings[1841] = str->add(strings[1841]);
37218strings[64] = str->add(strings[64]);
37219strings[2584] = str->add(strings[2584]);
37220strings[6494] = str->add(strings[6494]);
37221strings[1841] = str->add(strings[1841]);
37222strings[469] = str->add(strings[469]);
37223strings[2682] = str->add(strings[2682]);
37224strings[6494] = str->add(strings[6494]);
37225strings[469] = str->add(strings[469]);
37226strings[2896] = str->add(strings[2896]);
37227strings[1841] = str->add(strings[1841]);
37228strings[6495] = str->add(strings[6495]);
37229strings[6495] = str->add(strings[6495]);
37230strings[64] = str->add(strings[64]);
37231strings[2585] = str->add(strings[2585]);
37232strings[64] = str->add(strings[64]);
37233strings[6494] = str->add(strings[6494]);
37234strings[2552] = str->add(strings[2552]);
37235strings[1841] = str->add(strings[1841]);
37236str->del(strings[64]);
37237strings[385] = str->add(strings[385]);
37238strings[2552] = str->add(strings[2552]);
37239strings[64] = str->add(strings[64]);
37240strings[2586] = str->add(strings[2586]);
37241strings[6494] = str->add(strings[6494]);
37242strings[1841] = str->add(strings[1841]);
37243strings[64] = str->add(strings[64]);
37244strings[2886] = str->add(strings[2886]);
37245strings[64] = str->add(strings[64]);
37246strings[2888] = str->add(strings[2888]);
37247strings[64] = str->add(strings[64]);
37248strings[2582] = str->add(strings[2582]);
37249strings[6494] = str->add(strings[6494]);
37250strings[1841] = str->add(strings[1841]);
37251strings[64] = str->add(strings[64]);
37252strings[2634] = str->add(strings[2634]);
37253strings[6494] = str->add(strings[6494]);
37254strings[1841] = str->add(strings[1841]);
37255strings[64] = str->add(strings[64]);
37256strings[2584] = str->add(strings[2584]);
37257strings[6494] = str->add(strings[6494]);
37258strings[1841] = str->add(strings[1841]);
37259strings[469] = str->add(strings[469]);
37260strings[2671] = str->add(strings[2671]);
37261strings[6494] = str->add(strings[6494]);
37262strings[469] = str->add(strings[469]);
37263strings[2898] = str->add(strings[2898]);
37264strings[469] = str->add(strings[469]);
37265strings[2900] = str->add(strings[2900]);
37266strings[1841] = str->add(strings[1841]);
37267strings[6495] = str->add(strings[6495]);
37268strings[6495] = str->add(strings[6495]);
37269strings[64] = str->add(strings[64]);
37270strings[2585] = str->add(strings[2585]);
37271strings[64] = str->add(strings[64]);
37272strings[6494] = str->add(strings[6494]);
37273strings[1712] = str->add(strings[1712]);
37274strings[1841] = str->add(strings[1841]);
37275str->del(strings[64]);
37276strings[385] = str->add(strings[385]);
37277strings[1712] = str->add(strings[1712]);
37278strings[64] = str->add(strings[64]);
37279strings[2586] = str->add(strings[2586]);
37280strings[6494] = str->add(strings[6494]);
37281strings[1841] = str->add(strings[1841]);
37282strings[64] = str->add(strings[64]);
37283strings[2886] = str->add(strings[2886]);
37284strings[64] = str->add(strings[64]);
37285strings[2888] = str->add(strings[2888]);
37286strings[64] = str->add(strings[64]);
37287strings[2582] = str->add(strings[2582]);
37288strings[6494] = str->add(strings[6494]);
37289strings[1841] = str->add(strings[1841]);
37290strings[64] = str->add(strings[64]);
37291strings[2634] = str->add(strings[2634]);
37292strings[6494] = str->add(strings[6494]);
37293strings[1841] = str->add(strings[1841]);
37294strings[64] = str->add(strings[64]);
37295strings[2584] = str->add(strings[2584]);
37296strings[6494] = str->add(strings[6494]);
37297strings[1841] = str->add(strings[1841]);
37298strings[469] = str->add(strings[469]);
37299strings[2688] = str->add(strings[2688]);
37300strings[6494] = str->add(strings[6494]);
37301strings[469] = str->add(strings[469]);
37302strings[2902] = str->add(strings[2902]);
37303strings[1841] = str->add(strings[1841]);
37304strings[6495] = str->add(strings[6495]);
37305strings[6495] = str->add(strings[6495]);
37306strings[64] = str->add(strings[64]);
37307strings[2585] = str->add(strings[2585]);
37308strings[64] = str->add(strings[64]);
37309strings[6494] = str->add(strings[6494]);
37310strings[6488] = str->add(strings[6488]);
37311strings[1841] = str->add(strings[1841]);
37312str->del(strings[64]);
37313strings[385] = str->add(strings[385]);
37314strings[6488] = str->add(strings[6488]);
37315strings[64] = str->add(strings[64]);
37316strings[2586] = str->add(strings[2586]);
37317strings[6494] = str->add(strings[6494]);
37318strings[1841] = str->add(strings[1841]);
37319strings[64] = str->add(strings[64]);
37320strings[2886] = str->add(strings[2886]);
37321strings[64] = str->add(strings[64]);
37322strings[2888] = str->add(strings[2888]);
37323strings[64] = str->add(strings[64]);
37324strings[2582] = str->add(strings[2582]);
37325strings[6494] = str->add(strings[6494]);
37326strings[1841] = str->add(strings[1841]);
37327strings[64] = str->add(strings[64]);
37328strings[2634] = str->add(strings[2634]);
37329strings[6494] = str->add(strings[6494]);
37330strings[1841] = str->add(strings[1841]);
37331strings[64] = str->add(strings[64]);
37332strings[2584] = str->add(strings[2584]);
37333strings[6494] = str->add(strings[6494]);
37334strings[1841] = str->add(strings[1841]);
37335strings[469] = str->add(strings[469]);
37336strings[2690] = str->add(strings[2690]);
37337strings[6494] = str->add(strings[6494]);
37338strings[469] = str->add(strings[469]);
37339strings[2904] = str->add(strings[2904]);
37340strings[1841] = str->add(strings[1841]);
37341strings[6495] = str->add(strings[6495]);
37342strings[6495] = str->add(strings[6495]);
37343strings[64] = str->add(strings[64]);
37344strings[2585] = str->add(strings[2585]);
37345strings[64] = str->add(strings[64]);
37346strings[6494] = str->add(strings[6494]);
37347strings[1721] = str->add(strings[1721]);
37348strings[1841] = str->add(strings[1841]);
37349str->del(strings[64]);
37350strings[385] = str->add(strings[385]);
37351strings[1721] = str->add(strings[1721]);
37352strings[64] = str->add(strings[64]);
37353strings[2586] = str->add(strings[2586]);
37354strings[6494] = str->add(strings[6494]);
37355strings[1841] = str->add(strings[1841]);
37356strings[64] = str->add(strings[64]);
37357strings[2886] = str->add(strings[2886]);
37358strings[64] = str->add(strings[64]);
37359strings[2888] = str->add(strings[2888]);
37360strings[6495] = str->add(strings[6495]);
37361strings[6495] = str->add(strings[6495]);
37362strings[6495] = str->add(strings[6495]);
37363strings[6495] = str->add(strings[6495]);
37364strings[6495] = str->add(strings[6495]);
37365strings[6495] = str->add(strings[6495]);
37366strings[6495] = str->add(strings[6495]);
37367strings[6495] = str->add(strings[6495]);
37368strings[6495] = str->add(strings[6495]);
37369strings[6495] = str->add(strings[6495]);
37370strings[6495] = str->add(strings[6495]);
37371strings[6495] = str->add(strings[6495]);
37372strings[6495] = str->add(strings[6495]);
37373strings[6495] = str->add(strings[6495]);
37374strings[6495] = str->add(strings[6495]);
37375strings[6495] = str->add(strings[6495]);
37376strings[6495] = str->add(strings[6495]);
37377strings[6495] = str->add(strings[6495]);
37378strings[6495] = str->add(strings[6495]);
37379strings[6495] = str->add(strings[6495]);
37380strings[6495] = str->add(strings[6495]);
37381strings[6495] = str->add(strings[6495]);
37382strings[6495] = str->add(strings[6495]);
37383strings[6495] = str->add(strings[6495]);
37384strings[6495] = str->add(strings[6495]);
37385strings[6495] = str->add(strings[6495]);
37386strings[6495] = str->add(strings[6495]);
37387strings[6495] = str->add(strings[6495]);
37388strings[6495] = str->add(strings[6495]);
37389strings[6495] = str->add(strings[6495]);
37390strings[6495] = str->add(strings[6495]);
37391strings[6495] = str->add(strings[6495]);
37392strings[6495] = str->add(strings[6495]);
37393strings[6495] = str->add(strings[6495]);
37394strings[6495] = str->add(strings[6495]);
37395strings[6495] = str->add(strings[6495]);
37396strings[6495] = str->add(strings[6495]);
37397strings[6495] = str->add(strings[6495]);
37398strings[6495] = str->add(strings[6495]);
37399strings[6496] = str->add("e,state,focused");
37400strings[6480] = str->add(strings[6480]);
37401strings[167] = str->add(strings[167]);
37402strings[1946] = str->add(strings[1946]);
37403strings[167] = str->add(strings[167]);
37404strings[1946] = str->add(strings[1946]);
37405str->del(strings[6479]);
37406str->del(strings[6480]);
37407str->del(strings[6481]);
37408str->del(strings[6480]);
37409str->del(strings[167]);
37410str->del(strings[377]);
37411str->del(strings[6492]);
37412str->del(strings[6493]);
37413str->del(strings[1932]);
37414str->del(strings[6493]);
37415str->del(strings[1841]);
37416str->del(strings[6494]);
37417str->del(strings[1841]);
37418str->del(strings[6494]);
37419str->del(strings[1841]);
37420str->del(strings[6494]);
37421str->del(strings[1841]);
37422str->del(strings[6495]);
37423str->del(strings[6495]);
37424str->del(strings[6494]);
37425str->del(strings[1841]);
37426str->del(strings[6494]);
37427str->del(strings[1841]);
37428str->del(strings[6494]);
37429str->del(strings[1841]);
37430str->del(strings[6494]);
37431str->del(strings[1841]);
37432str->del(strings[6494]);
37433str->del(strings[1841]);
37434str->del(strings[6495]);
37435str->del(strings[6495]);
37436str->del(strings[6494]);
37437str->del(strings[1841]);
37438str->del(strings[6494]);
37439str->del(strings[1841]);
37440str->del(strings[6494]);
37441str->del(strings[1841]);
37442str->del(strings[6494]);
37443str->del(strings[1841]);
37444str->del(strings[6494]);
37445str->del(strings[1841]);
37446str->del(strings[6495]);
37447str->del(strings[6495]);
37448str->del(strings[6494]);
37449str->del(strings[1841]);
37450str->del(strings[6494]);
37451str->del(strings[1841]);
37452str->del(strings[6494]);
37453str->del(strings[1841]);
37454str->del(strings[6494]);
37455str->del(strings[1841]);
37456str->del(strings[6495]);
37457str->del(strings[6495]);
37458str->del(strings[6494]);
37459str->del(strings[1841]);
37460str->del(strings[6494]);
37461str->del(strings[1841]);
37462str->del(strings[6494]);
37463str->del(strings[1841]);
37464str->del(strings[6494]);
37465str->del(strings[1841]);
37466str->del(strings[6494]);
37467str->del(strings[1841]);
37468str->del(strings[6495]);
37469str->del(strings[6495]);
37470str->del(strings[6494]);
37471str->del(strings[1841]);
37472str->del(strings[6494]);
37473str->del(strings[1841]);
37474str->del(strings[6494]);
37475str->del(strings[1841]);
37476str->del(strings[6494]);
37477str->del(strings[1841]);
37478str->del(strings[6494]);
37479str->del(strings[1841]);
37480str->del(strings[6495]);
37481str->del(strings[6495]);
37482str->del(strings[6494]);
37483str->del(strings[1841]);
37484str->del(strings[6494]);
37485str->del(strings[1841]);
37486str->del(strings[6494]);
37487str->del(strings[1841]);
37488str->del(strings[6494]);
37489str->del(strings[1841]);
37490str->del(strings[6494]);
37491str->del(strings[1841]);
37492str->del(strings[6494]);
37493str->del(strings[1841]);
37494str->del(strings[6495]);
37495str->del(strings[6495]);
37496str->del(strings[6494]);
37497str->del(strings[1841]);
37498str->del(strings[6494]);
37499str->del(strings[1841]);
37500str->del(strings[6494]);
37501str->del(strings[1841]);
37502str->del(strings[6494]);
37503str->del(strings[1841]);
37504str->del(strings[6494]);
37505str->del(strings[1841]);
37506str->del(strings[6494]);
37507str->del(strings[1841]);
37508str->del(strings[6495]);
37509str->del(strings[6495]);
37510str->del(strings[6494]);
37511str->del(strings[1841]);
37512str->del(strings[6494]);
37513str->del(strings[1841]);
37514str->del(strings[6494]);
37515str->del(strings[1841]);
37516str->del(strings[6494]);
37517str->del(strings[1841]);
37518str->del(strings[6494]);
37519str->del(strings[1841]);
37520str->del(strings[6494]);
37521str->del(strings[1841]);
37522str->del(strings[6495]);
37523str->del(strings[6495]);
37524str->del(strings[6494]);
37525str->del(strings[1841]);
37526str->del(strings[6494]);
37527str->del(strings[1841]);
37528str->del(strings[6495]);
37529str->del(strings[6495]);
37530str->del(strings[6495]);
37531str->del(strings[6495]);
37532str->del(strings[6495]);
37533str->del(strings[6495]);
37534str->del(strings[6495]);
37535str->del(strings[6495]);
37536str->del(strings[6495]);
37537str->del(strings[6495]);
37538str->del(strings[6495]);
37539str->del(strings[6495]);
37540str->del(strings[6495]);
37541str->del(strings[6495]);
37542str->del(strings[6495]);
37543str->del(strings[6495]);
37544str->del(strings[6495]);
37545str->del(strings[6495]);
37546str->del(strings[6495]);
37547str->del(strings[6495]);
37548str->del(strings[6495]);
37549str->del(strings[6495]);
37550str->del(strings[6495]);
37551str->del(strings[6495]);
37552str->del(strings[6495]);
37553str->del(strings[6495]);
37554str->del(strings[6495]);
37555str->del(strings[6495]);
37556str->del(strings[6495]);
37557str->del(strings[6495]);
37558str->del(strings[6495]);
37559str->del(strings[6495]);
37560str->del(strings[6495]);
37561str->del(strings[6495]);
37562str->del(strings[6495]);
37563str->del(strings[6495]);
37564str->del(strings[6495]);
37565str->del(strings[6495]);
37566str->del(strings[6495]);
37567strings[6497] = str->add("program,start");
37568strings[6498] = str->add("on");
37569str->del(strings[6496]);
37570str->del(strings[6480]);
37571str->del(strings[167]);
37572str->del(strings[1946]);
37573str->del(strings[167]);
37574str->del(strings[1946]);
37575str->del(strings[6497]);
37576str->del(strings[6498]);
37577strings[6499] = str->add("e,action,mouse,move");
37578strings[6500] = str->add("e");
37579strings[6499] = str->add(strings[6499]);
37580strings[6500] = str->add(strings[6500]);
37581strings[169] = str->add(strings[169]);
37582strings[377] = str->add(strings[377]);
37583strings[159] = str->add(strings[159]);
37584strings[377] = str->add(strings[377]);
37585strings[169] = str->add(strings[169]);
37586strings[1946] = str->add(strings[1946]);
37587strings[159] = str->add(strings[159]);
37588strings[1946] = str->add(strings[1946]);
37589strings[169] = str->add(strings[169]);
37590strings[1946] = str->add(strings[1946]);
37591strings[159] = str->add(strings[159]);
37592strings[1946] = str->add(strings[1946]);
37593strings[1740] = str->add(strings[1740]);
37594strings[377] = str->add(strings[377]);
37595strings[1740] = str->add(strings[1740]);
37596strings[1946] = str->add(strings[1946]);
37597strings[1740] = str->add(strings[1740]);
37598strings[1946] = str->add(strings[1946]);
37599str->del(strings[6499]);
37600str->del(strings[6500]);
37601str->del(strings[6499]);
37602str->del(strings[6500]);
37603str->del(strings[169]);
37604str->del(strings[377]);
37605str->del(strings[159]);
37606str->del(strings[377]);
37607str->del(strings[169]);
37608str->del(strings[1946]);
37609str->del(strings[159]);
37610str->del(strings[1946]);
37611str->del(strings[169]);
37612str->del(strings[1946]);
37613str->del(strings[159]);
37614str->del(strings[1946]);
37615str->del(strings[1740]);
37616str->del(strings[377]);
37617str->del(strings[1740]);
37618str->del(strings[1946]);
37619str->del(strings[1740]);
37620str->del(strings[1946]);
37621str->del(strings[6482]);
37622strings[6482] = str->add(strings[6482]);
37623str->del(strings[6482]);
37624strings[6482] = str->add(strings[6482]);
37625strings[6501] = str->add("resize");
37626strings[6483] = str->add(strings[6483]);
37627strings[6483] = str->add(strings[6483]);
37628strings[64] = str->add(strings[64]);
37629strings[2913] = str->add(strings[2913]);
37630strings[6501] = str->add(strings[6501]);
37631strings[2231] = str->add(strings[2231]);
37632strings[2231] = str->add(strings[2231]);
37633strings[64] = str->add(strings[64]);
37634strings[2913] = str->add(strings[2913]);
37635strings[6501] = str->add(strings[6501]);
37636strings[2338] = str->add(strings[2338]);
37637strings[2338] = str->add(strings[2338]);
37638strings[6501] = str->add(strings[6501]);
37639strings[6484] = str->add(strings[6484]);
37640strings[6484] = str->add(strings[6484]);
37641strings[64] = str->add(strings[64]);
37642strings[2915] = str->add(strings[2915]);
37643strings[6501] = str->add(strings[6501]);
37644strings[1619] = str->add(strings[1619]);
37645strings[1619] = str->add(strings[1619]);
37646strings[64] = str->add(strings[64]);
37647strings[2913] = str->add(strings[2913]);
37648strings[6501] = str->add(strings[6501]);
37649strings[2552] = str->add(strings[2552]);
37650strings[2552] = str->add(strings[2552]);
37651strings[64] = str->add(strings[64]);
37652strings[2913] = str->add(strings[2913]);
37653strings[64] = str->add(strings[64]);
37654strings[2915] = str->add(strings[2915]);
37655strings[6501] = str->add(strings[6501]);
37656strings[1712] = str->add(strings[1712]);
37657strings[1712] = str->add(strings[1712]);
37658strings[64] = str->add(strings[64]);
37659strings[2913] = str->add(strings[2913]);
37660strings[64] = str->add(strings[64]);
37661strings[2915] = str->add(strings[2915]);
37662strings[6501] = str->add(strings[6501]);
37663strings[6488] = str->add(strings[6488]);
37664strings[6488] = str->add(strings[6488]);
37665strings[64] = str->add(strings[64]);
37666strings[2913] = str->add(strings[2913]);
37667strings[64] = str->add(strings[64]);
37668strings[2915] = str->add(strings[2915]);
37669strings[6501] = str->add(strings[6501]);
37670strings[1721] = str->add(strings[1721]);
37671strings[1721] = str->add(strings[1721]);
37672strings[64] = str->add(strings[64]);
37673strings[2913] = str->add(strings[2913]);
37674strings[6502] = str->add("font");
37675strings[6503] = str->add("font_fallbacks");
37676strings[6504] = str->add("font_size");
37677strings[6505] = str->add("font_source");
37678strings[6506] = str->add("color");
37679strings[6507] = str->add("underline_color");
37680strings[6508] = str->add("underline2_color");
37681strings[6509] = str->add("outline_color");
37682strings[6510] = str->add("shadow_color");
37683strings[6511] = str->add("glow_color");
37684strings[6512] = str->add("glow2_color");
37685strings[6513] = str->add("backing_color");
37686strings[6514] = str->add("strikethrough_color");
37687strings[6515] = str->add("align");
37688strings[6516] = str->add("valign");
37689strings[6517] = str->add("wrap");
37690strings[6518] = str->add("left_margin");
37691strings[6519] = str->add("right_margin");
37692strings[6520] = str->add("underline");
37693strings[6521] = str->add("strikethrough");
37694strings[6522] = str->add("backing");
37695strings[6523] = str->add("style");
37696strings[6524] = str->add("tabstops");
37697strings[6515] = str->add(strings[6515]);
37698strings[6525] = str->add("center");
37699str->del(strings[6515]);
37700str->del(strings[6525]);
37701strings[6506] = str->add(strings[6506]);
37702strings[6526] = str->add("#000");
37703str->del(strings[6506]);
37704str->del(strings[6526]);
37705strings[6523] = str->add(strings[6523]);
37706strings[6527] = str->add("shadow");
37707str->del(strings[6523]);
37708str->del(strings[6527]);
37709strings[6510] = str->add(strings[6510]);
37710strings[6528] = str->add("#ffffff80");
37711str->del(strings[6510]);
37712str->del(strings[6528]);
37713strings[6517] = str->add(strings[6517]);
37714strings[6529] = str->add("word");
37715str->del(strings[6517]);
37716str->del(strings[6529]);
37717strings[6505] = str->add(strings[6505]);
37718strings[469] = str->add(strings[469]);
37719strings[469] = str->add(strings[469]);
37720str->del(strings[6505]);
37721str->del(strings[469]);
37722strings[6504] = str->add(strings[6504]);
37723strings[6530] = str->add("10.000000");
37724str->del(strings[6504]);
37725str->del(strings[6530]);
37726strings[6502] = str->add(strings[6502]);
37727strings[470] = str->add(strings[470]);
37728strings[470] = str->add(strings[470]);
37729str->del(strings[6502]);
37730str->del(strings[470]);
37731strings[382] = str->add(strings[382]);
37732strings[382] = str->add(strings[382]);
37733strings[382] = str->add(strings[382]);
37734strings[382] = str->add(strings[382]);
37735strings[382] = str->add(strings[382]);
37736strings[382] = str->add(strings[382]);
37737strings[470] = str->add(strings[470]);
37738strings[469] = str->add(strings[469]);
37739strings[6523] = str->add(strings[6523]);
37740strings[6531] = str->add("glow");
37741str->del(strings[6523]);
37742str->del(strings[6531]);
37743strings[6506] = str->add(strings[6506]);
37744strings[6532] = str->add("#fff");
37745str->del(strings[6506]);
37746str->del(strings[6532]);
37747strings[6512] = str->add(strings[6512]);
37748strings[6533] = str->add("#fe87");
37749str->del(strings[6512]);
37750str->del(strings[6533]);
37751strings[6511] = str->add(strings[6511]);
37752strings[6534] = str->add("#fa14");
37753str->del(strings[6511]);
37754str->del(strings[6534]);
37755strings[6502] = str->add(strings[6502]);
37756strings[471] = str->add(strings[471]);
37757str->del(strings[470]);
37758strings[471] = str->add(strings[471]);
37759str->del(strings[6502]);
37760str->del(strings[471]);
37761strings[470] = str->add(strings[470]);
37762strings[469] = str->add(strings[469]);
37763strings[6523] = str->add(strings[6523]);
37764strings[6535] = str->add("glow");
37765str->del(strings[6523]);
37766str->del(strings[6535]);
37767strings[6506] = str->add(strings[6506]);
37768strings[6536] = str->add("#fff");
37769str->del(strings[6506]);
37770str->del(strings[6536]);
37771strings[6512] = str->add(strings[6512]);
37772strings[6537] = str->add("#fe87");
37773str->del(strings[6512]);
37774str->del(strings[6537]);
37775strings[6511] = str->add(strings[6511]);
37776strings[6538] = str->add("#fa14");
37777str->del(strings[6511]);
37778str->del(strings[6538]);
37779strings[6502] = str->add(strings[6502]);
37780strings[471] = str->add(strings[471]);
37781str->del(strings[470]);
37782strings[471] = str->add(strings[471]);
37783str->del(strings[6502]);
37784str->del(strings[471]);
37785str->del(strings[6502]);
37786str->del(strings[6503]);
37787str->del(strings[6504]);
37788str->del(strings[6505]);
37789str->del(strings[6506]);
37790str->del(strings[6507]);
37791str->del(strings[6508]);
37792str->del(strings[6509]);
37793str->del(strings[6510]);
37794str->del(strings[6511]);
37795str->del(strings[6512]);
37796str->del(strings[6513]);
37797str->del(strings[6514]);
37798str->del(strings[6515]);
37799str->del(strings[6516]);
37800str->del(strings[6517]);
37801str->del(strings[6518]);
37802str->del(strings[6519]);
37803str->del(strings[6520]);
37804str->del(strings[6521]);
37805str->del(strings[6522]);
37806str->del(strings[6523]);
37807str->del(strings[6524]);
37808str->del(strings[382]);
37809str->del(strings[382]);
37810str->del(strings[382]);
37811str->del(strings[382]);
37812str->del(strings[382]);
37813str->del(strings[382]);
37814str->del(strings[471]);
37815str->del(strings[469]);
37816str->del(strings[470]);
37817str->del(strings[469]);
37818str->del(strings[471]);
37819str->del(strings[469]);
37820strings[6539] = str->add("font");
37821strings[6540] = str->add("font_fallbacks");
37822strings[6541] = str->add("font_size");
37823strings[6542] = str->add("font_source");
37824strings[6543] = str->add("color");
37825strings[6544] = str->add("underline_color");
37826strings[6545] = str->add("underline2_color");
37827strings[6546] = str->add("outline_color");
37828strings[6547] = str->add("shadow_color");
37829strings[6548] = str->add("glow_color");
37830strings[6549] = str->add("glow2_color");
37831strings[6550] = str->add("backing_color");
37832strings[6551] = str->add("strikethrough_color");
37833strings[6552] = str->add("align");
37834strings[6553] = str->add("valign");
37835strings[6554] = str->add("wrap");
37836strings[6555] = str->add("left_margin");
37837strings[6556] = str->add("right_margin");
37838strings[6557] = str->add("underline");
37839strings[6558] = str->add("strikethrough");
37840strings[6559] = str->add("backing");
37841strings[6560] = str->add("style");
37842strings[6561] = str->add("tabstops");
37843strings[6552] = str->add(strings[6552]);
37844strings[6562] = str->add("center");
37845str->del(strings[6552]);
37846str->del(strings[6562]);
37847strings[6543] = str->add(strings[6543]);
37848strings[6563] = str->add("#000");
37849str->del(strings[6543]);
37850str->del(strings[6563]);
37851strings[6560] = str->add(strings[6560]);
37852strings[6564] = str->add("shadow");
37853str->del(strings[6560]);
37854str->del(strings[6564]);
37855strings[6547] = str->add(strings[6547]);
37856strings[6565] = str->add("#ffffff80");
37857str->del(strings[6547]);
37858str->del(strings[6565]);
37859strings[6554] = str->add(strings[6554]);
37860strings[6566] = str->add("word");
37861str->del(strings[6554]);
37862str->del(strings[6566]);
37863strings[6542] = str->add(strings[6542]);
37864strings[469] = str->add(strings[469]);
37865strings[469] = str->add(strings[469]);
37866str->del(strings[6542]);
37867str->del(strings[469]);
37868strings[6541] = str->add(strings[6541]);
37869strings[6567] = str->add("10.000000");
37870str->del(strings[6541]);
37871str->del(strings[6567]);
37872strings[6539] = str->add(strings[6539]);
37873strings[470] = str->add(strings[470]);
37874strings[470] = str->add(strings[470]);
37875str->del(strings[6539]);
37876str->del(strings[470]);
37877strings[470] = str->add(strings[470]);
37878strings[469] = str->add(strings[469]);
37879strings[6560] = str->add(strings[6560]);
37880strings[6568] = str->add("soft_shadow");
37881str->del(strings[6560]);
37882str->del(strings[6568]);
37883strings[6543] = str->add(strings[6543]);
37884strings[6569] = str->add("#fff");
37885str->del(strings[6543]);
37886str->del(strings[6569]);
37887strings[6547] = str->add(strings[6547]);
37888strings[6570] = str->add("#00000020");
37889str->del(strings[6547]);
37890str->del(strings[6570]);
37891strings[6541] = str->add(strings[6541]);
37892strings[6571] = str->add("12.000000");
37893str->del(strings[6541]);
37894str->del(strings[6571]);
37895strings[6539] = str->add(strings[6539]);
37896strings[471] = str->add(strings[471]);
37897str->del(strings[470]);
37898strings[471] = str->add(strings[471]);
37899str->del(strings[6539]);
37900str->del(strings[471]);
37901strings[382] = str->add(strings[382]);
37902strings[382] = str->add(strings[382]);
37903strings[382] = str->add(strings[382]);
37904strings[382] = str->add(strings[382]);
37905strings[382] = str->add(strings[382]);
37906strings[382] = str->add(strings[382]);
37907strings[382] = str->add(strings[382]);
37908strings[382] = str->add(strings[382]);
37909strings[382] = str->add(strings[382]);
37910strings[382] = str->add(strings[382]);
37911strings[382] = str->add(strings[382]);
37912strings[382] = str->add(strings[382]);
37913strings[382] = str->add(strings[382]);
37914strings[382] = str->add(strings[382]);
37915strings[382] = str->add(strings[382]);
37916strings[382] = str->add(strings[382]);
37917strings[382] = str->add(strings[382]);
37918strings[382] = str->add(strings[382]);
37919strings[382] = str->add(strings[382]);
37920strings[382] = str->add(strings[382]);
37921strings[382] = str->add(strings[382]);
37922strings[382] = str->add(strings[382]);
37923str->del(strings[6539]);
37924str->del(strings[6540]);
37925str->del(strings[6541]);
37926str->del(strings[6542]);
37927str->del(strings[6543]);
37928str->del(strings[6544]);
37929str->del(strings[6545]);
37930str->del(strings[6546]);
37931str->del(strings[6547]);
37932str->del(strings[6548]);
37933str->del(strings[6549]);
37934str->del(strings[6550]);
37935str->del(strings[6551]);
37936str->del(strings[6552]);
37937str->del(strings[6553]);
37938str->del(strings[6554]);
37939str->del(strings[6555]);
37940str->del(strings[6556]);
37941str->del(strings[6557]);
37942str->del(strings[6558]);
37943str->del(strings[6559]);
37944str->del(strings[6560]);
37945str->del(strings[6561]);
37946str->del(strings[471]);
37947str->del(strings[469]);
37948str->del(strings[382]);
37949str->del(strings[382]);
37950str->del(strings[382]);
37951str->del(strings[382]);
37952str->del(strings[382]);
37953str->del(strings[382]);
37954str->del(strings[382]);
37955str->del(strings[382]);
37956str->del(strings[382]);
37957str->del(strings[382]);
37958str->del(strings[382]);
37959str->del(strings[382]);
37960str->del(strings[382]);
37961str->del(strings[382]);
37962str->del(strings[382]);
37963str->del(strings[382]);
37964str->del(strings[382]);
37965str->del(strings[382]);
37966str->del(strings[382]);
37967str->del(strings[382]);
37968str->del(strings[382]);
37969str->del(strings[470]);
37970str->del(strings[469]);
37971str->del(strings[382]);
37972strings[1932] = str->add(strings[1932]);
37973strings[6572] = str->add("go_activec23");
37974strings[6573] = str->add("program,start");
37975strings[6574] = str->add("go_activeb23");
37976strings[1932] = str->add(strings[1932]);
37977strings[6575] = str->add("go_activec7");
37978strings[6573] = str->add(strings[6573]);
37979strings[6576] = str->add("go_activeb7");
37980str->del(strings[6501]);
37981str->del(strings[6501]);
37982str->del(strings[6501]);
37983str->del(strings[6501]);
37984str->del(strings[6501]);
37985str->del(strings[6501]);
37986str->del(strings[6501]);
37987str->del(strings[6501]);
37988str->del(strings[6501]);
37989str->del(strings[1932]);
37990str->del(strings[6572]);
37991str->del(strings[6573]);
37992str->del(strings[6574]);
37993str->del(strings[1932]);
37994str->del(strings[6575]);
37995str->del(strings[6573]);
37996str->del(strings[6576]);
37997strings[6577] = str->add("font");
37998strings[6578] = str->add("font_fallbacks");
37999strings[6579] = str->add("font_size");
38000strings[6580] = str->add("font_source");
38001strings[6581] = str->add("color");
38002strings[6582] = str->add("underline_color");
38003strings[6583] = str->add("underline2_color");
38004strings[6584] = str->add("outline_color");
38005strings[6585] = str->add("shadow_color");
38006strings[6586] = str->add("glow_color");
38007strings[6587] = str->add("glow2_color");
38008strings[6588] = str->add("backing_color");
38009strings[6589] = str->add("strikethrough_color");
38010strings[6590] = str->add("align");
38011strings[6591] = str->add("valign");
38012strings[6592] = str->add("wrap");
38013strings[6593] = str->add("left_margin");
38014strings[6594] = str->add("right_margin");
38015strings[6595] = str->add("underline");
38016strings[6596] = str->add("strikethrough");
38017strings[6597] = str->add("backing");
38018strings[6598] = str->add("style");
38019strings[6599] = str->add("tabstops");
38020strings[6590] = str->add(strings[6590]);
38021strings[6600] = str->add("center");
38022str->del(strings[6590]);
38023str->del(strings[6600]);
38024strings[6581] = str->add(strings[6581]);
38025strings[6601] = str->add("#000");
38026str->del(strings[6581]);
38027str->del(strings[6601]);
38028strings[6598] = str->add(strings[6598]);
38029strings[6602] = str->add("shadow");
38030str->del(strings[6598]);
38031str->del(strings[6602]);
38032strings[6585] = str->add(strings[6585]);
38033strings[6603] = str->add("#ffffff80");
38034str->del(strings[6585]);
38035str->del(strings[6603]);
38036strings[6592] = str->add(strings[6592]);
38037strings[6604] = str->add("word");
38038str->del(strings[6592]);
38039str->del(strings[6604]);
38040strings[6580] = str->add(strings[6580]);
38041strings[469] = str->add(strings[469]);
38042strings[469] = str->add(strings[469]);
38043str->del(strings[6580]);
38044str->del(strings[469]);
38045strings[6579] = str->add(strings[6579]);
38046strings[6605] = str->add("10.000000");
38047str->del(strings[6579]);
38048str->del(strings[6605]);
38049strings[6577] = str->add(strings[6577]);
38050strings[470] = str->add(strings[470]);
38051strings[470] = str->add(strings[470]);
38052str->del(strings[6577]);
38053str->del(strings[470]);
38054strings[470] = str->add(strings[470]);
38055strings[469] = str->add(strings[469]);
38056strings[6598] = str->add(strings[6598]);
38057strings[6606] = str->add("soft_shadow");
38058str->del(strings[6598]);
38059str->del(strings[6606]);
38060strings[6581] = str->add(strings[6581]);
38061strings[6607] = str->add("#fff");
38062str->del(strings[6581]);
38063str->del(strings[6607]);
38064strings[6585] = str->add(strings[6585]);
38065strings[6608] = str->add("#00000020");
38066str->del(strings[6585]);
38067str->del(strings[6608]);
38068strings[6579] = str->add(strings[6579]);
38069strings[6609] = str->add("12.000000");
38070str->del(strings[6579]);
38071str->del(strings[6609]);
38072strings[6577] = str->add(strings[6577]);
38073strings[471] = str->add(strings[471]);
38074str->del(strings[470]);
38075strings[471] = str->add(strings[471]);
38076str->del(strings[6577]);
38077str->del(strings[471]);
38078strings[382] = str->add(strings[382]);
38079strings[382] = str->add(strings[382]);
38080strings[382] = str->add(strings[382]);
38081strings[382] = str->add(strings[382]);
38082strings[382] = str->add(strings[382]);
38083strings[382] = str->add(strings[382]);
38084strings[382] = str->add(strings[382]);
38085strings[382] = str->add(strings[382]);
38086strings[382] = str->add(strings[382]);
38087strings[382] = str->add(strings[382]);
38088strings[382] = str->add(strings[382]);
38089strings[382] = str->add(strings[382]);
38090strings[382] = str->add(strings[382]);
38091strings[382] = str->add(strings[382]);
38092strings[382] = str->add(strings[382]);
38093strings[382] = str->add(strings[382]);
38094strings[382] = str->add(strings[382]);
38095strings[382] = str->add(strings[382]);
38096strings[382] = str->add(strings[382]);
38097strings[382] = str->add(strings[382]);
38098strings[382] = str->add(strings[382]);
38099strings[382] = str->add(strings[382]);
38100str->del(strings[471]);
38101str->del(strings[469]);
38102str->del(strings[382]);
38103str->del(strings[382]);
38104str->del(strings[382]);
38105str->del(strings[382]);
38106str->del(strings[382]);
38107str->del(strings[382]);
38108str->del(strings[382]);
38109str->del(strings[382]);
38110str->del(strings[382]);
38111str->del(strings[382]);
38112str->del(strings[382]);
38113str->del(strings[382]);
38114str->del(strings[382]);
38115str->del(strings[382]);
38116str->del(strings[382]);
38117str->del(strings[382]);
38118str->del(strings[382]);
38119str->del(strings[382]);
38120str->del(strings[382]);
38121str->del(strings[382]);
38122str->del(strings[382]);
38123str->del(strings[470]);
38124str->del(strings[469]);
38125str->del(strings[382]);
38126str->del(strings[6577]);
38127str->del(strings[6578]);
38128str->del(strings[6579]);
38129str->del(strings[6580]);
38130str->del(strings[6581]);
38131str->del(strings[6582]);
38132str->del(strings[6583]);
38133str->del(strings[6584]);
38134str->del(strings[6585]);
38135str->del(strings[6586]);
38136str->del(strings[6587]);
38137str->del(strings[6588]);
38138str->del(strings[6589]);
38139str->del(strings[6590]);
38140str->del(strings[6591]);
38141str->del(strings[6592]);
38142str->del(strings[6593]);
38143str->del(strings[6594]);
38144str->del(strings[6595]);
38145str->del(strings[6596]);
38146str->del(strings[6597]);
38147str->del(strings[6598]);
38148str->del(strings[6599]);
38149str->del(strings[7]);
38150str->del(strings[2150]);
38151strings[7] = str->add(strings[7]);
38152strings[1966] = str->add(strings[1966]);
38153strings[6610] = str->add("e,action,mouse,move");
38154strings[6611] = str->add("e");
38155strings[6612] = str->add("e,action,mouse,up");
38156strings[6611] = str->add(strings[6611]);
38157str->del(strings[6610]);
38158str->del(strings[6611]);
38159str->del(strings[6612]);
38160str->del(strings[6611]);
38161strings[6613] = str->add("e,action,mouse,move");
38162strings[6614] = str->add("e");
38163str->del(strings[6613]);
38164str->del(strings[6614]);
38165str->del(strings[7]);
38166str->del(strings[1966]);
38167strings[7] = str->add(strings[7]);
38168strings[1964] = str->add(strings[1964]);
38169strings[6615] = str->add("e,action,mouse,move");
38170strings[6616] = str->add("e");
38171strings[6615] = str->add(strings[6615]);
38172strings[6616] = str->add(strings[6616]);
38173str->del(strings[6615]);
38174str->del(strings[6616]);
38175str->del(strings[6615]);
38176str->del(strings[6616]);
38177strings[6617] = str->add("e,action,mouse,move");
38178strings[6618] = str->add("e");
38179str->del(strings[6617]);
38180str->del(strings[6618]);
38181str->del(strings[7]);
38182str->del(strings[1964]);
38183strings[7] = str->add(strings[7]);
38184strings[1968] = str->add(strings[1968]);
38185strings[6619] = str->add("e,action,mouse,move");
38186strings[6620] = str->add("e");
38187strings[6619] = str->add(strings[6619]);
38188strings[6620] = str->add(strings[6620]);
38189str->del(strings[6619]);
38190str->del(strings[6620]);
38191str->del(strings[6619]);
38192str->del(strings[6620]);
38193strings[6621] = str->add("e,action,mouse,move");
38194strings[6622] = str->add("e");
38195str->del(strings[6621]);
38196str->del(strings[6622]);
38197strings[6623] = str->add("e,action,mouse,move");
38198strings[6624] = str->add("e");
38199str->del(strings[6623]);
38200str->del(strings[6624]);
38201strings[6625] = str->add("e,action,mouse,move");
38202strings[6626] = str->add("e");
38203strings[6625] = str->add(strings[6625]);
38204strings[6626] = str->add(strings[6626]);
38205str->del(strings[6625]);
38206str->del(strings[6626]);
38207str->del(strings[6625]);
38208str->del(strings[6626]);
38209strings[6627] = str->add("e,action,mouse,move");
38210strings[6628] = str->add("e");
38211str->del(strings[6627]);
38212str->del(strings[6628]);
38213strings[6629] = str->add("e,action,mouse,move");
38214strings[6630] = str->add("e");
38215str->del(strings[6629]);
38216str->del(strings[6630]);
38217strings[1932] = str->add(strings[1932]);
38218strings[6631] = str->add("go_activeb25");
38219strings[6632] = str->add("program,start");
38220strings[6633] = str->add("go_activec25");
38221strings[1932] = str->add(strings[1932]);
38222strings[6634] = str->add("go_activeb5");
38223strings[6632] = str->add(strings[6632]);
38224strings[6635] = str->add("go_activec5");
38225strings[1932] = str->add(strings[1932]);
38226strings[6636] = str->add("on");
38227str->del(strings[1932]);
38228str->del(strings[6631]);
38229str->del(strings[6632]);
38230str->del(strings[6633]);
38231str->del(strings[1932]);
38232str->del(strings[6634]);
38233str->del(strings[6632]);
38234str->del(strings[6635]);
38235str->del(strings[1932]);
38236str->del(strings[6636]);
38237strings[6637] = str->add("e,action,mouse,move");
38238strings[6638] = str->add("e");
38239strings[6639] = str->add("e,state,selected");
38240strings[6638] = str->add(strings[6638]);
38241strings[6639] = str->add(strings[6639]);
38242strings[6638] = str->add(strings[6638]);
38243strings[6639] = str->add(strings[6639]);
38244strings[6638] = str->add(strings[6638]);
38245strings[6639] = str->add(strings[6639]);
38246strings[6638] = str->add(strings[6638]);
38247strings[6639] = str->add(strings[6639]);
38248strings[6638] = str->add(strings[6638]);
38249strings[6639] = str->add(strings[6639]);
38250strings[6638] = str->add(strings[6638]);
38251strings[6640] = str->add("Lock Screen");
38252strings[469] = str->add(strings[469]);
38253strings[2708] = str->add(strings[2708]);
38254strings[1726] = str->add(strings[1726]);
38255strings[469] = str->add(strings[469]);
38256strings[2677] = str->add(strings[2677]);
38257strings[6641] = str->add("Hibernate");
38258strings[469] = str->add(strings[469]);
38259strings[2678] = str->add(strings[2678]);
38260strings[1724] = str->add(strings[1724]);
38261strings[469] = str->add(strings[469]);
38262strings[2676] = str->add(strings[2676]);
38263strings[1722] = str->add(strings[1722]);
38264strings[469] = str->add(strings[469]);
38265strings[2675] = str->add(strings[2675]);
38266strings[6642] = str->add("Logout");
38267strings[469] = str->add(strings[469]);
38268strings[2674] = str->add(strings[2674]);
38269str->del(strings[6637]);
38270str->del(strings[6638]);
38271strings[6643] = str->add("program,start");
38272strings[6644] = str->add("sel");
38273str->del(strings[6639]);
38274str->del(strings[6638]);
38275str->del(strings[6639]);
38276str->del(strings[6638]);
38277strings[6643] = str->add(strings[6643]);
38278strings[6644] = str->add(strings[6644]);
38279str->del(strings[6639]);
38280str->del(strings[6638]);
38281strings[6643] = str->add(strings[6643]);
38282strings[6644] = str->add(strings[6644]);
38283strings[1932] = str->add(strings[1932]);
38284strings[6644] = str->add(strings[6644]);
38285str->del(strings[6639]);
38286str->del(strings[6638]);
38287str->del(strings[6639]);
38288str->del(strings[6638]);
38289str->del(strings[6639]);
38290str->del(strings[6638]);
38291str->del(strings[6643]);
38292str->del(strings[6644]);
38293str->del(strings[6643]);
38294str->del(strings[6644]);
38295str->del(strings[6643]);
38296str->del(strings[6644]);
38297str->del(strings[1932]);
38298str->del(strings[6644]);
38299strings[361] = str->add(strings[361]);
38300strings[362] = str->add(strings[362]);
38301strings[361] = str->add(strings[361]);
38302str->del(strings[361]);
38303strings[362] = str->add(strings[362]);
38304str->del(strings[362]);
38305strings[6645] = str->add("resize");
38306str->del(strings[6645]);
38307strings[64] = str->add(strings[64]);
38308strings[2581] = str->add(strings[2581]);
38309strings[64] = str->add(strings[64]);
38310strings[6646] = str->add("load");
38311strings[1841] = str->add(strings[1841]);
38312strings[64] = str->add(strings[64]);
38313strings[1949] = str->add(strings[1949]);
38314strings[64] = str->add(strings[64]);
38315strings[1880] = str->add(strings[1880]);
38316strings[64] = str->add(strings[64]);
38317strings[1876] = str->add(strings[1876]);
38318str->del(strings[64]);
38319strings[379] = str->add(strings[379]);
38320strings[1842] = str->add(strings[1842]);
38321strings[1842] = str->add(strings[1842]);
38322strings[64] = str->add(strings[64]);
38323strings[1874] = str->add(strings[1874]);
38324strings[64] = str->add(strings[64]);
38325strings[2583] = str->add(strings[2583]);
38326strings[6646] = str->add(strings[6646]);
38327strings[1841] = str->add(strings[1841]);
38328strings[64] = str->add(strings[64]);
38329strings[2584] = str->add(strings[2584]);
38330strings[6646] = str->add(strings[6646]);
38331strings[1841] = str->add(strings[1841]);
38332strings[469] = str->add(strings[469]);
38333strings[2708] = str->add(strings[2708]);
38334strings[6646] = str->add(strings[6646]);
38335strings[469] = str->add(strings[469]);
38336strings[3008] = str->add(strings[3008]);
38337strings[1841] = str->add(strings[1841]);
38338strings[6647] = str->add("resize");
38339strings[6647] = str->add(strings[6647]);
38340strings[64] = str->add(strings[64]);
38341strings[2585] = str->add(strings[2585]);
38342strings[64] = str->add(strings[64]);
38343strings[6646] = str->add(strings[6646]);
38344strings[6640] = str->add(strings[6640]);
38345strings[1841] = str->add(strings[1841]);
38346str->del(strings[64]);
38347strings[385] = str->add(strings[385]);
38348strings[6640] = str->add(strings[6640]);
38349strings[64] = str->add(strings[64]);
38350strings[2886] = str->add(strings[2886]);
38351strings[64] = str->add(strings[64]);
38352strings[2888] = str->add(strings[2888]);
38353strings[64] = str->add(strings[64]);
38354strings[2582] = str->add(strings[2582]);
38355strings[6646] = str->add(strings[6646]);
38356strings[1841] = str->add(strings[1841]);
38357strings[64] = str->add(strings[64]);
38358strings[2583] = str->add(strings[2583]);
38359strings[6646] = str->add(strings[6646]);
38360strings[1841] = str->add(strings[1841]);
38361strings[64] = str->add(strings[64]);
38362strings[2584] = str->add(strings[2584]);
38363strings[6646] = str->add(strings[6646]);
38364strings[1841] = str->add(strings[1841]);
38365strings[469] = str->add(strings[469]);
38366strings[2677] = str->add(strings[2677]);
38367strings[6646] = str->add(strings[6646]);
38368strings[469] = str->add(strings[469]);
38369strings[3011] = str->add(strings[3011]);
38370strings[1841] = str->add(strings[1841]);
38371strings[6647] = str->add(strings[6647]);
38372strings[6647] = str->add(strings[6647]);
38373strings[64] = str->add(strings[64]);
38374strings[2585] = str->add(strings[2585]);
38375strings[64] = str->add(strings[64]);
38376strings[6646] = str->add(strings[6646]);
38377strings[1726] = str->add(strings[1726]);
38378strings[1841] = str->add(strings[1841]);
38379str->del(strings[64]);
38380strings[385] = str->add(strings[385]);
38381strings[1726] = str->add(strings[1726]);
38382strings[64] = str->add(strings[64]);
38383strings[2886] = str->add(strings[2886]);
38384strings[64] = str->add(strings[64]);
38385strings[2888] = str->add(strings[2888]);
38386strings[64] = str->add(strings[64]);
38387strings[2583] = str->add(strings[2583]);
38388strings[6646] = str->add(strings[6646]);
38389strings[1841] = str->add(strings[1841]);
38390strings[64] = str->add(strings[64]);
38391strings[2584] = str->add(strings[2584]);
38392strings[6646] = str->add(strings[6646]);
38393strings[1841] = str->add(strings[1841]);
38394strings[469] = str->add(strings[469]);
38395strings[2678] = str->add(strings[2678]);
38396strings[6646] = str->add(strings[6646]);
38397strings[469] = str->add(strings[469]);
38398strings[3013] = str->add(strings[3013]);
38399strings[1841] = str->add(strings[1841]);
38400strings[6647] = str->add(strings[6647]);
38401strings[6647] = str->add(strings[6647]);
38402strings[64] = str->add(strings[64]);
38403strings[2585] = str->add(strings[2585]);
38404strings[64] = str->add(strings[64]);
38405strings[6646] = str->add(strings[6646]);
38406strings[6641] = str->add(strings[6641]);
38407strings[1841] = str->add(strings[1841]);
38408str->del(strings[64]);
38409strings[385] = str->add(strings[385]);
38410strings[6641] = str->add(strings[6641]);
38411strings[64] = str->add(strings[64]);
38412strings[2886] = str->add(strings[2886]);
38413strings[64] = str->add(strings[64]);
38414strings[2888] = str->add(strings[2888]);
38415strings[64] = str->add(strings[64]);
38416strings[2583] = str->add(strings[2583]);
38417strings[6646] = str->add(strings[6646]);
38418strings[1841] = str->add(strings[1841]);
38419strings[64] = str->add(strings[64]);
38420strings[2584] = str->add(strings[2584]);
38421strings[6646] = str->add(strings[6646]);
38422strings[1841] = str->add(strings[1841]);
38423strings[469] = str->add(strings[469]);
38424strings[2676] = str->add(strings[2676]);
38425strings[6646] = str->add(strings[6646]);
38426strings[469] = str->add(strings[469]);
38427strings[3015] = str->add(strings[3015]);
38428strings[1841] = str->add(strings[1841]);
38429strings[6647] = str->add(strings[6647]);
38430strings[6647] = str->add(strings[6647]);
38431strings[64] = str->add(strings[64]);
38432strings[2585] = str->add(strings[2585]);
38433strings[64] = str->add(strings[64]);
38434strings[6646] = str->add(strings[6646]);
38435strings[1724] = str->add(strings[1724]);
38436strings[1841] = str->add(strings[1841]);
38437str->del(strings[64]);
38438strings[385] = str->add(strings[385]);
38439strings[1724] = str->add(strings[1724]);
38440strings[64] = str->add(strings[64]);
38441strings[2886] = str->add(strings[2886]);
38442strings[64] = str->add(strings[64]);
38443strings[2888] = str->add(strings[2888]);
38444strings[64] = str->add(strings[64]);
38445strings[2583] = str->add(strings[2583]);
38446strings[6646] = str->add(strings[6646]);
38447strings[1841] = str->add(strings[1841]);
38448strings[64] = str->add(strings[64]);
38449strings[2584] = str->add(strings[2584]);
38450strings[6646] = str->add(strings[6646]);
38451strings[1841] = str->add(strings[1841]);
38452strings[469] = str->add(strings[469]);
38453strings[2675] = str->add(strings[2675]);
38454strings[6646] = str->add(strings[6646]);
38455strings[469] = str->add(strings[469]);
38456strings[3017] = str->add(strings[3017]);
38457strings[1841] = str->add(strings[1841]);
38458strings[6647] = str->add(strings[6647]);
38459strings[6647] = str->add(strings[6647]);
38460strings[64] = str->add(strings[64]);
38461strings[2585] = str->add(strings[2585]);
38462strings[64] = str->add(strings[64]);
38463strings[6646] = str->add(strings[6646]);
38464strings[1722] = str->add(strings[1722]);
38465strings[1841] = str->add(strings[1841]);
38466str->del(strings[64]);
38467strings[385] = str->add(strings[385]);
38468strings[1722] = str->add(strings[1722]);
38469strings[64] = str->add(strings[64]);
38470strings[2886] = str->add(strings[2886]);
38471strings[64] = str->add(strings[64]);
38472strings[2888] = str->add(strings[2888]);
38473strings[64] = str->add(strings[64]);
38474strings[2582] = str->add(strings[2582]);
38475strings[6646] = str->add(strings[6646]);
38476strings[1841] = str->add(strings[1841]);
38477strings[64] = str->add(strings[64]);
38478strings[2583] = str->add(strings[2583]);
38479strings[6646] = str->add(strings[6646]);
38480strings[1841] = str->add(strings[1841]);
38481strings[64] = str->add(strings[64]);
38482strings[2584] = str->add(strings[2584]);
38483strings[6646] = str->add(strings[6646]);
38484strings[1841] = str->add(strings[1841]);
38485strings[469] = str->add(strings[469]);
38486strings[2674] = str->add(strings[2674]);
38487strings[6646] = str->add(strings[6646]);
38488strings[469] = str->add(strings[469]);
38489strings[3019] = str->add(strings[3019]);
38490strings[1841] = str->add(strings[1841]);
38491strings[6647] = str->add(strings[6647]);
38492strings[6647] = str->add(strings[6647]);
38493strings[64] = str->add(strings[64]);
38494strings[2585] = str->add(strings[2585]);
38495strings[64] = str->add(strings[64]);
38496strings[6646] = str->add(strings[6646]);
38497strings[6642] = str->add(strings[6642]);
38498strings[1841] = str->add(strings[1841]);
38499str->del(strings[64]);
38500strings[385] = str->add(strings[385]);
38501strings[6642] = str->add(strings[6642]);
38502strings[64] = str->add(strings[64]);
38503strings[2886] = str->add(strings[2886]);
38504strings[64] = str->add(strings[64]);
38505strings[2888] = str->add(strings[2888]);
38506strings[6647] = str->add(strings[6647]);
38507strings[6647] = str->add(strings[6647]);
38508strings[6647] = str->add(strings[6647]);
38509strings[6647] = str->add(strings[6647]);
38510strings[6647] = str->add(strings[6647]);
38511strings[6647] = str->add(strings[6647]);
38512strings[6647] = str->add(strings[6647]);
38513strings[6647] = str->add(strings[6647]);
38514strings[6647] = str->add(strings[6647]);
38515strings[6647] = str->add(strings[6647]);
38516strings[6647] = str->add(strings[6647]);
38517strings[6647] = str->add(strings[6647]);
38518strings[6647] = str->add(strings[6647]);
38519strings[6647] = str->add(strings[6647]);
38520strings[6647] = str->add(strings[6647]);
38521strings[6647] = str->add(strings[6647]);
38522strings[6647] = str->add(strings[6647]);
38523strings[6647] = str->add(strings[6647]);
38524strings[6647] = str->add(strings[6647]);
38525strings[6647] = str->add(strings[6647]);
38526strings[6647] = str->add(strings[6647]);
38527str->del(strings[1842]);
38528strings[1842] = str->add(strings[1842]);
38529str->del(strings[1842]);
38530strings[1842] = str->add(strings[1842]);
38531strings[6647] = str->add(strings[6647]);
38532strings[6640] = str->add(strings[6640]);
38533strings[6640] = str->add(strings[6640]);
38534strings[64] = str->add(strings[64]);
38535strings[2915] = str->add(strings[2915]);
38536strings[6647] = str->add(strings[6647]);
38537strings[1726] = str->add(strings[1726]);
38538strings[1726] = str->add(strings[1726]);
38539strings[6647] = str->add(strings[6647]);
38540strings[6641] = str->add(strings[6641]);
38541strings[6641] = str->add(strings[6641]);
38542strings[6647] = str->add(strings[6647]);
38543strings[1724] = str->add(strings[1724]);
38544strings[1724] = str->add(strings[1724]);
38545strings[6647] = str->add(strings[6647]);
38546strings[1722] = str->add(strings[1722]);
38547strings[1722] = str->add(strings[1722]);
38548strings[64] = str->add(strings[64]);
38549strings[2915] = str->add(strings[2915]);
38550strings[6647] = str->add(strings[6647]);
38551strings[6642] = str->add(strings[6642]);
38552strings[6642] = str->add(strings[6642]);
38553str->del(strings[64]);
38554str->del(strings[2913]);
38555strings[64] = str->add(strings[64]);
38556strings[3021] = str->add(strings[3021]);
38557strings[6648] = str->add("font");
38558strings[6649] = str->add("font_fallbacks");
38559strings[6650] = str->add("font_size");
38560strings[6651] = str->add("font_source");
38561strings[6652] = str->add("color");
38562strings[6653] = str->add("underline_color");
38563strings[6654] = str->add("underline2_color");
38564strings[6655] = str->add("outline_color");
38565strings[6656] = str->add("shadow_color");
38566strings[6657] = str->add("glow_color");
38567strings[6658] = str->add("glow2_color");
38568strings[6659] = str->add("backing_color");
38569strings[6660] = str->add("strikethrough_color");
38570strings[6661] = str->add("align");
38571strings[6662] = str->add("valign");
38572strings[6663] = str->add("wrap");
38573strings[6664] = str->add("left_margin");
38574strings[6665] = str->add("right_margin");
38575strings[6666] = str->add("underline");
38576strings[6667] = str->add("strikethrough");
38577strings[6668] = str->add("backing");
38578strings[6669] = str->add("style");
38579strings[6670] = str->add("tabstops");
38580strings[6661] = str->add(strings[6661]);
38581strings[6671] = str->add("center");
38582str->del(strings[6661]);
38583str->del(strings[6671]);
38584strings[6652] = str->add(strings[6652]);
38585strings[6672] = str->add("#000");
38586str->del(strings[6652]);
38587str->del(strings[6672]);
38588strings[6669] = str->add(strings[6669]);
38589strings[6673] = str->add("shadow");
38590str->del(strings[6669]);
38591str->del(strings[6673]);
38592strings[6656] = str->add(strings[6656]);
38593strings[6674] = str->add("#ffffff80");
38594str->del(strings[6656]);
38595str->del(strings[6674]);
38596strings[6663] = str->add(strings[6663]);
38597strings[6675] = str->add("word");
38598str->del(strings[6663]);
38599str->del(strings[6675]);
38600strings[6651] = str->add(strings[6651]);
38601strings[469] = str->add(strings[469]);
38602strings[469] = str->add(strings[469]);
38603str->del(strings[6651]);
38604str->del(strings[469]);
38605strings[6650] = str->add(strings[6650]);
38606strings[6676] = str->add("10.000000");
38607str->del(strings[6650]);
38608str->del(strings[6676]);
38609strings[6648] = str->add(strings[6648]);
38610strings[470] = str->add(strings[470]);
38611strings[470] = str->add(strings[470]);
38612str->del(strings[6648]);
38613str->del(strings[470]);
38614strings[382] = str->add(strings[382]);
38615strings[382] = str->add(strings[382]);
38616strings[382] = str->add(strings[382]);
38617strings[382] = str->add(strings[382]);
38618strings[382] = str->add(strings[382]);
38619strings[382] = str->add(strings[382]);
38620strings[470] = str->add(strings[470]);
38621strings[469] = str->add(strings[469]);
38622strings[6669] = str->add(strings[6669]);
38623strings[6677] = str->add("glow");
38624str->del(strings[6669]);
38625str->del(strings[6677]);
38626strings[6652] = str->add(strings[6652]);
38627strings[6678] = str->add("#fff");
38628str->del(strings[6652]);
38629str->del(strings[6678]);
38630strings[6658] = str->add(strings[6658]);
38631strings[6679] = str->add("#fe87");
38632str->del(strings[6658]);
38633str->del(strings[6679]);
38634strings[6657] = str->add(strings[6657]);
38635strings[6680] = str->add("#fa14");
38636str->del(strings[6657]);
38637str->del(strings[6680]);
38638strings[6648] = str->add(strings[6648]);
38639strings[471] = str->add(strings[471]);
38640str->del(strings[470]);
38641strings[471] = str->add(strings[471]);
38642str->del(strings[6648]);
38643str->del(strings[471]);
38644strings[470] = str->add(strings[470]);
38645strings[469] = str->add(strings[469]);
38646strings[6669] = str->add(strings[6669]);
38647strings[6681] = str->add("glow");
38648str->del(strings[6669]);
38649str->del(strings[6681]);
38650strings[6652] = str->add(strings[6652]);
38651strings[6682] = str->add("#fff");
38652str->del(strings[6652]);
38653str->del(strings[6682]);
38654strings[6658] = str->add(strings[6658]);
38655strings[6683] = str->add("#fe87");
38656str->del(strings[6658]);
38657str->del(strings[6683]);
38658strings[6657] = str->add(strings[6657]);
38659strings[6684] = str->add("#fa14");
38660str->del(strings[6657]);
38661str->del(strings[6684]);
38662strings[6648] = str->add(strings[6648]);
38663strings[471] = str->add(strings[471]);
38664str->del(strings[470]);
38665strings[471] = str->add(strings[471]);
38666str->del(strings[6648]);
38667str->del(strings[471]);
38668str->del(strings[6648]);
38669str->del(strings[6649]);
38670str->del(strings[6650]);
38671str->del(strings[6651]);
38672str->del(strings[6652]);
38673str->del(strings[6653]);
38674str->del(strings[6654]);
38675str->del(strings[6655]);
38676str->del(strings[6656]);
38677str->del(strings[6657]);
38678str->del(strings[6658]);
38679str->del(strings[6659]);
38680str->del(strings[6660]);
38681str->del(strings[6661]);
38682str->del(strings[6662]);
38683str->del(strings[6663]);
38684str->del(strings[6664]);
38685str->del(strings[6665]);
38686str->del(strings[6666]);
38687str->del(strings[6667]);
38688str->del(strings[6668]);
38689str->del(strings[6669]);
38690str->del(strings[6670]);
38691str->del(strings[382]);
38692str->del(strings[382]);
38693str->del(strings[382]);
38694str->del(strings[382]);
38695str->del(strings[382]);
38696str->del(strings[382]);
38697str->del(strings[471]);
38698str->del(strings[469]);
38699str->del(strings[470]);
38700str->del(strings[469]);
38701str->del(strings[471]);
38702str->del(strings[469]);
38703strings[6685] = str->add("font");
38704strings[6686] = str->add("font_fallbacks");
38705strings[6687] = str->add("font_size");
38706strings[6688] = str->add("font_source");
38707strings[6689] = str->add("color");
38708strings[6690] = str->add("underline_color");
38709strings[6691] = str->add("underline2_color");
38710strings[6692] = str->add("outline_color");
38711strings[6693] = str->add("shadow_color");
38712strings[6694] = str->add("glow_color");
38713strings[6695] = str->add("glow2_color");
38714strings[6696] = str->add("backing_color");
38715strings[6697] = str->add("strikethrough_color");
38716strings[6698] = str->add("align");
38717strings[6699] = str->add("valign");
38718strings[6700] = str->add("wrap");
38719strings[6701] = str->add("left_margin");
38720strings[6702] = str->add("right_margin");
38721strings[6703] = str->add("underline");
38722strings[6704] = str->add("strikethrough");
38723strings[6705] = str->add("backing");
38724strings[6706] = str->add("style");
38725strings[6707] = str->add("tabstops");
38726strings[6698] = str->add(strings[6698]);
38727strings[6708] = str->add("center");
38728str->del(strings[6698]);
38729str->del(strings[6708]);
38730strings[6689] = str->add(strings[6689]);
38731strings[6709] = str->add("#000");
38732str->del(strings[6689]);
38733str->del(strings[6709]);
38734strings[6706] = str->add(strings[6706]);
38735strings[6710] = str->add("shadow");
38736str->del(strings[6706]);
38737str->del(strings[6710]);
38738strings[6693] = str->add(strings[6693]);
38739strings[6711] = str->add("#ffffff80");
38740str->del(strings[6693]);
38741str->del(strings[6711]);
38742strings[6700] = str->add(strings[6700]);
38743strings[6712] = str->add("word");
38744str->del(strings[6700]);
38745str->del(strings[6712]);
38746strings[6688] = str->add(strings[6688]);
38747strings[469] = str->add(strings[469]);
38748strings[469] = str->add(strings[469]);
38749str->del(strings[6688]);
38750str->del(strings[469]);
38751strings[6687] = str->add(strings[6687]);
38752strings[6713] = str->add("10.000000");
38753str->del(strings[6687]);
38754str->del(strings[6713]);
38755strings[6685] = str->add(strings[6685]);
38756strings[470] = str->add(strings[470]);
38757strings[470] = str->add(strings[470]);
38758str->del(strings[6685]);
38759str->del(strings[470]);
38760strings[470] = str->add(strings[470]);
38761strings[469] = str->add(strings[469]);
38762strings[6706] = str->add(strings[6706]);
38763strings[6714] = str->add("soft_shadow");
38764str->del(strings[6706]);
38765str->del(strings[6714]);
38766strings[6689] = str->add(strings[6689]);
38767strings[6715] = str->add("#fff");
38768str->del(strings[6689]);
38769str->del(strings[6715]);
38770strings[6693] = str->add(strings[6693]);
38771strings[6716] = str->add("#00000020");
38772str->del(strings[6693]);
38773str->del(strings[6716]);
38774strings[6687] = str->add(strings[6687]);
38775strings[6717] = str->add("12.000000");
38776str->del(strings[6687]);
38777str->del(strings[6717]);
38778strings[6685] = str->add(strings[6685]);
38779strings[471] = str->add(strings[471]);
38780str->del(strings[470]);
38781strings[471] = str->add(strings[471]);
38782str->del(strings[6685]);
38783str->del(strings[471]);
38784strings[382] = str->add(strings[382]);
38785strings[382] = str->add(strings[382]);
38786strings[382] = str->add(strings[382]);
38787strings[382] = str->add(strings[382]);
38788strings[382] = str->add(strings[382]);
38789strings[382] = str->add(strings[382]);
38790strings[382] = str->add(strings[382]);
38791strings[382] = str->add(strings[382]);
38792strings[382] = str->add(strings[382]);
38793strings[382] = str->add(strings[382]);
38794strings[382] = str->add(strings[382]);
38795strings[382] = str->add(strings[382]);
38796strings[382] = str->add(strings[382]);
38797strings[382] = str->add(strings[382]);
38798strings[382] = str->add(strings[382]);
38799strings[382] = str->add(strings[382]);
38800strings[382] = str->add(strings[382]);
38801strings[382] = str->add(strings[382]);
38802strings[382] = str->add(strings[382]);
38803strings[382] = str->add(strings[382]);
38804strings[382] = str->add(strings[382]);
38805strings[382] = str->add(strings[382]);
38806str->del(strings[6685]);
38807str->del(strings[6686]);
38808str->del(strings[6687]);
38809str->del(strings[6688]);
38810str->del(strings[6689]);
38811str->del(strings[6690]);
38812str->del(strings[6691]);
38813str->del(strings[6692]);
38814str->del(strings[6693]);
38815str->del(strings[6694]);
38816str->del(strings[6695]);
38817str->del(strings[6696]);
38818str->del(strings[6697]);
38819str->del(strings[6698]);
38820str->del(strings[6699]);
38821str->del(strings[6700]);
38822str->del(strings[6701]);
38823str->del(strings[6702]);
38824str->del(strings[6703]);
38825str->del(strings[6704]);
38826str->del(strings[6705]);
38827str->del(strings[6706]);
38828str->del(strings[6707]);
38829str->del(strings[471]);
38830str->del(strings[469]);
38831str->del(strings[382]);
38832str->del(strings[382]);
38833str->del(strings[382]);
38834str->del(strings[382]);
38835str->del(strings[382]);
38836str->del(strings[382]);
38837str->del(strings[382]);
38838str->del(strings[382]);
38839str->del(strings[382]);
38840str->del(strings[382]);
38841str->del(strings[382]);
38842str->del(strings[382]);
38843str->del(strings[382]);
38844str->del(strings[382]);
38845str->del(strings[382]);
38846str->del(strings[382]);
38847str->del(strings[382]);
38848str->del(strings[382]);
38849str->del(strings[382]);
38850str->del(strings[382]);
38851str->del(strings[382]);
38852str->del(strings[470]);
38853str->del(strings[469]);
38854str->del(strings[382]);
38855strings[1932] = str->add(strings[1932]);
38856strings[6718] = str->add("go_activec22");
38857strings[6719] = str->add("program,start");
38858strings[6720] = str->add("go_activeb22");
38859strings[1932] = str->add(strings[1932]);
38860strings[6721] = str->add("go_activec8");
38861strings[6719] = str->add(strings[6719]);
38862strings[6722] = str->add("go_activeb8");
38863str->del(strings[6646]);
38864str->del(strings[1841]);
38865str->del(strings[6646]);
38866str->del(strings[1841]);
38867str->del(strings[6646]);
38868str->del(strings[1841]);
38869str->del(strings[6646]);
38870str->del(strings[1841]);
38871str->del(strings[6647]);
38872str->del(strings[6647]);
38873str->del(strings[6646]);
38874str->del(strings[1841]);
38875str->del(strings[6646]);
38876str->del(strings[1841]);
38877str->del(strings[6646]);
38878str->del(strings[1841]);
38879str->del(strings[6646]);
38880str->del(strings[1841]);
38881str->del(strings[6646]);
38882str->del(strings[1841]);
38883str->del(strings[6647]);
38884str->del(strings[6647]);
38885str->del(strings[6646]);
38886str->del(strings[1841]);
38887str->del(strings[6646]);
38888str->del(strings[1841]);
38889str->del(strings[6646]);
38890str->del(strings[1841]);
38891str->del(strings[6646]);
38892str->del(strings[1841]);
38893str->del(strings[6647]);
38894str->del(strings[6647]);
38895str->del(strings[6646]);
38896str->del(strings[1841]);
38897str->del(strings[6646]);
38898str->del(strings[1841]);
38899str->del(strings[6646]);
38900str->del(strings[1841]);
38901str->del(strings[6646]);
38902str->del(strings[1841]);
38903str->del(strings[6647]);
38904str->del(strings[6647]);
38905str->del(strings[6646]);
38906str->del(strings[1841]);
38907str->del(strings[6646]);
38908str->del(strings[1841]);
38909str->del(strings[6646]);
38910str->del(strings[1841]);
38911str->del(strings[6646]);
38912str->del(strings[1841]);
38913str->del(strings[6647]);
38914str->del(strings[6647]);
38915str->del(strings[6646]);
38916str->del(strings[1841]);
38917str->del(strings[6646]);
38918str->del(strings[1841]);
38919str->del(strings[6646]);
38920str->del(strings[1841]);
38921str->del(strings[6646]);
38922str->del(strings[1841]);
38923str->del(strings[6646]);
38924str->del(strings[1841]);
38925str->del(strings[6647]);
38926str->del(strings[6647]);
38927str->del(strings[6646]);
38928str->del(strings[1841]);
38929str->del(strings[6647]);
38930str->del(strings[6647]);
38931str->del(strings[6647]);
38932str->del(strings[6647]);
38933str->del(strings[6647]);
38934str->del(strings[6647]);
38935str->del(strings[6647]);
38936str->del(strings[6647]);
38937str->del(strings[6647]);
38938str->del(strings[6647]);
38939str->del(strings[6647]);
38940str->del(strings[6647]);
38941str->del(strings[6647]);
38942str->del(strings[6647]);
38943str->del(strings[6647]);
38944str->del(strings[6647]);
38945str->del(strings[6647]);
38946str->del(strings[6647]);
38947str->del(strings[6647]);
38948str->del(strings[6647]);
38949str->del(strings[6647]);
38950str->del(strings[6647]);
38951str->del(strings[6647]);
38952str->del(strings[6647]);
38953str->del(strings[6647]);
38954str->del(strings[6647]);
38955str->del(strings[6647]);
38956str->del(strings[1932]);
38957str->del(strings[6718]);
38958str->del(strings[6719]);
38959str->del(strings[6720]);
38960str->del(strings[1932]);
38961str->del(strings[6721]);
38962str->del(strings[6719]);
38963str->del(strings[6722]);
38964strings[6723] = str->add("e,action,mouse,move");
38965strings[6724] = str->add("e");
38966strings[6723] = str->add(strings[6723]);
38967strings[6724] = str->add(strings[6724]);
38968str->del(strings[6723]);
38969str->del(strings[6724]);
38970str->del(strings[6723]);
38971str->del(strings[6724]);
38972strings[6725] = str->add("font");
38973strings[6726] = str->add("font_fallbacks");
38974strings[6727] = str->add("font_size");
38975strings[6728] = str->add("font_source");
38976strings[6729] = str->add("color");
38977strings[6730] = str->add("underline_color");
38978strings[6731] = str->add("underline2_color");
38979strings[6732] = str->add("outline_color");
38980strings[6733] = str->add("shadow_color");
38981strings[6734] = str->add("glow_color");
38982strings[6735] = str->add("glow2_color");
38983strings[6736] = str->add("backing_color");
38984strings[6737] = str->add("strikethrough_color");
38985strings[6738] = str->add("align");
38986strings[6739] = str->add("valign");
38987strings[6740] = str->add("wrap");
38988strings[6741] = str->add("left_margin");
38989strings[6742] = str->add("right_margin");
38990strings[6743] = str->add("underline");
38991strings[6744] = str->add("strikethrough");
38992strings[6745] = str->add("backing");
38993strings[6746] = str->add("style");
38994strings[6747] = str->add("tabstops");
38995strings[6738] = str->add(strings[6738]);
38996strings[6748] = str->add("center");
38997str->del(strings[6738]);
38998str->del(strings[6748]);
38999strings[6729] = str->add(strings[6729]);
39000strings[6749] = str->add("#000");
39001str->del(strings[6729]);
39002str->del(strings[6749]);
39003strings[6746] = str->add(strings[6746]);
39004strings[6750] = str->add("shadow");
39005str->del(strings[6746]);
39006str->del(strings[6750]);
39007strings[6733] = str->add(strings[6733]);
39008strings[6751] = str->add("#ffffff80");
39009str->del(strings[6733]);
39010str->del(strings[6751]);
39011strings[6740] = str->add(strings[6740]);
39012strings[6752] = str->add("word");
39013str->del(strings[6740]);
39014str->del(strings[6752]);
39015strings[6728] = str->add(strings[6728]);
39016strings[469] = str->add(strings[469]);
39017strings[469] = str->add(strings[469]);
39018str->del(strings[6728]);
39019str->del(strings[469]);
39020strings[6727] = str->add(strings[6727]);
39021strings[6753] = str->add("10.000000");
39022str->del(strings[6727]);
39023str->del(strings[6753]);
39024strings[6725] = str->add(strings[6725]);
39025strings[470] = str->add(strings[470]);
39026strings[470] = str->add(strings[470]);
39027str->del(strings[6725]);
39028str->del(strings[470]);
39029strings[470] = str->add(strings[470]);
39030strings[469] = str->add(strings[469]);
39031strings[6746] = str->add(strings[6746]);
39032strings[6754] = str->add("soft_shadow");
39033str->del(strings[6746]);
39034str->del(strings[6754]);
39035strings[6729] = str->add(strings[6729]);
39036strings[6755] = str->add("#fff");
39037str->del(strings[6729]);
39038str->del(strings[6755]);
39039strings[6733] = str->add(strings[6733]);
39040strings[6756] = str->add("#00000020");
39041str->del(strings[6733]);
39042str->del(strings[6756]);
39043strings[6727] = str->add(strings[6727]);
39044strings[6757] = str->add("12.000000");
39045str->del(strings[6727]);
39046str->del(strings[6757]);
39047strings[6725] = str->add(strings[6725]);
39048strings[471] = str->add(strings[471]);
39049str->del(strings[470]);
39050strings[471] = str->add(strings[471]);
39051str->del(strings[6725]);
39052str->del(strings[471]);
39053strings[382] = str->add(strings[382]);
39054strings[382] = str->add(strings[382]);
39055strings[382] = str->add(strings[382]);
39056strings[382] = str->add(strings[382]);
39057strings[382] = str->add(strings[382]);
39058strings[382] = str->add(strings[382]);
39059strings[382] = str->add(strings[382]);
39060strings[382] = str->add(strings[382]);
39061strings[382] = str->add(strings[382]);
39062strings[382] = str->add(strings[382]);
39063strings[382] = str->add(strings[382]);
39064strings[382] = str->add(strings[382]);
39065strings[382] = str->add(strings[382]);
39066strings[382] = str->add(strings[382]);
39067strings[382] = str->add(strings[382]);
39068strings[382] = str->add(strings[382]);
39069strings[382] = str->add(strings[382]);
39070strings[382] = str->add(strings[382]);
39071strings[382] = str->add(strings[382]);
39072strings[382] = str->add(strings[382]);
39073strings[382] = str->add(strings[382]);
39074strings[382] = str->add(strings[382]);
39075str->del(strings[471]);
39076str->del(strings[469]);
39077str->del(strings[382]);
39078str->del(strings[382]);
39079str->del(strings[382]);
39080str->del(strings[382]);
39081str->del(strings[382]);
39082str->del(strings[382]);
39083str->del(strings[382]);
39084str->del(strings[382]);
39085str->del(strings[382]);
39086str->del(strings[382]);
39087str->del(strings[382]);
39088str->del(strings[382]);
39089str->del(strings[382]);
39090str->del(strings[382]);
39091str->del(strings[382]);
39092str->del(strings[382]);
39093str->del(strings[382]);
39094str->del(strings[382]);
39095str->del(strings[382]);
39096str->del(strings[382]);
39097str->del(strings[382]);
39098str->del(strings[470]);
39099str->del(strings[469]);
39100str->del(strings[382]);
39101str->del(strings[6725]);
39102str->del(strings[6726]);
39103str->del(strings[6727]);
39104str->del(strings[6728]);
39105str->del(strings[6729]);
39106str->del(strings[6730]);
39107str->del(strings[6731]);
39108str->del(strings[6732]);
39109str->del(strings[6733]);
39110str->del(strings[6734]);
39111str->del(strings[6735]);
39112str->del(strings[6736]);
39113str->del(strings[6737]);
39114str->del(strings[6738]);
39115str->del(strings[6739]);
39116str->del(strings[6740]);
39117str->del(strings[6741]);
39118str->del(strings[6742]);
39119str->del(strings[6743]);
39120str->del(strings[6744]);
39121str->del(strings[6745]);
39122str->del(strings[6746]);
39123str->del(strings[6747]);
39124str->del(strings[7]);
39125str->del(strings[1968]);
39126strings[7] = str->add(strings[7]);
39127strings[2058] = str->add(strings[2058]);
39128strings[6758] = str->add("e,action,mouse,move");
39129strings[6759] = str->add("e");
39130strings[6758] = str->add(strings[6758]);
39131strings[6759] = str->add(strings[6759]);
39132str->del(strings[6758]);
39133str->del(strings[6759]);
39134str->del(strings[6758]);
39135str->del(strings[6759]);
39136strings[6760] = str->add("e,action,mouse,move");
39137strings[6761] = str->add("e");
39138str->del(strings[6760]);
39139str->del(strings[6761]);
39140strings[6762] = str->add("e,action,mouse,move");
39141strings[6763] = str->add("e");
39142str->del(strings[6762]);
39143str->del(strings[6763]);
39144str->del(strings[7]);
39145str->del(strings[2058]);
39146strings[7] = str->add(strings[7]);
39147strings[1970] = str->add(strings[1970]);
39148strings[6764] = str->add("e,action,mouse,move");
39149strings[6765] = str->add("e");
39150strings[6764] = str->add(strings[6764]);
39151strings[6765] = str->add(strings[6765]);
39152str->del(strings[6764]);
39153str->del(strings[6765]);
39154str->del(strings[6764]);
39155str->del(strings[6765]);
39156strings[6766] = str->add("e,action,mouse,move");
39157strings[6767] = str->add("e");
39158str->del(strings[6766]);
39159str->del(strings[6767]);
39160strings[6768] = str->add("e,action,mouse,move");
39161strings[6769] = str->add("e");
39162str->del(strings[6768]);
39163str->del(strings[6769]);
39164strings[6770] = str->add("e,action,mouse,move");
39165strings[6771] = str->add("e");
39166str->del(strings[6770]);
39167str->del(strings[6771]);
39168strings[6772] = str->add("e,action,mouse,move");
39169strings[6773] = str->add("e");
39170str->del(strings[6772]);
39171str->del(strings[6773]);
39172strings[6774] = str->add("e,action,mouse,move");
39173strings[6775] = str->add("e");
39174str->del(strings[6774]);
39175str->del(strings[6775]);
39176strings[6776] = str->add("e,action,mouse,move");
39177strings[6777] = str->add("e");
39178str->del(strings[6776]);
39179str->del(strings[6777]);
39180strings[6778] = str->add("e,action,mouse,move");
39181strings[6779] = str->add("e");
39182str->del(strings[6778]);
39183str->del(strings[6779]);
39184strings[6780] = str->add("e,action,mouse,move");
39185strings[6781] = str->add("e");
39186str->del(strings[6780]);
39187str->del(strings[6781]);
39188strings[1932] = str->add(strings[1932]);
39189strings[6782] = str->add("go_activeb24");
39190strings[6783] = str->add("program,start");
39191strings[6784] = str->add("go_activec24");
39192strings[1932] = str->add(strings[1932]);
39193strings[6785] = str->add("go_activeb6");
39194strings[6783] = str->add(strings[6783]);
39195strings[6786] = str->add("go_activec6");
39196str->del(strings[1932]);
39197str->del(strings[6782]);
39198str->del(strings[6783]);
39199str->del(strings[6784]);
39200str->del(strings[1932]);
39201str->del(strings[6785]);
39202str->del(strings[6783]);
39203str->del(strings[6786]);
39204str->del(strings[7]);
39205str->del(strings[1970]);
39206strings[7] = str->add(strings[7]);
39207strings[1869] = str->add(strings[1869]);
39208strings[6787] = str->add("e,action,mouse,move");
39209strings[6788] = str->add("e");
39210strings[6787] = str->add(strings[6787]);
39211strings[6788] = str->add(strings[6788]);
39212str->del(strings[6787]);
39213str->del(strings[6788]);
39214str->del(strings[6787]);
39215str->del(strings[6788]);
39216strings[6789] = str->add("e,action,mouse,move");
39217strings[6790] = str->add("e");
39218strings[6791] = str->add("e,state,unselected");
39219strings[6790] = str->add(strings[6790]);
39220strings[6791] = str->add(strings[6791]);
39221strings[6790] = str->add(strings[6790]);
39222strings[6791] = str->add(strings[6791]);
39223strings[6790] = str->add(strings[6790]);
39224strings[6791] = str->add(strings[6791]);
39225strings[6790] = str->add(strings[6790]);
39226strings[6791] = str->add(strings[6791]);
39227strings[6790] = str->add(strings[6790]);
39228strings[6791] = str->add(strings[6791]);
39229strings[6790] = str->add(strings[6790]);
39230str->del(strings[6789]);
39231str->del(strings[6790]);
39232strings[1932] = str->add(strings[1932]);
39233strings[6792] = str->add("sel");
39234strings[6793] = str->add("program,start");
39235strings[6794] = str->add("unsel");
39236str->del(strings[6791]);
39237str->del(strings[6790]);
39238str->del(strings[6791]);
39239str->del(strings[6790]);
39240strings[1932] = str->add(strings[1932]);
39241strings[6792] = str->add(strings[6792]);
39242strings[6793] = str->add(strings[6793]);
39243strings[6794] = str->add(strings[6794]);
39244str->del(strings[6791]);
39245str->del(strings[6790]);
39246strings[6793] = str->add(strings[6793]);
39247strings[6794] = str->add(strings[6794]);
39248strings[1932] = str->add(strings[1932]);
39249strings[6794] = str->add(strings[6794]);
39250str->del(strings[6791]);
39251str->del(strings[6790]);
39252str->del(strings[6791]);
39253str->del(strings[6790]);
39254str->del(strings[6791]);
39255str->del(strings[6790]);
39256str->del(strings[1932]);
39257str->del(strings[6792]);
39258str->del(strings[6793]);
39259str->del(strings[6794]);
39260str->del(strings[1932]);
39261str->del(strings[6792]);
39262str->del(strings[6793]);
39263str->del(strings[6794]);
39264str->del(strings[6793]);
39265str->del(strings[6794]);
39266str->del(strings[1932]);
39267str->del(strings[6794]);
39268str->del(strings[64]);
39269str->del(strings[3021]);
39270strings[64] = str->add(strings[64]);
39271strings[2913] = str->add(strings[2913]);
39272strings[6795] = str->add("e,action,mouse,move");
39273strings[6796] = str->add("e");
39274str->del(strings[6795]);
39275str->del(strings[6796]);
39276strings[1932] = str->add(strings[1932]);
39277strings[1840] = str->add(strings[1840]);
39278strings[6797] = str->add("program,start");
39279strings[1844] = str->add(strings[1844]);
39280strings[1932] = str->add(strings[1932]);
39281strings[1844] = str->add(strings[1844]);
39282strings[6797] = str->add(strings[6797]);
39283strings[1840] = str->add(strings[1840]);
39284strings[1932] = str->add(strings[1932]);
39285strings[1851] = str->add(strings[1851]);
39286strings[6797] = str->add(strings[6797]);
39287strings[1851] = str->add(strings[1851]);
39288str->del(strings[1932]);
39289str->del(strings[1840]);
39290str->del(strings[6797]);
39291str->del(strings[1844]);
39292str->del(strings[1932]);
39293str->del(strings[1844]);
39294str->del(strings[6797]);
39295str->del(strings[1840]);
39296str->del(strings[1932]);
39297str->del(strings[1851]);
39298str->del(strings[6797]);
39299str->del(strings[1851]);
39300strings[6798] = str->add("e,action,mouse,move");
39301strings[6799] = str->add("e");
39302strings[6798] = str->add(strings[6798]);
39303strings[6799] = str->add(strings[6799]);
39304str->del(strings[6798]);
39305str->del(strings[6799]);
39306str->del(strings[6798]);
39307str->del(strings[6799]);
39308strings[6800] = str->add("e,action,mouse,move");
39309strings[6801] = str->add("e");
39310strings[6802] = str->add("e,state,selected");
39311strings[6801] = str->add(strings[6801]);
39312strings[6802] = str->add(strings[6802]);
39313strings[6801] = str->add(strings[6801]);
39314strings[6802] = str->add(strings[6802]);
39315strings[6801] = str->add(strings[6801]);
39316strings[6802] = str->add(strings[6802]);
39317strings[6801] = str->add(strings[6801]);
39318strings[6802] = str->add(strings[6802]);
39319strings[6801] = str->add(strings[6801]);
39320strings[6802] = str->add(strings[6802]);
39321strings[6801] = str->add(strings[6801]);
39322str->del(strings[6800]);
39323str->del(strings[6801]);
39324strings[6803] = str->add("program,start");
39325strings[6804] = str->add("sel");
39326str->del(strings[6802]);
39327str->del(strings[6801]);
39328str->del(strings[6802]);
39329str->del(strings[6801]);
39330strings[6803] = str->add(strings[6803]);
39331strings[6804] = str->add(strings[6804]);
39332str->del(strings[6802]);
39333str->del(strings[6801]);
39334strings[6803] = str->add(strings[6803]);
39335strings[6804] = str->add(strings[6804]);
39336strings[1932] = str->add(strings[1932]);
39337strings[6804] = str->add(strings[6804]);
39338str->del(strings[6802]);
39339str->del(strings[6801]);
39340str->del(strings[6802]);
39341str->del(strings[6801]);
39342str->del(strings[6802]);
39343str->del(strings[6801]);
39344str->del(strings[6803]);
39345str->del(strings[6804]);
39346str->del(strings[6803]);
39347str->del(strings[6804]);
39348str->del(strings[6803]);
39349str->del(strings[6804]);
39350str->del(strings[1932]);
39351str->del(strings[6804]);
39352str->del(strings[64]);
39353str->del(strings[2913]);
39354strings[64] = str->add(strings[64]);
39355strings[3021] = str->add(strings[3021]);
39356strings[6805] = str->add("e,action,mouse,move");
39357strings[6806] = str->add("e");
39358str->del(strings[6805]);
39359str->del(strings[6806]);
39360strings[6807] = str->add("e,action,mouse,move");
39361strings[6808] = str->add("e");
39362str->del(strings[6807]);
39363str->del(strings[6808]);
39364strings[1932] = str->add(strings[1932]);
39365strings[6809] = str->add("go_activec21");
39366strings[6810] = str->add("program,start");
39367strings[6811] = str->add("go_activeb21");
39368strings[1932] = str->add(strings[1932]);
39369strings[6812] = str->add("go_activec9");
39370strings[6810] = str->add(strings[6810]);
39371strings[6813] = str->add("go_activeb9");
39372str->del(strings[1932]);
39373str->del(strings[6809]);
39374str->del(strings[6810]);
39375str->del(strings[6811]);
39376str->del(strings[1932]);
39377str->del(strings[6812]);
39378str->del(strings[6810]);
39379str->del(strings[6813]);
39380strings[6814] = str->add("e,action,mouse,move");
39381strings[6815] = str->add("e");
39382strings[2224] = str->add(strings[2224]);
39383strings[469] = str->add(strings[469]);
39384strings[2688] = str->add(strings[2688]);
39385strings[4] = str->add(strings[4]);
39386strings[469] = str->add(strings[469]);
39387strings[2685] = str->add(strings[2685]);
39388strings[1925] = str->add(strings[1925]);
39389strings[1926] = str->add(strings[1926]);
39390strings[3083] = str->add(strings[3083]);
39391strings[2494] = str->add(strings[2494]);
39392strings[469] = str->add(strings[469]);
39393strings[2711] = str->add(strings[2711]);
39394strings[2514] = str->add(strings[2514]);
39395strings[469] = str->add(strings[469]);
39396strings[2680] = str->add(strings[2680]);
39397strings[2536] = str->add(strings[2536]);
39398strings[469] = str->add(strings[469]);
39399strings[2713] = str->add(strings[2713]);
39400strings[6814] = str->add(strings[6814]);
39401strings[6815] = str->add(strings[6815]);
39402str->del(strings[6814]);
39403str->del(strings[6815]);
39404str->del(strings[6814]);
39405str->del(strings[6815]);
39406strings[361] = str->add(strings[361]);
39407strings[362] = str->add(strings[362]);
39408strings[361] = str->add(strings[361]);
39409str->del(strings[361]);
39410strings[362] = str->add(strings[362]);
39411str->del(strings[362]);
39412strings[6816] = str->add("resize");
39413str->del(strings[6816]);
39414strings[64] = str->add(strings[64]);
39415strings[2581] = str->add(strings[2581]);
39416strings[64] = str->add(strings[64]);
39417strings[6817] = str->add("load");
39418strings[1841] = str->add(strings[1841]);
39419strings[64] = str->add(strings[64]);
39420strings[1949] = str->add(strings[1949]);
39421strings[64] = str->add(strings[64]);
39422strings[1880] = str->add(strings[1880]);
39423strings[64] = str->add(strings[64]);
39424strings[1876] = str->add(strings[1876]);
39425str->del(strings[64]);
39426strings[379] = str->add(strings[379]);
39427strings[1842] = str->add(strings[1842]);
39428strings[1842] = str->add(strings[1842]);
39429strings[64] = str->add(strings[64]);
39430strings[1874] = str->add(strings[1874]);
39431strings[64] = str->add(strings[64]);
39432strings[2583] = str->add(strings[2583]);
39433strings[6817] = str->add(strings[6817]);
39434strings[1841] = str->add(strings[1841]);
39435strings[64] = str->add(strings[64]);
39436strings[2584] = str->add(strings[2584]);
39437strings[6817] = str->add(strings[6817]);
39438strings[1841] = str->add(strings[1841]);
39439strings[469] = str->add(strings[469]);
39440strings[2688] = str->add(strings[2688]);
39441strings[6817] = str->add(strings[6817]);
39442strings[469] = str->add(strings[469]);
39443strings[2902] = str->add(strings[2902]);
39444strings[1841] = str->add(strings[1841]);
39445strings[6818] = str->add("resize");
39446strings[6818] = str->add(strings[6818]);
39447strings[64] = str->add(strings[64]);
39448strings[2585] = str->add(strings[2585]);
39449strings[64] = str->add(strings[64]);
39450strings[6817] = str->add(strings[6817]);
39451strings[2224] = str->add(strings[2224]);
39452strings[1841] = str->add(strings[1841]);
39453str->del(strings[64]);
39454strings[385] = str->add(strings[385]);
39455strings[2224] = str->add(strings[2224]);
39456strings[64] = str->add(strings[64]);
39457strings[2886] = str->add(strings[2886]);
39458strings[64] = str->add(strings[64]);
39459strings[2888] = str->add(strings[2888]);
39460strings[64] = str->add(strings[64]);
39461strings[2582] = str->add(strings[2582]);
39462strings[6817] = str->add(strings[6817]);
39463strings[1841] = str->add(strings[1841]);
39464strings[64] = str->add(strings[64]);
39465strings[2583] = str->add(strings[2583]);
39466strings[6817] = str->add(strings[6817]);
39467strings[1841] = str->add(strings[1841]);
39468strings[64] = str->add(strings[64]);
39469strings[2584] = str->add(strings[2584]);
39470strings[6817] = str->add(strings[6817]);
39471strings[1841] = str->add(strings[1841]);
39472strings[469] = str->add(strings[469]);
39473strings[2685] = str->add(strings[2685]);
39474strings[6817] = str->add(strings[6817]);
39475strings[469] = str->add(strings[469]);
39476strings[3089] = str->add(strings[3089]);
39477strings[1841] = str->add(strings[1841]);
39478strings[6818] = str->add(strings[6818]);
39479strings[6818] = str->add(strings[6818]);
39480strings[64] = str->add(strings[64]);
39481strings[2585] = str->add(strings[2585]);
39482strings[64] = str->add(strings[64]);
39483strings[6817] = str->add(strings[6817]);
39484strings[4] = str->add(strings[4]);
39485strings[1841] = str->add(strings[1841]);
39486str->del(strings[64]);
39487strings[385] = str->add(strings[385]);
39488strings[4] = str->add(strings[4]);
39489strings[64] = str->add(strings[64]);
39490strings[2886] = str->add(strings[2886]);
39491strings[64] = str->add(strings[64]);
39492strings[2888] = str->add(strings[2888]);
39493strings[64] = str->add(strings[64]);
39494strings[2583] = str->add(strings[2583]);
39495strings[6817] = str->add(strings[6817]);
39496strings[1841] = str->add(strings[1841]);
39497strings[64] = str->add(strings[64]);
39498strings[2584] = str->add(strings[2584]);
39499strings[6817] = str->add(strings[6817]);
39500strings[1841] = str->add(strings[1841]);
39501strings[1926] = str->add(strings[1926]);
39502strings[3083] = str->add(strings[3083]);
39503strings[6817] = str->add(strings[6817]);
39504strings[1926] = str->add(strings[1926]);
39505strings[1552] = str->add(strings[1552]);
39506strings[1841] = str->add(strings[1841]);
39507strings[6818] = str->add(strings[6818]);
39508strings[6818] = str->add(strings[6818]);
39509strings[64] = str->add(strings[64]);
39510strings[2585] = str->add(strings[2585]);
39511strings[64] = str->add(strings[64]);
39512strings[6817] = str->add(strings[6817]);
39513strings[1925] = str->add(strings[1925]);
39514strings[1841] = str->add(strings[1841]);
39515str->del(strings[64]);
39516strings[385] = str->add(strings[385]);
39517strings[1925] = str->add(strings[1925]);
39518strings[64] = str->add(strings[64]);
39519strings[2886] = str->add(strings[2886]);
39520strings[64] = str->add(strings[64]);
39521strings[2888] = str->add(strings[2888]);
39522strings[64] = str->add(strings[64]);
39523strings[2583] = str->add(strings[2583]);
39524strings[6817] = str->add(strings[6817]);
39525strings[1841] = str->add(strings[1841]);
39526strings[64] = str->add(strings[64]);
39527strings[2584] = str->add(strings[2584]);
39528strings[6817] = str->add(strings[6817]);
39529strings[1841] = str->add(strings[1841]);
39530strings[469] = str->add(strings[469]);
39531strings[2711] = str->add(strings[2711]);
39532strings[6817] = str->add(strings[6817]);
39533strings[469] = str->add(strings[469]);
39534strings[3092] = str->add(strings[3092]);
39535strings[1841] = str->add(strings[1841]);
39536strings[6818] = str->add(strings[6818]);
39537strings[6818] = str->add(strings[6818]);
39538strings[64] = str->add(strings[64]);
39539strings[2585] = str->add(strings[2585]);
39540strings[64] = str->add(strings[64]);
39541strings[6817] = str->add(strings[6817]);
39542strings[2494] = str->add(strings[2494]);
39543strings[1841] = str->add(strings[1841]);
39544str->del(strings[64]);
39545strings[385] = str->add(strings[385]);
39546strings[2494] = str->add(strings[2494]);
39547strings[64] = str->add(strings[64]);
39548strings[2886] = str->add(strings[2886]);
39549strings[64] = str->add(strings[64]);
39550strings[2888] = str->add(strings[2888]);
39551strings[64] = str->add(strings[64]);
39552strings[2583] = str->add(strings[2583]);
39553strings[6817] = str->add(strings[6817]);
39554strings[1841] = str->add(strings[1841]);
39555strings[64] = str->add(strings[64]);
39556strings[2584] = str->add(strings[2584]);
39557strings[6817] = str->add(strings[6817]);
39558strings[1841] = str->add(strings[1841]);
39559strings[469] = str->add(strings[469]);
39560strings[2680] = str->add(strings[2680]);
39561strings[6817] = str->add(strings[6817]);
39562strings[469] = str->add(strings[469]);
39563strings[3094] = str->add(strings[3094]);
39564strings[1841] = str->add(strings[1841]);
39565strings[6818] = str->add(strings[6818]);
39566strings[6818] = str->add(strings[6818]);
39567strings[64] = str->add(strings[64]);
39568strings[2585] = str->add(strings[2585]);
39569strings[64] = str->add(strings[64]);
39570strings[6817] = str->add(strings[6817]);
39571strings[2514] = str->add(strings[2514]);
39572strings[1841] = str->add(strings[1841]);
39573str->del(strings[64]);
39574strings[385] = str->add(strings[385]);
39575strings[2514] = str->add(strings[2514]);
39576strings[64] = str->add(strings[64]);
39577strings[2886] = str->add(strings[2886]);
39578strings[64] = str->add(strings[64]);
39579strings[2888] = str->add(strings[2888]);
39580strings[64] = str->add(strings[64]);
39581strings[2583] = str->add(strings[2583]);
39582strings[6817] = str->add(strings[6817]);
39583strings[1841] = str->add(strings[1841]);
39584strings[64] = str->add(strings[64]);
39585strings[2584] = str->add(strings[2584]);
39586strings[6817] = str->add(strings[6817]);
39587strings[1841] = str->add(strings[1841]);
39588strings[469] = str->add(strings[469]);
39589strings[2713] = str->add(strings[2713]);
39590strings[6817] = str->add(strings[6817]);
39591strings[469] = str->add(strings[469]);
39592strings[3096] = str->add(strings[3096]);
39593strings[1841] = str->add(strings[1841]);
39594strings[6818] = str->add(strings[6818]);
39595strings[6818] = str->add(strings[6818]);
39596strings[64] = str->add(strings[64]);
39597strings[2585] = str->add(strings[2585]);
39598strings[64] = str->add(strings[64]);
39599strings[6817] = str->add(strings[6817]);
39600strings[2536] = str->add(strings[2536]);
39601strings[1841] = str->add(strings[1841]);
39602str->del(strings[64]);
39603strings[385] = str->add(strings[385]);
39604strings[2536] = str->add(strings[2536]);
39605strings[64] = str->add(strings[64]);
39606strings[2886] = str->add(strings[2886]);
39607strings[64] = str->add(strings[64]);
39608strings[2888] = str->add(strings[2888]);
39609strings[6818] = str->add(strings[6818]);
39610strings[6818] = str->add(strings[6818]);
39611strings[6818] = str->add(strings[6818]);
39612strings[6818] = str->add(strings[6818]);
39613strings[6818] = str->add(strings[6818]);
39614strings[6818] = str->add(strings[6818]);
39615strings[6818] = str->add(strings[6818]);
39616strings[6818] = str->add(strings[6818]);
39617strings[6818] = str->add(strings[6818]);
39618strings[6818] = str->add(strings[6818]);
39619strings[6818] = str->add(strings[6818]);
39620strings[6818] = str->add(strings[6818]);
39621strings[6818] = str->add(strings[6818]);
39622strings[6818] = str->add(strings[6818]);
39623strings[6818] = str->add(strings[6818]);
39624strings[6818] = str->add(strings[6818]);
39625strings[6818] = str->add(strings[6818]);
39626strings[6818] = str->add(strings[6818]);
39627strings[6818] = str->add(strings[6818]);
39628strings[6818] = str->add(strings[6818]);
39629strings[1933] = str->add(strings[1933]);
39630str->del(strings[1933]);
39631str->del(strings[64]);
39632str->del(strings[2583]);
39633strings[1933] = str->add(strings[1933]);
39634str->del(strings[1933]);
39635str->del(strings[64]);
39636str->del(strings[2584]);
39637strings[1933] = str->add(strings[1933]);
39638str->del(strings[1933]);
39639str->del(strings[469]);
39640str->del(strings[2708]);
39641strings[1933] = str->add(strings[1933]);
39642str->del(strings[1933]);
39643str->del(strings[6640]);
39644str->del(strings[6640]);
39645str->del(strings[6640]);
39646str->del(strings[64]);
39647str->del(strings[2585]);
39648strings[1933] = str->add(strings[1933]);
39649str->del(strings[1933]);
39650str->del(strings[64]);
39651str->del(strings[2582]);
39652strings[1933] = str->add(strings[1933]);
39653str->del(strings[1933]);
39654str->del(strings[64]);
39655str->del(strings[2583]);
39656strings[1933] = str->add(strings[1933]);
39657str->del(strings[1933]);
39658str->del(strings[64]);
39659str->del(strings[2584]);
39660strings[1933] = str->add(strings[1933]);
39661str->del(strings[1933]);
39662str->del(strings[469]);
39663str->del(strings[2677]);
39664strings[1933] = str->add(strings[1933]);
39665str->del(strings[1933]);
39666str->del(strings[1726]);
39667str->del(strings[1726]);
39668str->del(strings[1726]);
39669str->del(strings[64]);
39670str->del(strings[2585]);
39671strings[1933] = str->add(strings[1933]);
39672str->del(strings[1933]);
39673str->del(strings[64]);
39674str->del(strings[2583]);
39675strings[1933] = str->add(strings[1933]);
39676str->del(strings[1933]);
39677str->del(strings[64]);
39678str->del(strings[2584]);
39679strings[1933] = str->add(strings[1933]);
39680str->del(strings[1933]);
39681str->del(strings[469]);
39682str->del(strings[2678]);
39683strings[1933] = str->add(strings[1933]);
39684str->del(strings[1933]);
39685str->del(strings[6641]);
39686str->del(strings[6641]);
39687str->del(strings[6641]);
39688str->del(strings[64]);
39689str->del(strings[2585]);
39690strings[1933] = str->add(strings[1933]);
39691str->del(strings[1933]);
39692str->del(strings[64]);
39693str->del(strings[2583]);
39694strings[1933] = str->add(strings[1933]);
39695str->del(strings[1933]);
39696str->del(strings[64]);
39697str->del(strings[2584]);
39698strings[1933] = str->add(strings[1933]);
39699str->del(strings[1933]);
39700str->del(strings[469]);
39701str->del(strings[2676]);
39702strings[1933] = str->add(strings[1933]);
39703str->del(strings[1933]);
39704str->del(strings[1724]);
39705str->del(strings[1724]);
39706str->del(strings[1724]);
39707str->del(strings[64]);
39708str->del(strings[2585]);
39709strings[1933] = str->add(strings[1933]);
39710str->del(strings[1933]);
39711str->del(strings[64]);
39712str->del(strings[2583]);
39713strings[1933] = str->add(strings[1933]);
39714str->del(strings[1933]);
39715str->del(strings[64]);
39716str->del(strings[2584]);
39717strings[1933] = str->add(strings[1933]);
39718str->del(strings[1933]);
39719str->del(strings[469]);
39720str->del(strings[2675]);
39721strings[1933] = str->add(strings[1933]);
39722str->del(strings[1933]);
39723str->del(strings[1722]);
39724str->del(strings[1722]);
39725str->del(strings[1722]);
39726str->del(strings[64]);
39727str->del(strings[2585]);
39728strings[1933] = str->add(strings[1933]);
39729str->del(strings[1933]);
39730str->del(strings[64]);
39731str->del(strings[2582]);
39732strings[1933] = str->add(strings[1933]);
39733str->del(strings[1933]);
39734str->del(strings[64]);
39735str->del(strings[2583]);
39736strings[1933] = str->add(strings[1933]);
39737str->del(strings[1933]);
39738str->del(strings[64]);
39739str->del(strings[2584]);
39740strings[1933] = str->add(strings[1933]);
39741str->del(strings[1933]);
39742str->del(strings[469]);
39743str->del(strings[2674]);
39744strings[1933] = str->add(strings[1933]);
39745str->del(strings[1933]);
39746str->del(strings[6642]);
39747str->del(strings[6642]);
39748str->del(strings[6642]);
39749str->del(strings[64]);
39750str->del(strings[2585]);
39751strings[1933] = str->add(strings[1933]);
39752str->del(strings[1933]);
39753str->del(strings[1842]);
39754str->del(strings[1842]);
39755str->del(strings[64]);
39756str->del(strings[2581]);
39757str->del(strings[64]);
39758str->del(strings[2886]);
39759str->del(strings[64]);
39760str->del(strings[2888]);
39761str->del(strings[469]);
39762str->del(strings[3008]);
39763str->del(strings[6640]);
39764str->del(strings[385]);
39765str->del(strings[64]);
39766str->del(strings[2915]);
39767str->del(strings[64]);
39768str->del(strings[2886]);
39769str->del(strings[64]);
39770str->del(strings[2888]);
39771str->del(strings[469]);
39772str->del(strings[3011]);
39773str->del(strings[1726]);
39774str->del(strings[385]);
39775str->del(strings[64]);
39776str->del(strings[2886]);
39777str->del(strings[64]);
39778str->del(strings[2888]);
39779str->del(strings[469]);
39780str->del(strings[3013]);
39781str->del(strings[6641]);
39782str->del(strings[385]);
39783str->del(strings[64]);
39784str->del(strings[2886]);
39785str->del(strings[64]);
39786str->del(strings[2888]);
39787str->del(strings[469]);
39788str->del(strings[3015]);
39789str->del(strings[1724]);
39790str->del(strings[385]);
39791str->del(strings[64]);
39792str->del(strings[2886]);
39793str->del(strings[64]);
39794str->del(strings[2888]);
39795str->del(strings[469]);
39796str->del(strings[3017]);
39797str->del(strings[1722]);
39798str->del(strings[385]);
39799str->del(strings[64]);
39800str->del(strings[2915]);
39801str->del(strings[64]);
39802str->del(strings[2886]);
39803str->del(strings[64]);
39804str->del(strings[2888]);
39805str->del(strings[469]);
39806str->del(strings[3019]);
39807str->del(strings[6642]);
39808str->del(strings[385]);
39809str->del(strings[64]);
39810str->del(strings[1949]);
39811str->del(strings[64]);
39812str->del(strings[1880]);
39813str->del(strings[64]);
39814str->del(strings[1876]);
39815str->del(strings[379]);
39816str->del(strings[64]);
39817str->del(strings[1874]);
39818str->del(strings[361]);
39819str->del(strings[362]);
39820str->del(strings[1842]);
39821strings[1842] = str->add(strings[1842]);
39822str->del(strings[1842]);
39823strings[1842] = str->add(strings[1842]);
39824strings[6818] = str->add(strings[6818]);
39825strings[2224] = str->add(strings[2224]);
39826strings[2224] = str->add(strings[2224]);
39827strings[64] = str->add(strings[64]);
39828strings[2915] = str->add(strings[2915]);
39829strings[6818] = str->add(strings[6818]);
39830strings[4] = str->add(strings[4]);
39831strings[4] = str->add(strings[4]);
39832strings[6818] = str->add(strings[6818]);
39833strings[1925] = str->add(strings[1925]);
39834strings[1925] = str->add(strings[1925]);
39835strings[6818] = str->add(strings[6818]);
39836strings[2494] = str->add(strings[2494]);
39837strings[2494] = str->add(strings[2494]);
39838strings[6818] = str->add(strings[6818]);
39839strings[2514] = str->add(strings[2514]);
39840strings[2514] = str->add(strings[2514]);
39841strings[6818] = str->add(strings[6818]);
39842strings[2536] = str->add(strings[2536]);
39843strings[2536] = str->add(strings[2536]);
39844strings[6819] = str->add("font");
39845strings[6820] = str->add("font_fallbacks");
39846strings[6821] = str->add("font_size");
39847strings[6822] = str->add("font_source");
39848strings[6823] = str->add("color");
39849strings[6824] = str->add("underline_color");
39850strings[6825] = str->add("underline2_color");
39851strings[6826] = str->add("outline_color");
39852strings[6827] = str->add("shadow_color");
39853strings[6828] = str->add("glow_color");
39854strings[6829] = str->add("glow2_color");
39855strings[6830] = str->add("backing_color");
39856strings[6831] = str->add("strikethrough_color");
39857strings[6832] = str->add("align");
39858strings[6833] = str->add("valign");
39859strings[6834] = str->add("wrap");
39860strings[6835] = str->add("left_margin");
39861strings[6836] = str->add("right_margin");
39862strings[6837] = str->add("underline");
39863strings[6838] = str->add("strikethrough");
39864strings[6839] = str->add("backing");
39865strings[6840] = str->add("style");
39866strings[6841] = str->add("tabstops");
39867strings[6832] = str->add(strings[6832]);
39868strings[6842] = str->add("center");
39869str->del(strings[6832]);
39870str->del(strings[6842]);
39871strings[6823] = str->add(strings[6823]);
39872strings[6843] = str->add("#000");
39873str->del(strings[6823]);
39874str->del(strings[6843]);
39875strings[6840] = str->add(strings[6840]);
39876strings[6844] = str->add("shadow");
39877str->del(strings[6840]);
39878str->del(strings[6844]);
39879strings[6827] = str->add(strings[6827]);
39880strings[6845] = str->add("#ffffff80");
39881str->del(strings[6827]);
39882str->del(strings[6845]);
39883strings[6834] = str->add(strings[6834]);
39884strings[6846] = str->add("word");
39885str->del(strings[6834]);
39886str->del(strings[6846]);
39887strings[6822] = str->add(strings[6822]);
39888strings[469] = str->add(strings[469]);
39889strings[469] = str->add(strings[469]);
39890str->del(strings[6822]);
39891str->del(strings[469]);
39892strings[6821] = str->add(strings[6821]);
39893strings[6847] = str->add("10.000000");
39894str->del(strings[6821]);
39895str->del(strings[6847]);
39896strings[6819] = str->add(strings[6819]);
39897strings[470] = str->add(strings[470]);
39898strings[470] = str->add(strings[470]);
39899str->del(strings[6819]);
39900str->del(strings[470]);
39901strings[382] = str->add(strings[382]);
39902strings[382] = str->add(strings[382]);
39903strings[382] = str->add(strings[382]);
39904strings[382] = str->add(strings[382]);
39905strings[382] = str->add(strings[382]);
39906strings[382] = str->add(strings[382]);
39907strings[470] = str->add(strings[470]);
39908strings[469] = str->add(strings[469]);
39909strings[6840] = str->add(strings[6840]);
39910strings[6848] = str->add("glow");
39911str->del(strings[6840]);
39912str->del(strings[6848]);
39913strings[6823] = str->add(strings[6823]);
39914strings[6849] = str->add("#fff");
39915str->del(strings[6823]);
39916str->del(strings[6849]);
39917strings[6829] = str->add(strings[6829]);
39918strings[6850] = str->add("#fe87");
39919str->del(strings[6829]);
39920str->del(strings[6850]);
39921strings[6828] = str->add(strings[6828]);
39922strings[6851] = str->add("#fa14");
39923str->del(strings[6828]);
39924str->del(strings[6851]);
39925strings[6819] = str->add(strings[6819]);
39926strings[471] = str->add(strings[471]);
39927str->del(strings[470]);
39928strings[471] = str->add(strings[471]);
39929str->del(strings[6819]);
39930str->del(strings[471]);
39931strings[470] = str->add(strings[470]);
39932strings[469] = str->add(strings[469]);
39933strings[6840] = str->add(strings[6840]);
39934strings[6852] = str->add("glow");
39935str->del(strings[6840]);
39936str->del(strings[6852]);
39937strings[6823] = str->add(strings[6823]);
39938strings[6853] = str->add("#fff");
39939str->del(strings[6823]);
39940str->del(strings[6853]);
39941strings[6829] = str->add(strings[6829]);
39942strings[6854] = str->add("#fe87");
39943str->del(strings[6829]);
39944str->del(strings[6854]);
39945strings[6828] = str->add(strings[6828]);
39946strings[6855] = str->add("#fa14");
39947str->del(strings[6828]);
39948str->del(strings[6855]);
39949strings[6819] = str->add(strings[6819]);
39950strings[471] = str->add(strings[471]);
39951str->del(strings[470]);
39952strings[471] = str->add(strings[471]);
39953str->del(strings[6819]);
39954str->del(strings[471]);
39955str->del(strings[6819]);
39956str->del(strings[6820]);
39957str->del(strings[6821]);
39958str->del(strings[6822]);
39959str->del(strings[6823]);
39960str->del(strings[6824]);
39961str->del(strings[6825]);
39962str->del(strings[6826]);
39963str->del(strings[6827]);
39964str->del(strings[6828]);
39965str->del(strings[6829]);
39966str->del(strings[6830]);
39967str->del(strings[6831]);
39968str->del(strings[6832]);
39969str->del(strings[6833]);
39970str->del(strings[6834]);
39971str->del(strings[6835]);
39972str->del(strings[6836]);
39973str->del(strings[6837]);
39974str->del(strings[6838]);
39975str->del(strings[6839]);
39976str->del(strings[6840]);
39977str->del(strings[6841]);
39978str->del(strings[382]);
39979str->del(strings[382]);
39980str->del(strings[382]);
39981str->del(strings[382]);
39982str->del(strings[382]);
39983str->del(strings[382]);
39984str->del(strings[471]);
39985str->del(strings[469]);
39986str->del(strings[470]);
39987str->del(strings[469]);
39988str->del(strings[471]);
39989str->del(strings[469]);
39990strings[6856] = str->add("font");
39991strings[6857] = str->add("font_fallbacks");
39992strings[6858] = str->add("font_size");
39993strings[6859] = str->add("font_source");
39994strings[6860] = str->add("color");
39995strings[6861] = str->add("underline_color");
39996strings[6862] = str->add("underline2_color");
39997strings[6863] = str->add("outline_color");
39998strings[6864] = str->add("shadow_color");
39999strings[6865] = str->add("glow_color");
40000strings[6866] = str->add("glow2_color");
40001strings[6867] = str->add("backing_color");
40002strings[6868] = str->add("strikethrough_color");
40003strings[6869] = str->add("align");
40004strings[6870] = str->add("valign");
40005strings[6871] = str->add("wrap");
40006strings[6872] = str->add("left_margin");
40007strings[6873] = str->add("right_margin");
40008strings[6874] = str->add("underline");
40009strings[6875] = str->add("strikethrough");
40010strings[6876] = str->add("backing");
40011strings[6877] = str->add("style");
40012strings[6878] = str->add("tabstops");
40013strings[6869] = str->add(strings[6869]);
40014strings[6879] = str->add("center");
40015str->del(strings[6869]);
40016str->del(strings[6879]);
40017strings[6860] = str->add(strings[6860]);
40018strings[6880] = str->add("#000");
40019str->del(strings[6860]);
40020str->del(strings[6880]);
40021strings[6877] = str->add(strings[6877]);
40022strings[6881] = str->add("shadow");
40023str->del(strings[6877]);
40024str->del(strings[6881]);
40025strings[6864] = str->add(strings[6864]);
40026strings[6882] = str->add("#ffffff80");
40027str->del(strings[6864]);
40028str->del(strings[6882]);
40029strings[6871] = str->add(strings[6871]);
40030strings[6883] = str->add("word");
40031str->del(strings[6871]);
40032str->del(strings[6883]);
40033strings[6859] = str->add(strings[6859]);
40034strings[469] = str->add(strings[469]);
40035strings[469] = str->add(strings[469]);
40036str->del(strings[6859]);
40037str->del(strings[469]);
40038strings[6858] = str->add(strings[6858]);
40039strings[6884] = str->add("10.000000");
40040str->del(strings[6858]);
40041str->del(strings[6884]);
40042strings[6856] = str->add(strings[6856]);
40043strings[470] = str->add(strings[470]);
40044strings[470] = str->add(strings[470]);
40045str->del(strings[6856]);
40046str->del(strings[470]);
40047strings[470] = str->add(strings[470]);
40048strings[469] = str->add(strings[469]);
40049strings[6877] = str->add(strings[6877]);
40050strings[6885] = str->add("soft_shadow");
40051str->del(strings[6877]);
40052str->del(strings[6885]);
40053strings[6860] = str->add(strings[6860]);
40054strings[6886] = str->add("#fff");
40055str->del(strings[6860]);
40056str->del(strings[6886]);
40057strings[6864] = str->add(strings[6864]);
40058strings[6887] = str->add("#00000020");
40059str->del(strings[6864]);
40060str->del(strings[6887]);
40061strings[6858] = str->add(strings[6858]);
40062strings[6888] = str->add("12.000000");
40063str->del(strings[6858]);
40064str->del(strings[6888]);
40065strings[6856] = str->add(strings[6856]);
40066strings[471] = str->add(strings[471]);
40067str->del(strings[470]);
40068strings[471] = str->add(strings[471]);
40069str->del(strings[6856]);
40070str->del(strings[471]);
40071strings[382] = str->add(strings[382]);
40072strings[382] = str->add(strings[382]);
40073strings[382] = str->add(strings[382]);
40074strings[382] = str->add(strings[382]);
40075strings[382] = str->add(strings[382]);
40076strings[382] = str->add(strings[382]);
40077strings[382] = str->add(strings[382]);
40078strings[382] = str->add(strings[382]);
40079strings[382] = str->add(strings[382]);
40080strings[382] = str->add(strings[382]);
40081strings[382] = str->add(strings[382]);
40082strings[382] = str->add(strings[382]);
40083strings[382] = str->add(strings[382]);
40084strings[382] = str->add(strings[382]);
40085strings[382] = str->add(strings[382]);
40086strings[382] = str->add(strings[382]);
40087strings[382] = str->add(strings[382]);
40088strings[382] = str->add(strings[382]);
40089strings[382] = str->add(strings[382]);
40090strings[382] = str->add(strings[382]);
40091strings[382] = str->add(strings[382]);
40092strings[382] = str->add(strings[382]);
40093str->del(strings[6856]);
40094str->del(strings[6857]);
40095str->del(strings[6858]);
40096str->del(strings[6859]);
40097str->del(strings[6860]);
40098str->del(strings[6861]);
40099str->del(strings[6862]);
40100str->del(strings[6863]);
40101str->del(strings[6864]);
40102str->del(strings[6865]);
40103str->del(strings[6866]);
40104str->del(strings[6867]);
40105str->del(strings[6868]);
40106str->del(strings[6869]);
40107str->del(strings[6870]);
40108str->del(strings[6871]);
40109str->del(strings[6872]);
40110str->del(strings[6873]);
40111str->del(strings[6874]);
40112str->del(strings[6875]);
40113str->del(strings[6876]);
40114str->del(strings[6877]);
40115str->del(strings[6878]);
40116str->del(strings[471]);
40117str->del(strings[469]);
40118str->del(strings[382]);
40119str->del(strings[382]);
40120str->del(strings[382]);
40121str->del(strings[382]);
40122str->del(strings[382]);
40123str->del(strings[382]);
40124str->del(strings[382]);
40125str->del(strings[382]);
40126str->del(strings[382]);
40127str->del(strings[382]);
40128str->del(strings[382]);
40129str->del(strings[382]);
40130str->del(strings[382]);
40131str->del(strings[382]);
40132str->del(strings[382]);
40133str->del(strings[382]);
40134str->del(strings[382]);
40135str->del(strings[382]);
40136str->del(strings[382]);
40137str->del(strings[382]);
40138str->del(strings[382]);
40139str->del(strings[470]);
40140str->del(strings[469]);
40141str->del(strings[382]);
40142strings[1932] = str->add(strings[1932]);
40143strings[1849] = str->add(strings[1849]);
40144strings[6889] = str->add("program,start");
40145strings[1850] = str->add(strings[1850]);
40146strings[1932] = str->add(strings[1932]);
40147strings[1850] = str->add(strings[1850]);
40148strings[6889] = str->add(strings[6889]);
40149strings[1849] = str->add(strings[1849]);
40150str->del(strings[6817]);
40151str->del(strings[1841]);
40152str->del(strings[6817]);
40153str->del(strings[1841]);
40154str->del(strings[6817]);
40155str->del(strings[1841]);
40156str->del(strings[6817]);
40157str->del(strings[1841]);
40158str->del(strings[6818]);
40159str->del(strings[6818]);
40160str->del(strings[6817]);
40161str->del(strings[1841]);
40162str->del(strings[6817]);
40163str->del(strings[1841]);
40164str->del(strings[6817]);
40165str->del(strings[1841]);
40166str->del(strings[6817]);
40167str->del(strings[1841]);
40168str->del(strings[6817]);
40169str->del(strings[1841]);
40170str->del(strings[6818]);
40171str->del(strings[6818]);
40172str->del(strings[6817]);
40173str->del(strings[1841]);
40174str->del(strings[6817]);
40175str->del(strings[1841]);
40176str->del(strings[6817]);
40177str->del(strings[1841]);
40178str->del(strings[6817]);
40179str->del(strings[1841]);
40180str->del(strings[6818]);
40181str->del(strings[6818]);
40182str->del(strings[6817]);
40183str->del(strings[1841]);
40184str->del(strings[6817]);
40185str->del(strings[1841]);
40186str->del(strings[6817]);
40187str->del(strings[1841]);
40188str->del(strings[6817]);
40189str->del(strings[1841]);
40190str->del(strings[6818]);
40191str->del(strings[6818]);
40192str->del(strings[6817]);
40193str->del(strings[1841]);
40194str->del(strings[6817]);
40195str->del(strings[1841]);
40196str->del(strings[6817]);
40197str->del(strings[1841]);
40198str->del(strings[6817]);
40199str->del(strings[1841]);
40200str->del(strings[6818]);
40201str->del(strings[6818]);
40202str->del(strings[6817]);
40203str->del(strings[1841]);
40204str->del(strings[6817]);
40205str->del(strings[1841]);
40206str->del(strings[6817]);
40207str->del(strings[1841]);
40208str->del(strings[6817]);
40209str->del(strings[1841]);
40210str->del(strings[6818]);
40211str->del(strings[6818]);
40212str->del(strings[6817]);
40213str->del(strings[1841]);
40214str->del(strings[6818]);
40215str->del(strings[6818]);
40216str->del(strings[6818]);
40217str->del(strings[6818]);
40218str->del(strings[6818]);
40219str->del(strings[6818]);
40220str->del(strings[6818]);
40221str->del(strings[6818]);
40222str->del(strings[6818]);
40223str->del(strings[6818]);
40224str->del(strings[6818]);
40225str->del(strings[6818]);
40226str->del(strings[6818]);
40227str->del(strings[6818]);
40228str->del(strings[6818]);
40229str->del(strings[6818]);
40230str->del(strings[6818]);
40231str->del(strings[6818]);
40232str->del(strings[6818]);
40233str->del(strings[6818]);
40234str->del(strings[6818]);
40235str->del(strings[6818]);
40236str->del(strings[6818]);
40237str->del(strings[6818]);
40238str->del(strings[6818]);
40239str->del(strings[6818]);
40240str->del(strings[1932]);
40241str->del(strings[1849]);
40242str->del(strings[6889]);
40243str->del(strings[1850]);
40244str->del(strings[1932]);
40245str->del(strings[1850]);
40246str->del(strings[6889]);
40247str->del(strings[1849]);
40248strings[6890] = str->add("e,action,mouse,move");
40249strings[6891] = str->add("e");
40250strings[6890] = str->add(strings[6890]);
40251strings[6891] = str->add(strings[6891]);
40252str->del(strings[6890]);
40253str->del(strings[6891]);
40254str->del(strings[6890]);
40255str->del(strings[6891]);
40256strings[6892] = str->add("font");
40257strings[6893] = str->add("font_fallbacks");
40258strings[6894] = str->add("font_size");
40259strings[6895] = str->add("font_source");
40260strings[6896] = str->add("color");
40261strings[6897] = str->add("underline_color");
40262strings[6898] = str->add("underline2_color");
40263strings[6899] = str->add("outline_color");
40264strings[6900] = str->add("shadow_color");
40265strings[6901] = str->add("glow_color");
40266strings[6902] = str->add("glow2_color");
40267strings[6903] = str->add("backing_color");
40268strings[6904] = str->add("strikethrough_color");
40269strings[6905] = str->add("align");
40270strings[6906] = str->add("valign");
40271strings[6907] = str->add("wrap");
40272strings[6908] = str->add("left_margin");
40273strings[6909] = str->add("right_margin");
40274strings[6910] = str->add("underline");
40275strings[6911] = str->add("strikethrough");
40276strings[6912] = str->add("backing");
40277strings[6913] = str->add("style");
40278strings[6914] = str->add("tabstops");
40279strings[6905] = str->add(strings[6905]);
40280strings[6915] = str->add("center");
40281str->del(strings[6905]);
40282str->del(strings[6915]);
40283strings[6896] = str->add(strings[6896]);
40284strings[6916] = str->add("#000");
40285str->del(strings[6896]);
40286str->del(strings[6916]);
40287strings[6913] = str->add(strings[6913]);
40288strings[6917] = str->add("shadow");
40289str->del(strings[6913]);
40290str->del(strings[6917]);
40291strings[6900] = str->add(strings[6900]);
40292strings[6918] = str->add("#ffffff80");
40293str->del(strings[6900]);
40294str->del(strings[6918]);
40295strings[6907] = str->add(strings[6907]);
40296strings[6919] = str->add("word");
40297str->del(strings[6907]);
40298str->del(strings[6919]);
40299strings[6895] = str->add(strings[6895]);
40300strings[469] = str->add(strings[469]);
40301strings[469] = str->add(strings[469]);
40302str->del(strings[6895]);
40303str->del(strings[469]);
40304strings[6894] = str->add(strings[6894]);
40305strings[6920] = str->add("10.000000");
40306str->del(strings[6894]);
40307str->del(strings[6920]);
40308strings[6892] = str->add(strings[6892]);
40309strings[470] = str->add(strings[470]);
40310strings[470] = str->add(strings[470]);
40311str->del(strings[6892]);
40312str->del(strings[470]);
40313strings[470] = str->add(strings[470]);
40314strings[469] = str->add(strings[469]);
40315strings[6913] = str->add(strings[6913]);
40316strings[6921] = str->add("soft_shadow");
40317str->del(strings[6913]);
40318str->del(strings[6921]);
40319strings[6896] = str->add(strings[6896]);
40320strings[6922] = str->add("#fff");
40321str->del(strings[6896]);
40322str->del(strings[6922]);
40323strings[6900] = str->add(strings[6900]);
40324strings[6923] = str->add("#00000020");
40325str->del(strings[6900]);
40326str->del(strings[6923]);
40327strings[6894] = str->add(strings[6894]);
40328strings[6924] = str->add("12.000000");
40329str->del(strings[6894]);
40330str->del(strings[6924]);
40331strings[6892] = str->add(strings[6892]);
40332strings[471] = str->add(strings[471]);
40333str->del(strings[470]);
40334strings[471] = str->add(strings[471]);
40335str->del(strings[6892]);
40336str->del(strings[471]);
40337strings[382] = str->add(strings[382]);
40338strings[382] = str->add(strings[382]);
40339strings[382] = str->add(strings[382]);
40340strings[382] = str->add(strings[382]);
40341strings[382] = str->add(strings[382]);
40342strings[382] = str->add(strings[382]);
40343strings[382] = str->add(strings[382]);
40344strings[382] = str->add(strings[382]);
40345strings[382] = str->add(strings[382]);
40346strings[382] = str->add(strings[382]);
40347strings[382] = str->add(strings[382]);
40348strings[382] = str->add(strings[382]);
40349strings[382] = str->add(strings[382]);
40350strings[382] = str->add(strings[382]);
40351strings[382] = str->add(strings[382]);
40352strings[382] = str->add(strings[382]);
40353strings[382] = str->add(strings[382]);
40354strings[382] = str->add(strings[382]);
40355strings[382] = str->add(strings[382]);
40356strings[382] = str->add(strings[382]);
40357strings[382] = str->add(strings[382]);
40358strings[382] = str->add(strings[382]);
40359str->del(strings[471]);
40360str->del(strings[469]);
40361str->del(strings[382]);
40362str->del(strings[382]);
40363str->del(strings[382]);
40364str->del(strings[382]);
40365str->del(strings[382]);
40366str->del(strings[382]);
40367str->del(strings[382]);
40368str->del(strings[382]);
40369str->del(strings[382]);
40370str->del(strings[382]);
40371str->del(strings[382]);
40372str->del(strings[382]);
40373str->del(strings[382]);
40374str->del(strings[382]);
40375str->del(strings[382]);
40376str->del(strings[382]);
40377str->del(strings[382]);
40378str->del(strings[382]);
40379str->del(strings[382]);
40380str->del(strings[382]);
40381str->del(strings[382]);
40382str->del(strings[470]);
40383str->del(strings[469]);
40384str->del(strings[382]);
40385str->del(strings[6892]);
40386str->del(strings[6893]);
40387str->del(strings[6894]);
40388str->del(strings[6895]);
40389str->del(strings[6896]);
40390str->del(strings[6897]);
40391str->del(strings[6898]);
40392str->del(strings[6899]);
40393str->del(strings[6900]);
40394str->del(strings[6901]);
40395str->del(strings[6902]);
40396str->del(strings[6903]);
40397str->del(strings[6904]);
40398str->del(strings[6905]);
40399str->del(strings[6906]);
40400str->del(strings[6907]);
40401str->del(strings[6908]);
40402str->del(strings[6909]);
40403str->del(strings[6910]);
40404str->del(strings[6911]);
40405str->del(strings[6912]);
40406str->del(strings[6913]);
40407str->del(strings[6914]);
40408str->del(strings[7]);
40409str->del(strings[1869]);
40410strings[7] = str->add(strings[7]);
40411strings[3251] = str->add(strings[3251]);
40412strings[6925] = str->add("e,action,mouse,move");
40413strings[6926] = str->add("e");
40414strings[6925] = str->add(strings[6925]);
40415strings[6926] = str->add(strings[6926]);
40416str->del(strings[6925]);
40417str->del(strings[6926]);
40418str->del(strings[6925]);
40419str->del(strings[6926]);
40420strings[6927] = str->add("e,action,mouse,move");
40421strings[6928] = str->add("e");
40422str->del(strings[6927]);
40423str->del(strings[6928]);
40424strings[6929] = str->add("e,action,mouse,move");
40425strings[6930] = str->add("e");
40426str->del(strings[6929]);
40427str->del(strings[6930]);
40428strings[1932] = str->add(strings[1932]);
40429strings[6931] = str->add("unsel");
40430str->del(strings[1932]);
40431str->del(strings[6931]);
40432strings[6932] = str->add("e,action,mouse,move");
40433strings[6933] = str->add("e");
40434str->del(strings[6932]);
40435str->del(strings[6933]);
40436strings[6934] = str->add("e,action,mouse,move");
40437strings[6935] = str->add("e");
40438str->del(strings[6934]);
40439str->del(strings[6935]);
40440strings[6936] = str->add("e,action,mouse,move");
40441strings[6937] = str->add("e");
40442str->del(strings[6936]);
40443str->del(strings[6937]);
40444strings[1932] = str->add(strings[1932]);
40445strings[6938] = str->add("go_activeb23");
40446strings[6939] = str->add("program,start");
40447strings[6940] = str->add("go_activec23");
40448strings[1932] = str->add(strings[1932]);
40449strings[6941] = str->add("go_activeb7");
40450strings[6939] = str->add(strings[6939]);
40451strings[6942] = str->add("go_activec7");
40452str->del(strings[1932]);
40453str->del(strings[6938]);
40454str->del(strings[6939]);
40455str->del(strings[6940]);
40456str->del(strings[1932]);
40457str->del(strings[6941]);
40458str->del(strings[6939]);
40459str->del(strings[6942]);
40460str->del(strings[7]);
40461str->del(strings[3251]);
40462strings[7] = str->add(strings[7]);
40463strings[3254] = str->add(strings[3254]);
40464strings[6943] = str->add("e,action,mouse,move");
40465strings[6944] = str->add("e");
40466strings[6945] = str->add("e,state,unselected");
40467strings[6944] = str->add(strings[6944]);
40468strings[6945] = str->add(strings[6945]);
40469strings[6944] = str->add(strings[6944]);
40470strings[6945] = str->add(strings[6945]);
40471strings[6944] = str->add(strings[6944]);
40472strings[6945] = str->add(strings[6945]);
40473strings[6944] = str->add(strings[6944]);
40474strings[6945] = str->add(strings[6945]);
40475strings[6944] = str->add(strings[6944]);
40476strings[6945] = str->add(strings[6945]);
40477strings[6944] = str->add(strings[6944]);
40478str->del(strings[6943]);
40479str->del(strings[6944]);
40480strings[1932] = str->add(strings[1932]);
40481strings[6946] = str->add("sel");
40482strings[6947] = str->add("program,start");
40483strings[6948] = str->add("unsel");
40484str->del(strings[6945]);
40485str->del(strings[6944]);
40486str->del(strings[6945]);
40487str->del(strings[6944]);
40488strings[1932] = str->add(strings[1932]);
40489strings[6946] = str->add(strings[6946]);
40490strings[6947] = str->add(strings[6947]);
40491strings[6948] = str->add(strings[6948]);
40492str->del(strings[6945]);
40493str->del(strings[6944]);
40494strings[6947] = str->add(strings[6947]);
40495strings[6948] = str->add(strings[6948]);
40496strings[1932] = str->add(strings[1932]);
40497strings[6948] = str->add(strings[6948]);
40498str->del(strings[6945]);
40499str->del(strings[6944]);
40500str->del(strings[6945]);
40501str->del(strings[6944]);
40502str->del(strings[6945]);
40503str->del(strings[6944]);
40504str->del(strings[1932]);
40505str->del(strings[6946]);
40506str->del(strings[6947]);
40507str->del(strings[6948]);
40508str->del(strings[1932]);
40509str->del(strings[6946]);
40510str->del(strings[6947]);
40511str->del(strings[6948]);
40512str->del(strings[6947]);
40513str->del(strings[6948]);
40514str->del(strings[1932]);
40515str->del(strings[6948]);
40516str->del(strings[64]);
40517str->del(strings[3021]);
40518strings[64] = str->add(strings[64]);
40519strings[2913] = str->add(strings[2913]);
40520strings[6949] = str->add("e,action,mouse,move");
40521strings[6950] = str->add("e");
40522str->del(strings[6949]);
40523str->del(strings[6950]);
40524strings[1932] = str->add(strings[1932]);
40525strings[6951] = str->add("go_activec1");
40526strings[6952] = str->add("program,start");
40527strings[6953] = str->add("go_activeb1");
40528strings[1932] = str->add(strings[1932]);
40529strings[6954] = str->add("go_activec29");
40530strings[6952] = str->add(strings[6952]);
40531strings[6955] = str->add("go_activeb29");
40532str->del(strings[1932]);
40533str->del(strings[6951]);
40534str->del(strings[6952]);
40535str->del(strings[6953]);
40536str->del(strings[1932]);
40537str->del(strings[6954]);
40538str->del(strings[6952]);
40539str->del(strings[6955]);
40540str->del(strings[7]);
40541str->del(strings[3254]);
40542strings[7] = str->add(strings[7]);
40543strings[2206] = str->add(strings[2206]);
40544strings[6956] = str->add("e,action,mouse,move");
40545strings[6957] = str->add("e");
40546strings[6956] = str->add(strings[6956]);
40547strings[6957] = str->add(strings[6957]);
40548strings[6956] = str->add(strings[6956]);
40549strings[6957] = str->add(strings[6957]);
40550str->del(strings[6956]);
40551str->del(strings[6957]);
40552str->del(strings[6956]);
40553str->del(strings[6957]);
40554str->del(strings[6956]);
40555str->del(strings[6957]);
40556strings[6958] = str->add("e,action,mouse,move");
40557strings[6959] = str->add("e");
40558str->del(strings[6958]);
40559str->del(strings[6959]);
40560strings[6960] = str->add("e,action,mouse,move");
40561strings[6961] = str->add("e");
40562str->del(strings[6960]);
40563str->del(strings[6961]);
40564strings[6962] = str->add("e,action,mouse,move");
40565strings[6963] = str->add("e");
40566str->del(strings[6962]);
40567str->del(strings[6963]);
40568strings[6964] = str->add("e,action,mouse,move");
40569strings[6965] = str->add("e");
40570str->del(strings[6964]);
40571str->del(strings[6965]);
40572strings[1932] = str->add(strings[1932]);
40573strings[6966] = str->add("unsel");
40574str->del(strings[1932]);
40575str->del(strings[6966]);
40576str->del(strings[7]);
40577str->del(strings[2206]);
40578strings[7] = str->add(strings[7]);
40579strings[2213] = str->add(strings[2213]);
40580strings[6967] = str->add("e,action,mouse,move");
40581strings[6968] = str->add("e");
40582str->del(strings[6967]);
40583str->del(strings[6968]);
40584strings[6969] = str->add("e,action,mouse,move");
40585strings[6970] = str->add("e");
40586strings[6971] = str->add("e,state,selected");
40587strings[6970] = str->add(strings[6970]);
40588strings[6971] = str->add(strings[6971]);
40589strings[6970] = str->add(strings[6970]);
40590strings[6971] = str->add(strings[6971]);
40591strings[6970] = str->add(strings[6970]);
40592strings[6971] = str->add(strings[6971]);
40593strings[6970] = str->add(strings[6970]);
40594strings[6971] = str->add(strings[6971]);
40595strings[6970] = str->add(strings[6970]);
40596strings[6971] = str->add(strings[6971]);
40597strings[6970] = str->add(strings[6970]);
40598str->del(strings[6969]);
40599str->del(strings[6970]);
40600strings[6972] = str->add("program,start");
40601strings[6973] = str->add("sel");
40602str->del(strings[6971]);
40603str->del(strings[6970]);
40604str->del(strings[6971]);
40605str->del(strings[6970]);
40606strings[6972] = str->add(strings[6972]);
40607strings[6973] = str->add(strings[6973]);
40608str->del(strings[6971]);
40609str->del(strings[6970]);
40610strings[6972] = str->add(strings[6972]);
40611strings[6973] = str->add(strings[6973]);
40612strings[1932] = str->add(strings[1932]);
40613strings[6973] = str->add(strings[6973]);
40614str->del(strings[6971]);
40615str->del(strings[6970]);
40616strings[6972] = str->add(strings[6972]);
40617strings[6974] = str->add("e_in");
40618str->del(strings[6971]);
40619str->del(strings[6970]);
40620str->del(strings[6971]);
40621str->del(strings[6970]);
40622str->del(strings[6972]);
40623str->del(strings[6973]);
40624str->del(strings[6972]);
40625str->del(strings[6973]);
40626str->del(strings[6972]);
40627str->del(strings[6973]);
40628str->del(strings[1932]);
40629str->del(strings[6973]);
40630str->del(strings[6972]);
40631str->del(strings[6974]);
40632strings[361] = str->add(strings[361]);
40633strings[362] = str->add(strings[362]);
40634strings[361] = str->add(strings[361]);
40635str->del(strings[361]);
40636strings[362] = str->add(strings[362]);
40637str->del(strings[362]);
40638strings[6975] = str->add("resize");
40639str->del(strings[6975]);
40640strings[64] = str->add(strings[64]);
40641strings[2581] = str->add(strings[2581]);
40642strings[64] = str->add(strings[64]);
40643strings[6976] = str->add("load");
40644strings[1841] = str->add(strings[1841]);
40645strings[64] = str->add(strings[64]);
40646strings[1949] = str->add(strings[1949]);
40647strings[64] = str->add(strings[64]);
40648strings[1880] = str->add(strings[1880]);
40649strings[64] = str->add(strings[64]);
40650strings[1876] = str->add(strings[1876]);
40651str->del(strings[64]);
40652strings[379] = str->add(strings[379]);
40653strings[1842] = str->add(strings[1842]);
40654strings[1842] = str->add(strings[1842]);
40655strings[64] = str->add(strings[64]);
40656strings[1874] = str->add(strings[1874]);
40657strings[64] = str->add(strings[64]);
40658strings[2583] = str->add(strings[2583]);
40659strings[6976] = str->add(strings[6976]);
40660strings[1841] = str->add(strings[1841]);
40661strings[64] = str->add(strings[64]);
40662strings[2584] = str->add(strings[2584]);
40663strings[6976] = str->add(strings[6976]);
40664strings[1841] = str->add(strings[1841]);
40665strings[469] = str->add(strings[469]);
40666strings[2671] = str->add(strings[2671]);
40667strings[6976] = str->add(strings[6976]);
40668strings[469] = str->add(strings[469]);
40669strings[2898] = str->add(strings[2898]);
40670strings[469] = str->add(strings[469]);
40671strings[2900] = str->add(strings[2900]);
40672strings[1841] = str->add(strings[1841]);
40673strings[6977] = str->add("resize");
40674strings[6977] = str->add(strings[6977]);
40675strings[64] = str->add(strings[64]);
40676strings[2585] = str->add(strings[2585]);
40677strings[64] = str->add(strings[64]);
40678strings[6976] = str->add(strings[6976]);
40679strings[6487] = str->add(strings[6487]);
40680strings[1841] = str->add(strings[1841]);
40681str->del(strings[64]);
40682strings[385] = str->add(strings[385]);
40683strings[6487] = str->add(strings[6487]);
40684strings[64] = str->add(strings[64]);
40685strings[2886] = str->add(strings[2886]);
40686strings[64] = str->add(strings[64]);
40687strings[2888] = str->add(strings[2888]);
40688strings[64] = str->add(strings[64]);
40689strings[2583] = str->add(strings[2583]);
40690strings[6976] = str->add(strings[6976]);
40691strings[1841] = str->add(strings[1841]);
40692strings[64] = str->add(strings[64]);
40693strings[2584] = str->add(strings[2584]);
40694strings[6976] = str->add(strings[6976]);
40695strings[1841] = str->add(strings[1841]);
40696strings[469] = str->add(strings[469]);
40697strings[2680] = str->add(strings[2680]);
40698strings[6976] = str->add(strings[6976]);
40699strings[469] = str->add(strings[469]);
40700strings[3094] = str->add(strings[3094]);
40701strings[1841] = str->add(strings[1841]);
40702strings[6977] = str->add(strings[6977]);
40703strings[6977] = str->add(strings[6977]);
40704strings[64] = str->add(strings[64]);
40705strings[2585] = str->add(strings[2585]);
40706strings[64] = str->add(strings[64]);
40707strings[6976] = str->add(strings[6976]);
40708strings[2514] = str->add(strings[2514]);
40709strings[1841] = str->add(strings[1841]);
40710str->del(strings[64]);
40711strings[385] = str->add(strings[385]);
40712strings[2514] = str->add(strings[2514]);
40713strings[64] = str->add(strings[64]);
40714strings[2886] = str->add(strings[2886]);
40715strings[64] = str->add(strings[64]);
40716strings[2888] = str->add(strings[2888]);
40717strings[64] = str->add(strings[64]);
40718strings[2582] = str->add(strings[2582]);
40719strings[6976] = str->add(strings[6976]);
40720strings[1841] = str->add(strings[1841]);
40721strings[64] = str->add(strings[64]);
40722strings[2583] = str->add(strings[2583]);
40723strings[6976] = str->add(strings[6976]);
40724strings[1841] = str->add(strings[1841]);
40725strings[64] = str->add(strings[64]);
40726strings[2584] = str->add(strings[2584]);
40727strings[6976] = str->add(strings[6976]);
40728strings[1841] = str->add(strings[1841]);
40729strings[469] = str->add(strings[469]);
40730strings[2672] = str->add(strings[2672]);
40731strings[6976] = str->add(strings[6976]);
40732strings[469] = str->add(strings[469]);
40733strings[3130] = str->add(strings[3130]);
40734strings[1841] = str->add(strings[1841]);
40735strings[6977] = str->add(strings[6977]);
40736strings[6977] = str->add(strings[6977]);
40737strings[64] = str->add(strings[64]);
40738strings[2585] = str->add(strings[2585]);
40739strings[64] = str->add(strings[64]);
40740strings[6976] = str->add(strings[6976]);
40741strings[1713] = str->add(strings[1713]);
40742strings[1841] = str->add(strings[1841]);
40743str->del(strings[64]);
40744strings[385] = str->add(strings[385]);
40745strings[1713] = str->add(strings[1713]);
40746strings[64] = str->add(strings[64]);
40747strings[2886] = str->add(strings[2886]);
40748strings[64] = str->add(strings[64]);
40749strings[2888] = str->add(strings[2888]);
40750strings[64] = str->add(strings[64]);
40751strings[2583] = str->add(strings[2583]);
40752strings[6976] = str->add(strings[6976]);
40753strings[1841] = str->add(strings[1841]);
40754strings[64] = str->add(strings[64]);
40755strings[2584] = str->add(strings[2584]);
40756strings[6976] = str->add(strings[6976]);
40757strings[1841] = str->add(strings[1841]);
40758strings[469] = str->add(strings[469]);
40759strings[2673] = str->add(strings[2673]);
40760strings[6976] = str->add(strings[6976]);
40761strings[469] = str->add(strings[469]);
40762strings[3132] = str->add(strings[3132]);
40763strings[1841] = str->add(strings[1841]);
40764strings[6977] = str->add(strings[6977]);
40765strings[6977] = str->add(strings[6977]);
40766strings[64] = str->add(strings[64]);
40767strings[2585] = str->add(strings[2585]);
40768strings[64] = str->add(strings[64]);
40769strings[6976] = str->add(strings[6976]);
40770strings[1714] = str->add(strings[1714]);
40771strings[1841] = str->add(strings[1841]);
40772str->del(strings[64]);
40773strings[385] = str->add(strings[385]);
40774strings[1714] = str->add(strings[1714]);
40775strings[64] = str->add(strings[64]);
40776strings[2886] = str->add(strings[2886]);
40777strings[64] = str->add(strings[64]);
40778strings[2888] = str->add(strings[2888]);
40779strings[6977] = str->add(strings[6977]);
40780strings[6977] = str->add(strings[6977]);
40781strings[6977] = str->add(strings[6977]);
40782strings[6977] = str->add(strings[6977]);
40783strings[6977] = str->add(strings[6977]);
40784strings[6977] = str->add(strings[6977]);
40785strings[6977] = str->add(strings[6977]);
40786strings[6977] = str->add(strings[6977]);
40787strings[6977] = str->add(strings[6977]);
40788strings[6977] = str->add(strings[6977]);
40789strings[6977] = str->add(strings[6977]);
40790strings[6977] = str->add(strings[6977]);
40791strings[6977] = str->add(strings[6977]);
40792strings[6977] = str->add(strings[6977]);
40793strings[1933] = str->add(strings[1933]);
40794str->del(strings[1933]);
40795str->del(strings[64]);
40796str->del(strings[2583]);
40797strings[1933] = str->add(strings[1933]);
40798str->del(strings[1933]);
40799str->del(strings[64]);
40800str->del(strings[2584]);
40801strings[1933] = str->add(strings[1933]);
40802str->del(strings[1933]);
40803str->del(strings[469]);
40804str->del(strings[2688]);
40805strings[1933] = str->add(strings[1933]);
40806str->del(strings[1933]);
40807str->del(strings[2224]);
40808str->del(strings[2224]);
40809str->del(strings[2224]);
40810str->del(strings[64]);
40811str->del(strings[2585]);
40812strings[1933] = str->add(strings[1933]);
40813str->del(strings[1933]);
40814str->del(strings[64]);
40815str->del(strings[2582]);
40816strings[1933] = str->add(strings[1933]);
40817str->del(strings[1933]);
40818str->del(strings[64]);
40819str->del(strings[2583]);
40820strings[1933] = str->add(strings[1933]);
40821str->del(strings[1933]);
40822str->del(strings[64]);
40823str->del(strings[2584]);
40824strings[1933] = str->add(strings[1933]);
40825str->del(strings[1933]);
40826str->del(strings[469]);
40827str->del(strings[2685]);
40828strings[1933] = str->add(strings[1933]);
40829str->del(strings[1933]);
40830str->del(strings[4]);
40831str->del(strings[4]);
40832str->del(strings[4]);
40833str->del(strings[64]);
40834str->del(strings[2585]);
40835strings[1933] = str->add(strings[1933]);
40836str->del(strings[1933]);
40837str->del(strings[64]);
40838str->del(strings[2583]);
40839strings[1933] = str->add(strings[1933]);
40840str->del(strings[1933]);
40841str->del(strings[64]);
40842str->del(strings[2584]);
40843strings[1933] = str->add(strings[1933]);
40844str->del(strings[1933]);
40845str->del(strings[1926]);
40846str->del(strings[3083]);
40847strings[1933] = str->add(strings[1933]);
40848str->del(strings[1933]);
40849str->del(strings[1925]);
40850str->del(strings[1925]);
40851str->del(strings[1925]);
40852str->del(strings[64]);
40853str->del(strings[2585]);
40854strings[1933] = str->add(strings[1933]);
40855str->del(strings[1933]);
40856str->del(strings[64]);
40857str->del(strings[2583]);
40858strings[1933] = str->add(strings[1933]);
40859str->del(strings[1933]);
40860str->del(strings[64]);
40861str->del(strings[2584]);
40862strings[1933] = str->add(strings[1933]);
40863str->del(strings[1933]);
40864str->del(strings[469]);
40865str->del(strings[2711]);
40866strings[1933] = str->add(strings[1933]);
40867str->del(strings[1933]);
40868str->del(strings[2494]);
40869str->del(strings[2494]);
40870str->del(strings[2494]);
40871str->del(strings[64]);
40872str->del(strings[2585]);
40873strings[1933] = str->add(strings[1933]);
40874str->del(strings[1933]);
40875str->del(strings[64]);
40876str->del(strings[2583]);
40877strings[1933] = str->add(strings[1933]);
40878str->del(strings[1933]);
40879str->del(strings[64]);
40880str->del(strings[2584]);
40881strings[1933] = str->add(strings[1933]);
40882str->del(strings[1933]);
40883str->del(strings[469]);
40884str->del(strings[2680]);
40885strings[1933] = str->add(strings[1933]);
40886str->del(strings[1933]);
40887str->del(strings[2514]);
40888str->del(strings[2514]);
40889str->del(strings[2514]);
40890str->del(strings[64]);
40891str->del(strings[2585]);
40892strings[1933] = str->add(strings[1933]);
40893str->del(strings[1933]);
40894str->del(strings[64]);
40895str->del(strings[2583]);
40896strings[1933] = str->add(strings[1933]);
40897str->del(strings[1933]);
40898str->del(strings[64]);
40899str->del(strings[2584]);
40900strings[1933] = str->add(strings[1933]);
40901str->del(strings[1933]);
40902str->del(strings[469]);
40903str->del(strings[2713]);
40904strings[1933] = str->add(strings[1933]);
40905str->del(strings[1933]);
40906str->del(strings[2536]);
40907str->del(strings[2536]);
40908str->del(strings[2536]);
40909str->del(strings[64]);
40910str->del(strings[2585]);
40911strings[1933] = str->add(strings[1933]);
40912str->del(strings[1933]);
40913str->del(strings[1842]);
40914str->del(strings[1842]);
40915str->del(strings[64]);
40916str->del(strings[2581]);
40917str->del(strings[64]);
40918str->del(strings[2886]);
40919str->del(strings[64]);
40920str->del(strings[2888]);
40921str->del(strings[469]);
40922str->del(strings[2902]);
40923str->del(strings[2224]);
40924str->del(strings[385]);
40925str->del(strings[64]);
40926str->del(strings[2915]);
40927str->del(strings[64]);
40928str->del(strings[2886]);
40929str->del(strings[64]);
40930str->del(strings[2888]);
40931str->del(strings[469]);
40932str->del(strings[3089]);
40933str->del(strings[4]);
40934str->del(strings[385]);
40935str->del(strings[64]);
40936str->del(strings[2886]);
40937str->del(strings[64]);
40938str->del(strings[2888]);
40939str->del(strings[1926]);
40940str->del(strings[1552]);
40941str->del(strings[1925]);
40942str->del(strings[385]);
40943str->del(strings[64]);
40944str->del(strings[2886]);
40945str->del(strings[64]);
40946str->del(strings[2888]);
40947str->del(strings[469]);
40948str->del(strings[3092]);
40949str->del(strings[2494]);
40950str->del(strings[385]);
40951str->del(strings[64]);
40952str->del(strings[2886]);
40953str->del(strings[64]);
40954str->del(strings[2888]);
40955str->del(strings[469]);
40956str->del(strings[3094]);
40957str->del(strings[2514]);
40958str->del(strings[385]);
40959str->del(strings[64]);
40960str->del(strings[2886]);
40961str->del(strings[64]);
40962str->del(strings[2888]);
40963str->del(strings[469]);
40964str->del(strings[3096]);
40965str->del(strings[2536]);
40966str->del(strings[385]);
40967str->del(strings[64]);
40968str->del(strings[1949]);
40969str->del(strings[64]);
40970str->del(strings[1880]);
40971str->del(strings[64]);
40972str->del(strings[1876]);
40973str->del(strings[379]);
40974str->del(strings[64]);
40975str->del(strings[1874]);
40976str->del(strings[361]);
40977str->del(strings[362]);
40978str->del(strings[1842]);
40979strings[1842] = str->add(strings[1842]);
40980str->del(strings[1842]);
40981strings[1842] = str->add(strings[1842]);
40982strings[6977] = str->add(strings[6977]);
40983strings[6487] = str->add(strings[6487]);
40984strings[6487] = str->add(strings[6487]);
40985strings[6977] = str->add(strings[6977]);
40986strings[2514] = str->add(strings[2514]);
40987strings[2514] = str->add(strings[2514]);
40988strings[64] = str->add(strings[64]);
40989strings[2915] = str->add(strings[2915]);
40990strings[6977] = str->add(strings[6977]);
40991strings[1713] = str->add(strings[1713]);
40992strings[1713] = str->add(strings[1713]);
40993strings[6977] = str->add(strings[6977]);
40994strings[1714] = str->add(strings[1714]);
40995strings[1714] = str->add(strings[1714]);
40996str->del(strings[64]);
40997str->del(strings[2913]);
40998strings[64] = str->add(strings[64]);
40999strings[3021] = str->add(strings[3021]);
41000strings[6978] = str->add("font");
41001strings[6979] = str->add("font_fallbacks");
41002strings[6980] = str->add("font_size");
41003strings[6981] = str->add("font_source");
41004strings[6982] = str->add("color");
41005strings[6983] = str->add("underline_color");
41006strings[6984] = str->add("underline2_color");
41007strings[6985] = str->add("outline_color");
41008strings[6986] = str->add("shadow_color");
41009strings[6987] = str->add("glow_color");
41010strings[6988] = str->add("glow2_color");
41011strings[6989] = str->add("backing_color");
41012strings[6990] = str->add("strikethrough_color");
41013strings[6991] = str->add("align");
41014strings[6992] = str->add("valign");
41015strings[6993] = str->add("wrap");
41016strings[6994] = str->add("left_margin");
41017strings[6995] = str->add("right_margin");
41018strings[6996] = str->add("underline");
41019strings[6997] = str->add("strikethrough");
41020strings[6998] = str->add("backing");
41021strings[6999] = str->add("style");
41022strings[7000] = str->add("tabstops");
41023strings[6991] = str->add(strings[6991]);
41024strings[7001] = str->add("center");
41025str->del(strings[6991]);
41026str->del(strings[7001]);
41027strings[6982] = str->add(strings[6982]);
41028strings[7002] = str->add("#000");
41029str->del(strings[6982]);
41030str->del(strings[7002]);
41031strings[6999] = str->add(strings[6999]);
41032strings[7003] = str->add("shadow");
41033str->del(strings[6999]);
41034str->del(strings[7003]);
41035strings[6986] = str->add(strings[6986]);
41036strings[7004] = str->add("#ffffff80");
41037str->del(strings[6986]);
41038str->del(strings[7004]);
41039strings[6993] = str->add(strings[6993]);
41040strings[7005] = str->add("word");
41041str->del(strings[6993]);
41042str->del(strings[7005]);
41043strings[6981] = str->add(strings[6981]);
41044strings[469] = str->add(strings[469]);
41045strings[469] = str->add(strings[469]);
41046str->del(strings[6981]);
41047str->del(strings[469]);
41048strings[6980] = str->add(strings[6980]);
41049strings[7006] = str->add("10.000000");
41050str->del(strings[6980]);
41051str->del(strings[7006]);
41052strings[6978] = str->add(strings[6978]);
41053strings[470] = str->add(strings[470]);
41054strings[470] = str->add(strings[470]);
41055str->del(strings[6978]);
41056str->del(strings[470]);
41057strings[382] = str->add(strings[382]);
41058strings[382] = str->add(strings[382]);
41059strings[382] = str->add(strings[382]);
41060strings[382] = str->add(strings[382]);
41061strings[382] = str->add(strings[382]);
41062strings[382] = str->add(strings[382]);
41063strings[470] = str->add(strings[470]);
41064strings[469] = str->add(strings[469]);
41065strings[6999] = str->add(strings[6999]);
41066strings[7007] = str->add("glow");
41067str->del(strings[6999]);
41068str->del(strings[7007]);
41069strings[6982] = str->add(strings[6982]);
41070strings[7008] = str->add("#fff");
41071str->del(strings[6982]);
41072str->del(strings[7008]);
41073strings[6988] = str->add(strings[6988]);
41074strings[7009] = str->add("#fe87");
41075str->del(strings[6988]);
41076str->del(strings[7009]);
41077strings[6987] = str->add(strings[6987]);
41078strings[7010] = str->add("#fa14");
41079str->del(strings[6987]);
41080str->del(strings[7010]);
41081strings[6978] = str->add(strings[6978]);
41082strings[471] = str->add(strings[471]);
41083str->del(strings[470]);
41084strings[471] = str->add(strings[471]);
41085str->del(strings[6978]);
41086str->del(strings[471]);
41087strings[470] = str->add(strings[470]);
41088strings[469] = str->add(strings[469]);
41089strings[6999] = str->add(strings[6999]);
41090strings[7011] = str->add("glow");
41091str->del(strings[6999]);
41092str->del(strings[7011]);
41093strings[6982] = str->add(strings[6982]);
41094strings[7012] = str->add("#fff");
41095str->del(strings[6982]);
41096str->del(strings[7012]);
41097strings[6988] = str->add(strings[6988]);
41098strings[7013] = str->add("#fe87");
41099str->del(strings[6988]);
41100str->del(strings[7013]);
41101strings[6987] = str->add(strings[6987]);
41102strings[7014] = str->add("#fa14");
41103str->del(strings[6987]);
41104str->del(strings[7014]);
41105strings[6978] = str->add(strings[6978]);
41106strings[471] = str->add(strings[471]);
41107str->del(strings[470]);
41108strings[471] = str->add(strings[471]);
41109str->del(strings[6978]);
41110str->del(strings[471]);
41111str->del(strings[6978]);
41112str->del(strings[6979]);
41113str->del(strings[6980]);
41114str->del(strings[6981]);
41115str->del(strings[6982]);
41116str->del(strings[6983]);
41117str->del(strings[6984]);
41118str->del(strings[6985]);
41119str->del(strings[6986]);
41120str->del(strings[6987]);
41121str->del(strings[6988]);
41122str->del(strings[6989]);
41123str->del(strings[6990]);
41124str->del(strings[6991]);
41125str->del(strings[6992]);
41126str->del(strings[6993]);
41127str->del(strings[6994]);
41128str->del(strings[6995]);
41129str->del(strings[6996]);
41130str->del(strings[6997]);
41131str->del(strings[6998]);
41132str->del(strings[6999]);
41133str->del(strings[7000]);
41134str->del(strings[382]);
41135str->del(strings[382]);
41136str->del(strings[382]);
41137str->del(strings[382]);
41138str->del(strings[382]);
41139str->del(strings[382]);
41140str->del(strings[471]);
41141str->del(strings[469]);
41142str->del(strings[470]);
41143str->del(strings[469]);
41144str->del(strings[471]);
41145str->del(strings[469]);
41146strings[7015] = str->add("font");
41147strings[7016] = str->add("font_fallbacks");
41148strings[7017] = str->add("font_size");
41149strings[7018] = str->add("font_source");
41150strings[7019] = str->add("color");
41151strings[7020] = str->add("underline_color");
41152strings[7021] = str->add("underline2_color");
41153strings[7022] = str->add("outline_color");
41154strings[7023] = str->add("shadow_color");
41155strings[7024] = str->add("glow_color");
41156strings[7025] = str->add("glow2_color");
41157strings[7026] = str->add("backing_color");
41158strings[7027] = str->add("strikethrough_color");
41159strings[7028] = str->add("align");
41160strings[7029] = str->add("valign");
41161strings[7030] = str->add("wrap");
41162strings[7031] = str->add("left_margin");
41163strings[7032] = str->add("right_margin");
41164strings[7033] = str->add("underline");
41165strings[7034] = str->add("strikethrough");
41166strings[7035] = str->add("backing");
41167strings[7036] = str->add("style");
41168strings[7037] = str->add("tabstops");
41169strings[7028] = str->add(strings[7028]);
41170strings[7038] = str->add("center");
41171str->del(strings[7028]);
41172str->del(strings[7038]);
41173strings[7019] = str->add(strings[7019]);
41174strings[7039] = str->add("#000");
41175str->del(strings[7019]);
41176str->del(strings[7039]);
41177strings[7036] = str->add(strings[7036]);
41178strings[7040] = str->add("shadow");
41179str->del(strings[7036]);
41180str->del(strings[7040]);
41181strings[7023] = str->add(strings[7023]);
41182strings[7041] = str->add("#ffffff80");
41183str->del(strings[7023]);
41184str->del(strings[7041]);
41185strings[7030] = str->add(strings[7030]);
41186strings[7042] = str->add("word");
41187str->del(strings[7030]);
41188str->del(strings[7042]);
41189strings[7018] = str->add(strings[7018]);
41190strings[469] = str->add(strings[469]);
41191strings[469] = str->add(strings[469]);
41192str->del(strings[7018]);
41193str->del(strings[469]);
41194strings[7017] = str->add(strings[7017]);
41195strings[7043] = str->add("10.000000");
41196str->del(strings[7017]);
41197str->del(strings[7043]);
41198strings[7015] = str->add(strings[7015]);
41199strings[470] = str->add(strings[470]);
41200strings[470] = str->add(strings[470]);
41201str->del(strings[7015]);
41202str->del(strings[470]);
41203strings[470] = str->add(strings[470]);
41204strings[469] = str->add(strings[469]);
41205strings[7036] = str->add(strings[7036]);
41206strings[7044] = str->add("soft_shadow");
41207str->del(strings[7036]);
41208str->del(strings[7044]);
41209strings[7019] = str->add(strings[7019]);
41210strings[7045] = str->add("#fff");
41211str->del(strings[7019]);
41212str->del(strings[7045]);
41213strings[7023] = str->add(strings[7023]);
41214strings[7046] = str->add("#00000020");
41215str->del(strings[7023]);
41216str->del(strings[7046]);
41217strings[7017] = str->add(strings[7017]);
41218strings[7047] = str->add("12.000000");
41219str->del(strings[7017]);
41220str->del(strings[7047]);
41221strings[7015] = str->add(strings[7015]);
41222strings[471] = str->add(strings[471]);
41223str->del(strings[470]);
41224strings[471] = str->add(strings[471]);
41225str->del(strings[7015]);
41226str->del(strings[471]);
41227strings[382] = str->add(strings[382]);
41228strings[382] = str->add(strings[382]);
41229strings[382] = str->add(strings[382]);
41230strings[382] = str->add(strings[382]);
41231strings[382] = str->add(strings[382]);
41232strings[382] = str->add(strings[382]);
41233strings[382] = str->add(strings[382]);
41234strings[382] = str->add(strings[382]);
41235strings[382] = str->add(strings[382]);
41236strings[382] = str->add(strings[382]);
41237strings[382] = str->add(strings[382]);
41238strings[382] = str->add(strings[382]);
41239strings[382] = str->add(strings[382]);
41240strings[382] = str->add(strings[382]);
41241strings[382] = str->add(strings[382]);
41242strings[382] = str->add(strings[382]);
41243strings[382] = str->add(strings[382]);
41244strings[382] = str->add(strings[382]);
41245strings[382] = str->add(strings[382]);
41246strings[382] = str->add(strings[382]);
41247strings[382] = str->add(strings[382]);
41248strings[382] = str->add(strings[382]);
41249str->del(strings[7015]);
41250str->del(strings[7016]);
41251str->del(strings[7017]);
41252str->del(strings[7018]);
41253str->del(strings[7019]);
41254str->del(strings[7020]);
41255str->del(strings[7021]);
41256str->del(strings[7022]);
41257str->del(strings[7023]);
41258str->del(strings[7024]);
41259str->del(strings[7025]);
41260str->del(strings[7026]);
41261str->del(strings[7027]);
41262str->del(strings[7028]);
41263str->del(strings[7029]);
41264str->del(strings[7030]);
41265str->del(strings[7031]);
41266str->del(strings[7032]);
41267str->del(strings[7033]);
41268str->del(strings[7034]);
41269str->del(strings[7035]);
41270str->del(strings[7036]);
41271str->del(strings[7037]);
41272str->del(strings[471]);
41273str->del(strings[469]);
41274str->del(strings[382]);
41275str->del(strings[382]);
41276str->del(strings[382]);
41277str->del(strings[382]);
41278str->del(strings[382]);
41279str->del(strings[382]);
41280str->del(strings[382]);
41281str->del(strings[382]);
41282str->del(strings[382]);
41283str->del(strings[382]);
41284str->del(strings[382]);
41285str->del(strings[382]);
41286str->del(strings[382]);
41287str->del(strings[382]);
41288str->del(strings[382]);
41289str->del(strings[382]);
41290str->del(strings[382]);
41291str->del(strings[382]);
41292str->del(strings[382]);
41293str->del(strings[382]);
41294str->del(strings[382]);
41295str->del(strings[470]);
41296str->del(strings[469]);
41297str->del(strings[382]);
41298strings[1932] = str->add(strings[1932]);
41299strings[7048] = str->add("unsel");
41300str->del(strings[6976]);
41301str->del(strings[1841]);
41302str->del(strings[6976]);
41303str->del(strings[1841]);
41304str->del(strings[6976]);
41305str->del(strings[1841]);
41306str->del(strings[6976]);
41307str->del(strings[1841]);
41308str->del(strings[6977]);
41309str->del(strings[6977]);
41310str->del(strings[6976]);
41311str->del(strings[1841]);
41312str->del(strings[6976]);
41313str->del(strings[1841]);
41314str->del(strings[6976]);
41315str->del(strings[1841]);
41316str->del(strings[6976]);
41317str->del(strings[1841]);
41318str->del(strings[6977]);
41319str->del(strings[6977]);
41320str->del(strings[6976]);
41321str->del(strings[1841]);
41322str->del(strings[6976]);
41323str->del(strings[1841]);
41324str->del(strings[6976]);
41325str->del(strings[1841]);
41326str->del(strings[6976]);
41327str->del(strings[1841]);
41328str->del(strings[6976]);
41329str->del(strings[1841]);
41330str->del(strings[6977]);
41331str->del(strings[6977]);
41332str->del(strings[6976]);
41333str->del(strings[1841]);
41334str->del(strings[6976]);
41335str->del(strings[1841]);
41336str->del(strings[6976]);
41337str->del(strings[1841]);
41338str->del(strings[6976]);
41339str->del(strings[1841]);
41340str->del(strings[6977]);
41341str->del(strings[6977]);
41342str->del(strings[6976]);
41343str->del(strings[1841]);
41344str->del(strings[6977]);
41345str->del(strings[6977]);
41346str->del(strings[6977]);
41347str->del(strings[6977]);
41348str->del(strings[6977]);
41349str->del(strings[6977]);
41350str->del(strings[6977]);
41351str->del(strings[6977]);
41352str->del(strings[6977]);
41353str->del(strings[6977]);
41354str->del(strings[6977]);
41355str->del(strings[6977]);
41356str->del(strings[6977]);
41357str->del(strings[6977]);
41358str->del(strings[6977]);
41359str->del(strings[6977]);
41360str->del(strings[6977]);
41361str->del(strings[6977]);
41362str->del(strings[1932]);
41363str->del(strings[7048]);
41364strings[7049] = str->add("e,action,mouse,move");
41365strings[7050] = str->add("e");
41366str->del(strings[7049]);
41367str->del(strings[7050]);
41368strings[7051] = str->add("font");
41369strings[7052] = str->add("font_fallbacks");
41370strings[7053] = str->add("font_size");
41371strings[7054] = str->add("font_source");
41372strings[7055] = str->add("color");
41373strings[7056] = str->add("underline_color");
41374strings[7057] = str->add("underline2_color");
41375strings[7058] = str->add("outline_color");
41376strings[7059] = str->add("shadow_color");
41377strings[7060] = str->add("glow_color");
41378strings[7061] = str->add("glow2_color");
41379strings[7062] = str->add("backing_color");
41380strings[7063] = str->add("strikethrough_color");
41381strings[7064] = str->add("align");
41382strings[7065] = str->add("valign");
41383strings[7066] = str->add("wrap");
41384strings[7067] = str->add("left_margin");
41385strings[7068] = str->add("right_margin");
41386strings[7069] = str->add("underline");
41387strings[7070] = str->add("strikethrough");
41388strings[7071] = str->add("backing");
41389strings[7072] = str->add("style");
41390strings[7073] = str->add("tabstops");
41391strings[7064] = str->add(strings[7064]);
41392strings[7074] = str->add("center");
41393str->del(strings[7064]);
41394str->del(strings[7074]);
41395strings[7055] = str->add(strings[7055]);
41396strings[7075] = str->add("#000");
41397str->del(strings[7055]);
41398str->del(strings[7075]);
41399strings[7072] = str->add(strings[7072]);
41400strings[7076] = str->add("shadow");
41401str->del(strings[7072]);
41402str->del(strings[7076]);
41403strings[7059] = str->add(strings[7059]);
41404strings[7077] = str->add("#ffffff80");
41405str->del(strings[7059]);
41406str->del(strings[7077]);
41407strings[7066] = str->add(strings[7066]);
41408strings[7078] = str->add("word");
41409str->del(strings[7066]);
41410str->del(strings[7078]);
41411strings[7054] = str->add(strings[7054]);
41412strings[469] = str->add(strings[469]);
41413strings[469] = str->add(strings[469]);
41414str->del(strings[7054]);
41415str->del(strings[469]);
41416strings[7053] = str->add(strings[7053]);
41417strings[7079] = str->add("10.000000");
41418str->del(strings[7053]);
41419str->del(strings[7079]);
41420strings[7051] = str->add(strings[7051]);
41421strings[470] = str->add(strings[470]);
41422strings[470] = str->add(strings[470]);
41423str->del(strings[7051]);
41424str->del(strings[470]);
41425strings[470] = str->add(strings[470]);
41426strings[469] = str->add(strings[469]);
41427strings[7072] = str->add(strings[7072]);
41428strings[7080] = str->add("soft_shadow");
41429str->del(strings[7072]);
41430str->del(strings[7080]);
41431strings[7055] = str->add(strings[7055]);
41432strings[7081] = str->add("#fff");
41433str->del(strings[7055]);
41434str->del(strings[7081]);
41435strings[7059] = str->add(strings[7059]);
41436strings[7082] = str->add("#00000020");
41437str->del(strings[7059]);
41438str->del(strings[7082]);
41439strings[7053] = str->add(strings[7053]);
41440strings[7083] = str->add("12.000000");
41441str->del(strings[7053]);
41442str->del(strings[7083]);
41443strings[7051] = str->add(strings[7051]);
41444strings[471] = str->add(strings[471]);
41445str->del(strings[470]);
41446strings[471] = str->add(strings[471]);
41447str->del(strings[7051]);
41448str->del(strings[471]);
41449strings[382] = str->add(strings[382]);
41450strings[382] = str->add(strings[382]);
41451strings[382] = str->add(strings[382]);
41452strings[382] = str->add(strings[382]);
41453strings[382] = str->add(strings[382]);
41454strings[382] = str->add(strings[382]);
41455strings[382] = str->add(strings[382]);
41456strings[382] = str->add(strings[382]);
41457strings[382] = str->add(strings[382]);
41458strings[382] = str->add(strings[382]);
41459strings[382] = str->add(strings[382]);
41460strings[382] = str->add(strings[382]);
41461strings[382] = str->add(strings[382]);
41462strings[382] = str->add(strings[382]);
41463strings[382] = str->add(strings[382]);
41464strings[382] = str->add(strings[382]);
41465strings[382] = str->add(strings[382]);
41466strings[382] = str->add(strings[382]);
41467strings[382] = str->add(strings[382]);
41468strings[382] = str->add(strings[382]);
41469strings[382] = str->add(strings[382]);
41470strings[382] = str->add(strings[382]);
41471str->del(strings[471]);
41472str->del(strings[469]);
41473str->del(strings[382]);
41474str->del(strings[382]);
41475str->del(strings[382]);
41476str->del(strings[382]);
41477str->del(strings[382]);
41478str->del(strings[382]);
41479str->del(strings[382]);
41480str->del(strings[382]);
41481str->del(strings[382]);
41482str->del(strings[382]);
41483str->del(strings[382]);
41484str->del(strings[382]);
41485str->del(strings[382]);
41486str->del(strings[382]);
41487str->del(strings[382]);
41488str->del(strings[382]);
41489str->del(strings[382]);
41490str->del(strings[382]);
41491str->del(strings[382]);
41492str->del(strings[382]);
41493str->del(strings[382]);
41494str->del(strings[470]);
41495str->del(strings[469]);
41496str->del(strings[382]);
41497str->del(strings[7051]);
41498str->del(strings[7052]);
41499str->del(strings[7053]);
41500str->del(strings[7054]);
41501str->del(strings[7055]);
41502str->del(strings[7056]);
41503str->del(strings[7057]);
41504str->del(strings[7058]);
41505str->del(strings[7059]);
41506str->del(strings[7060]);
41507str->del(strings[7061]);
41508str->del(strings[7062]);
41509str->del(strings[7063]);
41510str->del(strings[7064]);
41511str->del(strings[7065]);
41512str->del(strings[7066]);
41513str->del(strings[7067]);
41514str->del(strings[7068]);
41515str->del(strings[7069]);
41516str->del(strings[7070]);
41517str->del(strings[7071]);
41518str->del(strings[7072]);
41519str->del(strings[7073]);
41520strings[7084] = str->add("e,action,mouse,move");
41521strings[7085] = str->add("e");
41522str->del(strings[7084]);
41523str->del(strings[7085]);
41524strings[7086] = str->add("e,action,mouse,move");
41525strings[7087] = str->add("e");
41526str->del(strings[7086]);
41527str->del(strings[7087]);
41528str->del(strings[7]);
41529str->del(strings[2213]);
41530strings[7] = str->add(strings[7]);
41531strings[2220] = str->add(strings[2220]);
41532strings[7088] = str->add("e,action,mouse,move");
41533strings[7089] = str->add("e");
41534str->del(strings[7088]);
41535str->del(strings[7089]);
41536strings[7090] = str->add("e,action,mouse,move");
41537strings[7091] = str->add("e");
41538str->del(strings[7090]);
41539str->del(strings[7091]);
41540strings[7092] = str->add("e,action,mouse,move");
41541strings[7093] = str->add("e");
41542str->del(strings[7092]);
41543str->del(strings[7093]);
41544strings[1932] = str->add(strings[1932]);
41545strings[7094] = str->add("go_activeb22");
41546strings[7095] = str->add("program,start");
41547strings[7096] = str->add("go_activec22");
41548strings[1932] = str->add(strings[1932]);
41549strings[7097] = str->add("go_activeb8");
41550strings[7095] = str->add(strings[7095]);
41551strings[7098] = str->add("go_activec8");
41552str->del(strings[1932]);
41553str->del(strings[7094]);
41554str->del(strings[7095]);
41555str->del(strings[7096]);
41556str->del(strings[1932]);
41557str->del(strings[7097]);
41558str->del(strings[7095]);
41559str->del(strings[7098]);
41560strings[7099] = str->add("e,action,mouse,move");
41561strings[7100] = str->add("e");
41562strings[7099] = str->add(strings[7099]);
41563strings[7100] = str->add(strings[7100]);
41564str->del(strings[7099]);
41565str->del(strings[7100]);
41566str->del(strings[7099]);
41567str->del(strings[7100]);
41568strings[7101] = str->add("e,action,mouse,move");
41569strings[7102] = str->add("e");
41570str->del(strings[7101]);
41571str->del(strings[7102]);
41572strings[1932] = str->add(strings[1932]);
41573strings[7103] = str->add("go_activec28");
41574strings[7104] = str->add("program,start");
41575strings[7105] = str->add("go_activeb28");
41576strings[1932] = str->add(strings[1932]);
41577strings[7106] = str->add("go_activec2");
41578strings[7104] = str->add(strings[7104]);
41579strings[7107] = str->add("go_activeb2");
41580str->del(strings[1932]);
41581str->del(strings[7103]);
41582str->del(strings[7104]);
41583str->del(strings[7105]);
41584str->del(strings[1932]);
41585str->del(strings[7106]);
41586str->del(strings[7104]);
41587str->del(strings[7107]);
41588str->del(strings[7]);
41589str->del(strings[2220]);
41590strings[7] = str->add(strings[7]);
41591strings[2226] = str->add(strings[2226]);
41592strings[7108] = str->add("e,action,mouse,move");
41593strings[7109] = str->add("e");
41594str->del(strings[7108]);
41595str->del(strings[7109]);
41596strings[7110] = str->add("e,action,mouse,move");
41597strings[7111] = str->add("e");
41598str->del(strings[7110]);
41599str->del(strings[7111]);
41600strings[7112] = str->add("e,action,mouse,move");
41601strings[7113] = str->add("e");
41602str->del(strings[7112]);
41603str->del(strings[7113]);
41604strings[7114] = str->add("e,action,mouse,move");
41605strings[7115] = str->add("e");
41606str->del(strings[7114]);
41607str->del(strings[7115]);
41608strings[7116] = str->add("e,action,mouse,move");
41609strings[7117] = str->add("e");
41610str->del(strings[7116]);
41611str->del(strings[7117]);
41612strings[7118] = str->add("e,action,mouse,move");
41613strings[7119] = str->add("e");
41614str->del(strings[7118]);
41615str->del(strings[7119]);
41616strings[1932] = str->add(strings[1932]);
41617strings[7120] = str->add("unsel");
41618str->del(strings[1932]);
41619str->del(strings[7120]);
41620str->del(strings[7]);
41621str->del(strings[2226]);
41622strings[7] = str->add(strings[7]);
41623strings[2257] = str->add(strings[2257]);
41624strings[7121] = str->add("e,action,mouse,move");
41625strings[7122] = str->add("e");
41626strings[7121] = str->add(strings[7121]);
41627strings[7122] = str->add(strings[7122]);
41628str->del(strings[7121]);
41629str->del(strings[7122]);
41630str->del(strings[7121]);
41631str->del(strings[7122]);
41632strings[7123] = str->add("e,action,mouse,move");
41633strings[7124] = str->add("e");
41634str->del(strings[7123]);
41635str->del(strings[7124]);
41636strings[7125] = str->add("e,action,mouse,move");
41637strings[7126] = str->add("e");
41638str->del(strings[7125]);
41639str->del(strings[7126]);
41640strings[1932] = str->add(strings[1932]);
41641strings[7127] = str->add("sel");
41642strings[1932] = str->add(strings[1932]);
41643strings[7127] = str->add(strings[7127]);
41644str->del(strings[1932]);
41645str->del(strings[7127]);
41646str->del(strings[1932]);
41647str->del(strings[7127]);
41648strings[7128] = str->add("e,action,mouse,move");
41649strings[7129] = str->add("e");
41650strings[7128] = str->add(strings[7128]);
41651strings[7129] = str->add(strings[7129]);
41652str->del(strings[7128]);
41653str->del(strings[7129]);
41654str->del(strings[7128]);
41655str->del(strings[7129]);
41656strings[7130] = str->add("e,action,mouse,move");
41657strings[7131] = str->add("e");
41658str->del(strings[7130]);
41659str->del(strings[7131]);
41660strings[7132] = str->add("e,action,mouse,move");
41661strings[7133] = str->add("e");
41662str->del(strings[7132]);
41663str->del(strings[7133]);
41664str->del(strings[7]);
41665str->del(strings[2257]);
41666strings[7] = str->add(strings[7]);
41667strings[2270] = str->add(strings[2270]);
41668strings[7134] = str->add("e,action,mouse,move");
41669strings[7135] = str->add("e");
41670strings[7134] = str->add(strings[7134]);
41671strings[7135] = str->add(strings[7135]);
41672str->del(strings[7134]);
41673str->del(strings[7135]);
41674str->del(strings[7134]);
41675str->del(strings[7135]);
41676strings[7136] = str->add("e,action,mouse,move");
41677strings[7137] = str->add("e");
41678str->del(strings[7136]);
41679str->del(strings[7137]);
41680strings[7138] = str->add("e,action,mouse,move");
41681strings[7139] = str->add("e");
41682str->del(strings[7138]);
41683str->del(strings[7139]);
41684strings[1932] = str->add(strings[1932]);
41685strings[7140] = str->add("go_activeb21");
41686strings[7141] = str->add("program,start");
41687strings[7142] = str->add("go_activec21");
41688strings[1932] = str->add(strings[1932]);
41689strings[7143] = str->add("go_activeb9");
41690strings[7141] = str->add(strings[7141]);
41691strings[7144] = str->add("go_activec9");
41692str->del(strings[1932]);
41693str->del(strings[7140]);
41694str->del(strings[7141]);
41695str->del(strings[7142]);
41696str->del(strings[1932]);
41697str->del(strings[7143]);
41698str->del(strings[7141]);
41699str->del(strings[7144]);
41700strings[7145] = str->add("e,action,mouse,move");
41701strings[7146] = str->add("e");
41702strings[7145] = str->add(strings[7145]);
41703strings[7146] = str->add(strings[7146]);
41704str->del(strings[7145]);
41705str->del(strings[7146]);
41706str->del(strings[7145]);
41707str->del(strings[7146]);
41708strings[7147] = str->add("e,action,mouse,move");
41709strings[7148] = str->add("e");
41710str->del(strings[7147]);
41711str->del(strings[7148]);
41712strings[7149] = str->add("e,action,mouse,move");
41713strings[7150] = str->add("e");
41714str->del(strings[7149]);
41715str->del(strings[7150]);
41716strings[1932] = str->add(strings[1932]);
41717strings[7151] = str->add("go_activec27");
41718strings[7152] = str->add("program,start");
41719strings[7153] = str->add("go_activeb27");
41720strings[1932] = str->add(strings[1932]);
41721strings[7154] = str->add("go_activec3");
41722strings[7152] = str->add(strings[7152]);
41723strings[7155] = str->add("go_activeb3");
41724str->del(strings[1932]);
41725str->del(strings[7151]);
41726str->del(strings[7152]);
41727str->del(strings[7153]);
41728str->del(strings[1932]);
41729str->del(strings[7154]);
41730str->del(strings[7152]);
41731str->del(strings[7155]);
41732str->del(strings[7]);
41733str->del(strings[2270]);
41734strings[7] = str->add(strings[7]);
41735strings[2276] = str->add(strings[2276]);
41736strings[7156] = str->add("e,action,mouse,move");
41737strings[7157] = str->add("e");
41738strings[7156] = str->add(strings[7156]);
41739strings[7157] = str->add(strings[7157]);
41740str->del(strings[7156]);
41741str->del(strings[7157]);
41742str->del(strings[7156]);
41743str->del(strings[7157]);
41744strings[7158] = str->add("e,action,mouse,move");
41745strings[7159] = str->add("e");
41746str->del(strings[7158]);
41747str->del(strings[7159]);
41748strings[7160] = str->add("e,action,mouse,move");
41749strings[7161] = str->add("e");
41750str->del(strings[7160]);
41751str->del(strings[7161]);
41752strings[7162] = str->add("e,action,mouse,move");
41753strings[7163] = str->add("e");
41754str->del(strings[7162]);
41755str->del(strings[7163]);
41756strings[7164] = str->add("e,action,mouse,move");
41757strings[7165] = str->add("e");
41758str->del(strings[7164]);
41759str->del(strings[7165]);
41760strings[7166] = str->add("e,action,mouse,move");
41761strings[7167] = str->add("e");
41762str->del(strings[7166]);
41763str->del(strings[7167]);
41764strings[7168] = str->add("e,action,mouse,move");
41765strings[7169] = str->add("e");
41766str->del(strings[7168]);
41767str->del(strings[7169]);
41768strings[7170] = str->add("e,action,mouse,move");
41769strings[7171] = str->add("e");
41770str->del(strings[7170]);
41771str->del(strings[7171]);
41772strings[1932] = str->add(strings[1932]);
41773strings[7172] = str->add("go_activeb1");
41774strings[7173] = str->add("program,start");
41775strings[7174] = str->add("go_activec1");
41776strings[1932] = str->add(strings[1932]);
41777strings[7175] = str->add("go_activeb29");
41778strings[7173] = str->add(strings[7173]);
41779strings[7176] = str->add("go_activec29");
41780str->del(strings[1932]);
41781str->del(strings[7172]);
41782str->del(strings[7173]);
41783str->del(strings[7174]);
41784str->del(strings[1932]);
41785str->del(strings[7175]);
41786str->del(strings[7173]);
41787str->del(strings[7176]);
41788str->del(strings[7]);
41789str->del(strings[2276]);
41790strings[7] = str->add(strings[7]);
41791strings[3259] = str->add(strings[3259]);
41792strings[7177] = str->add("e,action,mouse,move");
41793strings[7178] = str->add("e");
41794strings[7177] = str->add(strings[7177]);
41795strings[7178] = str->add(strings[7178]);
41796str->del(strings[7177]);
41797str->del(strings[7178]);
41798str->del(strings[7177]);
41799str->del(strings[7178]);
41800strings[7179] = str->add("e,action,mouse,move");
41801strings[7180] = str->add("e");
41802str->del(strings[7179]);
41803str->del(strings[7180]);
41804strings[7181] = str->add("e,action,mouse,move");
41805strings[7182] = str->add("e");
41806str->del(strings[7181]);
41807str->del(strings[7182]);
41808str->del(strings[7]);
41809str->del(strings[3259]);
41810strings[7] = str->add(strings[7]);
41811strings[2292] = str->add(strings[2292]);
41812strings[7183] = str->add("e,action,mouse,move");
41813strings[7184] = str->add("e");
41814str->del(strings[7183]);
41815str->del(strings[7184]);
41816strings[1932] = str->add(strings[1932]);
41817strings[7185] = str->add("go_activec26");
41818strings[7186] = str->add("program,start");
41819strings[7187] = str->add("go_activeb26");
41820strings[1932] = str->add(strings[1932]);
41821strings[7188] = str->add("go_activec4");
41822strings[7186] = str->add(strings[7186]);
41823strings[7189] = str->add("go_activeb4");
41824strings[1932] = str->add(strings[1932]);
41825strings[7190] = str->add("e_in");
41826str->del(strings[1932]);
41827str->del(strings[7185]);
41828str->del(strings[7186]);
41829str->del(strings[7187]);
41830str->del(strings[1932]);
41831str->del(strings[7188]);
41832str->del(strings[7186]);
41833str->del(strings[7189]);
41834str->del(strings[1932]);
41835str->del(strings[7190]);
41836str->del(strings[7]);
41837str->del(strings[2292]);
41838strings[7] = str->add(strings[7]);
41839strings[2310] = str->add(strings[2310]);
41840str->del(strings[7]);
41841str->del(strings[2310]);
41842strings[7] = str->add(strings[7]);
41843strings[3279] = str->add(strings[3279]);
41844strings[1932] = str->add(strings[1932]);
41845strings[7191] = str->add("go_activeb28");
41846strings[7192] = str->add("program,start");
41847strings[7193] = str->add("go_activec28");
41848strings[1932] = str->add(strings[1932]);
41849strings[7194] = str->add("go_activeb2");
41850strings[7192] = str->add(strings[7192]);
41851strings[7195] = str->add("go_activec2");
41852str->del(strings[1932]);
41853str->del(strings[7191]);
41854str->del(strings[7192]);
41855str->del(strings[7193]);
41856str->del(strings[1932]);
41857str->del(strings[7194]);
41858str->del(strings[7192]);
41859str->del(strings[7195]);
41860strings[7196] = str->add("e,action,mouse,move");
41861strings[7197] = str->add("e");
41862strings[7196] = str->add(strings[7196]);
41863strings[7197] = str->add(strings[7197]);
41864str->del(strings[7196]);
41865str->del(strings[7197]);
41866str->del(strings[7196]);
41867str->del(strings[7197]);
41868strings[7198] = str->add("e,action,mouse,move");
41869strings[7199] = str->add("e");
41870str->del(strings[7198]);
41871str->del(strings[7199]);
41872strings[7200] = str->add("e,action,mouse,move");
41873strings[7201] = str->add("e");
41874str->del(strings[7200]);
41875str->del(strings[7201]);
41876str->del(strings[7]);
41877str->del(strings[3279]);
41878strings[7] = str->add(strings[7]);
41879strings[2320] = str->add(strings[2320]);
41880strings[7202] = str->add("e,action,mouse,move");
41881strings[7203] = str->add("e");
41882strings[7202] = str->add(strings[7202]);
41883strings[7203] = str->add(strings[7203]);
41884str->del(strings[7202]);
41885str->del(strings[7203]);
41886str->del(strings[7202]);
41887str->del(strings[7203]);
41888strings[7204] = str->add("e,action,mouse,move");
41889strings[7205] = str->add("e");
41890str->del(strings[7204]);
41891str->del(strings[7205]);
41892strings[7206] = str->add("e,action,mouse,move");
41893strings[7207] = str->add("e");
41894str->del(strings[7206]);
41895str->del(strings[7207]);
41896strings[7208] = str->add("e,action,mouse,move");
41897strings[7209] = str->add("e");
41898strings[7208] = str->add(strings[7208]);
41899strings[7209] = str->add(strings[7209]);
41900str->del(strings[7208]);
41901str->del(strings[7209]);
41902str->del(strings[7208]);
41903str->del(strings[7209]);
41904strings[7210] = str->add("e,action,mouse,move");
41905strings[7211] = str->add("e");
41906str->del(strings[7210]);
41907str->del(strings[7211]);
41908strings[7212] = str->add("e,action,mouse,move");
41909strings[7213] = str->add("e");
41910str->del(strings[7212]);
41911str->del(strings[7213]);
41912str->del(strings[7]);
41913str->del(strings[2320]);
41914strings[7] = str->add(strings[7]);
41915strings[2330] = str->add(strings[2330]);
41916strings[7214] = str->add("e,action,mouse,move");
41917strings[7215] = str->add("e");
41918str->del(strings[7214]);
41919str->del(strings[7215]);
41920strings[7216] = str->add("e,action,mouse,move");
41921strings[7217] = str->add("e");
41922str->del(strings[7216]);
41923str->del(strings[7217]);
41924strings[7218] = str->add("e,action,mouse,move");
41925strings[7219] = str->add("e");
41926str->del(strings[7218]);
41927str->del(strings[7219]);
41928strings[7220] = str->add("e,action,mouse,move");
41929strings[7221] = str->add("e");
41930str->del(strings[7220]);
41931str->del(strings[7221]);
41932strings[1932] = str->add(strings[1932]);
41933strings[7222] = str->add("go_activec25");
41934strings[7223] = str->add("program,start");
41935strings[7224] = str->add("go_activeb25");
41936strings[1932] = str->add(strings[1932]);
41937strings[7225] = str->add("go_activec5");
41938strings[7223] = str->add(strings[7223]);
41939strings[7226] = str->add("go_activeb5");
41940str->del(strings[1932]);
41941str->del(strings[7222]);
41942str->del(strings[7223]);
41943str->del(strings[7224]);
41944str->del(strings[1932]);
41945str->del(strings[7225]);
41946str->del(strings[7223]);
41947str->del(strings[7226]);
41948strings[7227] = str->add("e,action,mouse,move");
41949strings[7228] = str->add("e");
41950str->del(strings[7227]);
41951str->del(strings[7228]);
41952strings[7229] = str->add("e,action,mouse,move");
41953strings[7230] = str->add("e");
41954strings[7231] = str->add("e,state,unselected");
41955strings[7230] = str->add(strings[7230]);
41956strings[7231] = str->add(strings[7231]);
41957strings[7230] = str->add(strings[7230]);
41958strings[7231] = str->add(strings[7231]);
41959strings[7230] = str->add(strings[7230]);
41960strings[7231] = str->add(strings[7231]);
41961strings[7230] = str->add(strings[7230]);
41962strings[7231] = str->add(strings[7231]);
41963strings[7230] = str->add(strings[7230]);
41964strings[7231] = str->add(strings[7231]);
41965strings[7230] = str->add(strings[7230]);
41966str->del(strings[7229]);
41967str->del(strings[7230]);
41968strings[7232] = str->add("program,start");
41969strings[7233] = str->add("unsel");
41970str->del(strings[7231]);
41971str->del(strings[7230]);
41972str->del(strings[7231]);
41973str->del(strings[7230]);
41974strings[7232] = str->add(strings[7232]);
41975strings[7233] = str->add(strings[7233]);
41976str->del(strings[7231]);
41977str->del(strings[7230]);
41978strings[7232] = str->add(strings[7232]);
41979strings[7233] = str->add(strings[7233]);
41980strings[1932] = str->add(strings[1932]);
41981strings[7233] = str->add(strings[7233]);
41982str->del(strings[7231]);
41983str->del(strings[7230]);
41984strings[7232] = str->add(strings[7232]);
41985strings[7234] = str->add("e_out");
41986str->del(strings[7231]);
41987str->del(strings[7230]);
41988str->del(strings[7231]);
41989str->del(strings[7230]);
41990str->del(strings[7232]);
41991str->del(strings[7233]);
41992str->del(strings[7232]);
41993str->del(strings[7233]);
41994str->del(strings[7232]);
41995str->del(strings[7233]);
41996str->del(strings[1932]);
41997str->del(strings[7233]);
41998str->del(strings[7232]);
41999str->del(strings[7234]);
42000strings[7235] = str->add("e,action,mouse,move");
42001strings[7236] = str->add("e");
42002str->del(strings[7235]);
42003str->del(strings[7236]);
42004str->del(strings[64]);
42005str->del(strings[3021]);
42006strings[64] = str->add(strings[64]);
42007strings[2913] = str->add(strings[2913]);
42008strings[7237] = str->add("e,action,mouse,move");
42009strings[7238] = str->add("e");
42010str->del(strings[7237]);
42011str->del(strings[7238]);
42012str->del(strings[7]);
42013str->del(strings[2330]);
42014strings[7] = str->add(strings[7]);
42015strings[2343] = str->add(strings[2343]);
42016strings[7239] = str->add("e,action,mouse,move");
42017strings[7240] = str->add("e");
42018strings[7239] = str->add(strings[7239]);
42019strings[7240] = str->add(strings[7240]);
42020str->del(strings[7239]);
42021str->del(strings[7240]);
42022str->del(strings[7239]);
42023str->del(strings[7240]);
42024strings[7241] = str->add("e,action,mouse,move");
42025strings[7242] = str->add("e");
42026str->del(strings[7241]);
42027str->del(strings[7242]);
42028strings[7243] = str->add("e,action,mouse,move");
42029strings[7244] = str->add("e");
42030strings[7245] = str->add("e,state,selected");
42031strings[7244] = str->add(strings[7244]);
42032strings[7245] = str->add(strings[7245]);
42033strings[7244] = str->add(strings[7244]);
42034strings[7245] = str->add(strings[7245]);
42035strings[7244] = str->add(strings[7244]);
42036strings[7245] = str->add(strings[7245]);
42037strings[7244] = str->add(strings[7244]);
42038strings[7245] = str->add(strings[7245]);
42039strings[7244] = str->add(strings[7244]);
42040strings[7245] = str->add(strings[7245]);
42041strings[7244] = str->add(strings[7244]);
42042str->del(strings[7243]);
42043str->del(strings[7244]);
42044strings[7246] = str->add("program,start");
42045strings[7247] = str->add("sel");
42046str->del(strings[7245]);
42047str->del(strings[7244]);
42048str->del(strings[7245]);
42049str->del(strings[7244]);
42050strings[7246] = str->add(strings[7246]);
42051strings[7247] = str->add(strings[7247]);
42052str->del(strings[7245]);
42053str->del(strings[7244]);
42054strings[7246] = str->add(strings[7246]);
42055strings[7247] = str->add(strings[7247]);
42056strings[1932] = str->add(strings[1932]);
42057strings[7247] = str->add(strings[7247]);
42058str->del(strings[7245]);
42059str->del(strings[7244]);
42060str->del(strings[7245]);
42061str->del(strings[7244]);
42062str->del(strings[7245]);
42063str->del(strings[7244]);
42064str->del(strings[7246]);
42065str->del(strings[7247]);
42066str->del(strings[7246]);
42067str->del(strings[7247]);
42068str->del(strings[7246]);
42069str->del(strings[7247]);
42070str->del(strings[1932]);
42071str->del(strings[7247]);
42072strings[361] = str->add(strings[361]);
42073strings[362] = str->add(strings[362]);
42074strings[361] = str->add(strings[361]);
42075str->del(strings[361]);
42076strings[362] = str->add(strings[362]);
42077str->del(strings[362]);
42078strings[7248] = str->add("resize");
42079str->del(strings[7248]);
42080strings[64] = str->add(strings[64]);
42081strings[2581] = str->add(strings[2581]);
42082strings[64] = str->add(strings[64]);
42083strings[7249] = str->add("load");
42084strings[1841] = str->add(strings[1841]);
42085strings[64] = str->add(strings[64]);
42086strings[1949] = str->add(strings[1949]);
42087strings[64] = str->add(strings[64]);
42088strings[1880] = str->add(strings[1880]);
42089strings[64] = str->add(strings[64]);
42090strings[1876] = str->add(strings[1876]);
42091str->del(strings[64]);
42092strings[379] = str->add(strings[379]);
42093strings[1842] = str->add(strings[1842]);
42094strings[1842] = str->add(strings[1842]);
42095strings[64] = str->add(strings[64]);
42096strings[1874] = str->add(strings[1874]);
42097strings[64] = str->add(strings[64]);
42098strings[2583] = str->add(strings[2583]);
42099strings[7249] = str->add(strings[7249]);
42100strings[1841] = str->add(strings[1841]);
42101strings[64] = str->add(strings[64]);
42102strings[2584] = str->add(strings[2584]);
42103strings[7249] = str->add(strings[7249]);
42104strings[1841] = str->add(strings[1841]);
42105strings[469] = str->add(strings[469]);
42106strings[2688] = str->add(strings[2688]);
42107strings[7249] = str->add(strings[7249]);
42108strings[469] = str->add(strings[469]);
42109strings[2902] = str->add(strings[2902]);
42110strings[1841] = str->add(strings[1841]);
42111strings[7250] = str->add("resize");
42112strings[7250] = str->add(strings[7250]);
42113strings[64] = str->add(strings[64]);
42114strings[2585] = str->add(strings[2585]);
42115strings[64] = str->add(strings[64]);
42116strings[7249] = str->add(strings[7249]);
42117strings[2224] = str->add(strings[2224]);
42118strings[1841] = str->add(strings[1841]);
42119str->del(strings[64]);
42120strings[385] = str->add(strings[385]);
42121strings[2224] = str->add(strings[2224]);
42122strings[64] = str->add(strings[64]);
42123strings[2886] = str->add(strings[2886]);
42124strings[64] = str->add(strings[64]);
42125strings[2888] = str->add(strings[2888]);
42126strings[64] = str->add(strings[64]);
42127strings[2582] = str->add(strings[2582]);
42128strings[7249] = str->add(strings[7249]);
42129strings[1841] = str->add(strings[1841]);
42130strings[64] = str->add(strings[64]);
42131strings[2583] = str->add(strings[2583]);
42132strings[7249] = str->add(strings[7249]);
42133strings[1841] = str->add(strings[1841]);
42134strings[64] = str->add(strings[64]);
42135strings[2584] = str->add(strings[2584]);
42136strings[7249] = str->add(strings[7249]);
42137strings[1841] = str->add(strings[1841]);
42138strings[469] = str->add(strings[469]);
42139strings[2685] = str->add(strings[2685]);
42140strings[7249] = str->add(strings[7249]);
42141strings[469] = str->add(strings[469]);
42142strings[3089] = str->add(strings[3089]);
42143strings[1841] = str->add(strings[1841]);
42144strings[7250] = str->add(strings[7250]);
42145strings[7250] = str->add(strings[7250]);
42146strings[64] = str->add(strings[64]);
42147strings[2585] = str->add(strings[2585]);
42148strings[64] = str->add(strings[64]);
42149strings[7249] = str->add(strings[7249]);
42150strings[4] = str->add(strings[4]);
42151strings[1841] = str->add(strings[1841]);
42152str->del(strings[64]);
42153strings[385] = str->add(strings[385]);
42154strings[4] = str->add(strings[4]);
42155strings[64] = str->add(strings[64]);
42156strings[2886] = str->add(strings[2886]);
42157strings[64] = str->add(strings[64]);
42158strings[2888] = str->add(strings[2888]);
42159strings[64] = str->add(strings[64]);
42160strings[2583] = str->add(strings[2583]);
42161strings[7249] = str->add(strings[7249]);
42162strings[1841] = str->add(strings[1841]);
42163strings[64] = str->add(strings[64]);
42164strings[2584] = str->add(strings[2584]);
42165strings[7249] = str->add(strings[7249]);
42166strings[1841] = str->add(strings[1841]);
42167strings[1926] = str->add(strings[1926]);
42168strings[3083] = str->add(strings[3083]);
42169strings[7249] = str->add(strings[7249]);
42170strings[1926] = str->add(strings[1926]);
42171strings[1552] = str->add(strings[1552]);
42172strings[1841] = str->add(strings[1841]);
42173strings[7250] = str->add(strings[7250]);
42174strings[7250] = str->add(strings[7250]);
42175strings[64] = str->add(strings[64]);
42176strings[2585] = str->add(strings[2585]);
42177strings[64] = str->add(strings[64]);
42178strings[7249] = str->add(strings[7249]);
42179strings[1925] = str->add(strings[1925]);
42180strings[1841] = str->add(strings[1841]);
42181str->del(strings[64]);
42182strings[385] = str->add(strings[385]);
42183strings[1925] = str->add(strings[1925]);
42184strings[64] = str->add(strings[64]);
42185strings[2886] = str->add(strings[2886]);
42186strings[64] = str->add(strings[64]);
42187strings[2888] = str->add(strings[2888]);
42188strings[64] = str->add(strings[64]);
42189strings[2583] = str->add(strings[2583]);
42190strings[7249] = str->add(strings[7249]);
42191strings[1841] = str->add(strings[1841]);
42192strings[64] = str->add(strings[64]);
42193strings[2584] = str->add(strings[2584]);
42194strings[7249] = str->add(strings[7249]);
42195strings[1841] = str->add(strings[1841]);
42196strings[469] = str->add(strings[469]);
42197strings[2711] = str->add(strings[2711]);
42198strings[7249] = str->add(strings[7249]);
42199strings[469] = str->add(strings[469]);
42200strings[3092] = str->add(strings[3092]);
42201strings[1841] = str->add(strings[1841]);
42202strings[7250] = str->add(strings[7250]);
42203strings[7250] = str->add(strings[7250]);
42204strings[64] = str->add(strings[64]);
42205strings[2585] = str->add(strings[2585]);
42206strings[64] = str->add(strings[64]);
42207strings[7249] = str->add(strings[7249]);
42208strings[2494] = str->add(strings[2494]);
42209strings[1841] = str->add(strings[1841]);
42210str->del(strings[64]);
42211strings[385] = str->add(strings[385]);
42212strings[2494] = str->add(strings[2494]);
42213strings[64] = str->add(strings[64]);
42214strings[2886] = str->add(strings[2886]);
42215strings[64] = str->add(strings[64]);
42216strings[2888] = str->add(strings[2888]);
42217strings[64] = str->add(strings[64]);
42218strings[2583] = str->add(strings[2583]);
42219strings[7249] = str->add(strings[7249]);
42220strings[1841] = str->add(strings[1841]);
42221strings[64] = str->add(strings[64]);
42222strings[2584] = str->add(strings[2584]);
42223strings[7249] = str->add(strings[7249]);
42224strings[1841] = str->add(strings[1841]);
42225strings[469] = str->add(strings[469]);
42226strings[2680] = str->add(strings[2680]);
42227strings[7249] = str->add(strings[7249]);
42228strings[469] = str->add(strings[469]);
42229strings[3094] = str->add(strings[3094]);
42230strings[1841] = str->add(strings[1841]);
42231strings[7250] = str->add(strings[7250]);
42232strings[7250] = str->add(strings[7250]);
42233strings[64] = str->add(strings[64]);
42234strings[2585] = str->add(strings[2585]);
42235strings[64] = str->add(strings[64]);
42236strings[7249] = str->add(strings[7249]);
42237strings[2514] = str->add(strings[2514]);
42238strings[1841] = str->add(strings[1841]);
42239str->del(strings[64]);
42240strings[385] = str->add(strings[385]);
42241strings[2514] = str->add(strings[2514]);
42242strings[64] = str->add(strings[64]);
42243strings[2886] = str->add(strings[2886]);
42244strings[64] = str->add(strings[64]);
42245strings[2888] = str->add(strings[2888]);
42246strings[64] = str->add(strings[64]);
42247strings[2583] = str->add(strings[2583]);
42248strings[7249] = str->add(strings[7249]);
42249strings[1841] = str->add(strings[1841]);
42250strings[64] = str->add(strings[64]);
42251strings[2584] = str->add(strings[2584]);
42252strings[7249] = str->add(strings[7249]);
42253strings[1841] = str->add(strings[1841]);
42254strings[469] = str->add(strings[469]);
42255strings[2713] = str->add(strings[2713]);
42256strings[7249] = str->add(strings[7249]);
42257strings[469] = str->add(strings[469]);
42258strings[3096] = str->add(strings[3096]);
42259strings[1841] = str->add(strings[1841]);
42260strings[7250] = str->add(strings[7250]);
42261strings[7250] = str->add(strings[7250]);
42262strings[64] = str->add(strings[64]);
42263strings[2585] = str->add(strings[2585]);
42264strings[64] = str->add(strings[64]);
42265strings[7249] = str->add(strings[7249]);
42266strings[2536] = str->add(strings[2536]);
42267strings[1841] = str->add(strings[1841]);
42268str->del(strings[64]);
42269strings[385] = str->add(strings[385]);
42270strings[2536] = str->add(strings[2536]);
42271strings[64] = str->add(strings[64]);
42272strings[2886] = str->add(strings[2886]);
42273strings[64] = str->add(strings[64]);
42274strings[2888] = str->add(strings[2888]);
42275strings[7250] = str->add(strings[7250]);
42276strings[7250] = str->add(strings[7250]);
42277strings[7250] = str->add(strings[7250]);
42278strings[7250] = str->add(strings[7250]);
42279strings[7250] = str->add(strings[7250]);
42280strings[7250] = str->add(strings[7250]);
42281strings[7250] = str->add(strings[7250]);
42282strings[7250] = str->add(strings[7250]);
42283strings[7250] = str->add(strings[7250]);
42284strings[7250] = str->add(strings[7250]);
42285strings[7250] = str->add(strings[7250]);
42286strings[7250] = str->add(strings[7250]);
42287strings[7250] = str->add(strings[7250]);
42288strings[7250] = str->add(strings[7250]);
42289strings[7250] = str->add(strings[7250]);
42290strings[7250] = str->add(strings[7250]);
42291strings[7250] = str->add(strings[7250]);
42292strings[7250] = str->add(strings[7250]);
42293strings[7250] = str->add(strings[7250]);
42294strings[1933] = str->add(strings[1933]);
42295str->del(strings[1933]);
42296str->del(strings[64]);
42297str->del(strings[2583]);
42298strings[1933] = str->add(strings[1933]);
42299str->del(strings[1933]);
42300str->del(strings[64]);
42301str->del(strings[2584]);
42302strings[1933] = str->add(strings[1933]);
42303str->del(strings[1933]);
42304str->del(strings[469]);
42305str->del(strings[2671]);
42306strings[1933] = str->add(strings[1933]);
42307str->del(strings[1933]);
42308str->del(strings[6487]);
42309str->del(strings[6487]);
42310str->del(strings[6487]);
42311str->del(strings[64]);
42312str->del(strings[2585]);
42313strings[1933] = str->add(strings[1933]);
42314str->del(strings[1933]);
42315str->del(strings[64]);
42316str->del(strings[2583]);
42317strings[1933] = str->add(strings[1933]);
42318str->del(strings[1933]);
42319str->del(strings[64]);
42320str->del(strings[2584]);
42321strings[1933] = str->add(strings[1933]);
42322str->del(strings[1933]);
42323str->del(strings[469]);
42324str->del(strings[2680]);
42325strings[1933] = str->add(strings[1933]);
42326str->del(strings[1933]);
42327str->del(strings[2514]);
42328str->del(strings[2514]);
42329str->del(strings[2514]);
42330str->del(strings[64]);
42331str->del(strings[2585]);
42332strings[1933] = str->add(strings[1933]);
42333str->del(strings[1933]);
42334str->del(strings[64]);
42335str->del(strings[2582]);
42336strings[1933] = str->add(strings[1933]);
42337str->del(strings[1933]);
42338str->del(strings[64]);
42339str->del(strings[2583]);
42340strings[1933] = str->add(strings[1933]);
42341str->del(strings[1933]);
42342str->del(strings[64]);
42343str->del(strings[2584]);
42344strings[1933] = str->add(strings[1933]);
42345str->del(strings[1933]);
42346str->del(strings[469]);
42347str->del(strings[2672]);
42348strings[1933] = str->add(strings[1933]);
42349str->del(strings[1933]);
42350str->del(strings[1713]);
42351str->del(strings[1713]);
42352str->del(strings[1713]);
42353str->del(strings[64]);
42354str->del(strings[2585]);
42355strings[1933] = str->add(strings[1933]);
42356str->del(strings[1933]);
42357str->del(strings[64]);
42358str->del(strings[2583]);
42359strings[1933] = str->add(strings[1933]);
42360str->del(strings[1933]);
42361str->del(strings[64]);
42362str->del(strings[2584]);
42363strings[1933] = str->add(strings[1933]);
42364str->del(strings[1933]);
42365str->del(strings[469]);
42366str->del(strings[2673]);
42367strings[1933] = str->add(strings[1933]);
42368str->del(strings[1933]);
42369str->del(strings[1714]);
42370str->del(strings[1714]);
42371str->del(strings[1714]);
42372str->del(strings[64]);
42373str->del(strings[2585]);
42374strings[1933] = str->add(strings[1933]);
42375str->del(strings[1933]);
42376str->del(strings[1842]);
42377str->del(strings[1842]);
42378str->del(strings[64]);
42379str->del(strings[2581]);
42380str->del(strings[64]);
42381str->del(strings[2886]);
42382str->del(strings[64]);
42383str->del(strings[2888]);
42384str->del(strings[469]);
42385str->del(strings[2898]);
42386str->del(strings[469]);
42387str->del(strings[2900]);
42388str->del(strings[6487]);
42389str->del(strings[385]);
42390str->del(strings[64]);
42391str->del(strings[2886]);
42392str->del(strings[64]);
42393str->del(strings[2888]);
42394str->del(strings[469]);
42395str->del(strings[3094]);
42396str->del(strings[2514]);
42397str->del(strings[385]);
42398str->del(strings[64]);
42399str->del(strings[2915]);
42400str->del(strings[64]);
42401str->del(strings[2886]);
42402str->del(strings[64]);
42403str->del(strings[2888]);
42404str->del(strings[469]);
42405str->del(strings[3130]);
42406str->del(strings[1713]);
42407str->del(strings[385]);
42408str->del(strings[64]);
42409str->del(strings[2886]);
42410str->del(strings[64]);
42411str->del(strings[2888]);
42412str->del(strings[469]);
42413str->del(strings[3132]);
42414str->del(strings[1714]);
42415str->del(strings[385]);
42416str->del(strings[64]);
42417str->del(strings[1949]);
42418str->del(strings[64]);
42419str->del(strings[1880]);
42420str->del(strings[64]);
42421str->del(strings[1876]);
42422str->del(strings[379]);
42423str->del(strings[64]);
42424str->del(strings[1874]);
42425str->del(strings[361]);
42426str->del(strings[362]);
42427strings[7250] = str->add(strings[7250]);
42428strings[2224] = str->add(strings[2224]);
42429strings[2224] = str->add(strings[2224]);
42430strings[64] = str->add(strings[64]);
42431strings[2915] = str->add(strings[2915]);
42432strings[7250] = str->add(strings[7250]);
42433strings[4] = str->add(strings[4]);
42434strings[4] = str->add(strings[4]);
42435strings[7250] = str->add(strings[7250]);
42436strings[1925] = str->add(strings[1925]);
42437strings[1925] = str->add(strings[1925]);
42438strings[7250] = str->add(strings[7250]);
42439strings[2494] = str->add(strings[2494]);
42440strings[2494] = str->add(strings[2494]);
42441strings[7250] = str->add(strings[7250]);
42442strings[2514] = str->add(strings[2514]);
42443strings[2514] = str->add(strings[2514]);
42444strings[7250] = str->add(strings[7250]);
42445strings[2536] = str->add(strings[2536]);
42446strings[2536] = str->add(strings[2536]);
42447str->del(strings[64]);
42448str->del(strings[2913]);
42449strings[64] = str->add(strings[64]);
42450strings[3021] = str->add(strings[3021]);
42451strings[7251] = str->add("font");
42452strings[7252] = str->add("font_fallbacks");
42453strings[7253] = str->add("font_size");
42454strings[7254] = str->add("font_source");
42455strings[7255] = str->add("color");
42456strings[7256] = str->add("underline_color");
42457strings[7257] = str->add("underline2_color");
42458strings[7258] = str->add("outline_color");
42459strings[7259] = str->add("shadow_color");
42460strings[7260] = str->add("glow_color");
42461strings[7261] = str->add("glow2_color");
42462strings[7262] = str->add("backing_color");
42463strings[7263] = str->add("strikethrough_color");
42464strings[7264] = str->add("align");
42465strings[7265] = str->add("valign");
42466strings[7266] = str->add("wrap");
42467strings[7267] = str->add("left_margin");
42468strings[7268] = str->add("right_margin");
42469strings[7269] = str->add("underline");
42470strings[7270] = str->add("strikethrough");
42471strings[7271] = str->add("backing");
42472strings[7272] = str->add("style");
42473strings[7273] = str->add("tabstops");
42474strings[7264] = str->add(strings[7264]);
42475strings[7274] = str->add("center");
42476str->del(strings[7264]);
42477str->del(strings[7274]);
42478strings[7255] = str->add(strings[7255]);
42479strings[7275] = str->add("#000");
42480str->del(strings[7255]);
42481str->del(strings[7275]);
42482strings[7272] = str->add(strings[7272]);
42483strings[7276] = str->add("shadow");
42484str->del(strings[7272]);
42485str->del(strings[7276]);
42486strings[7259] = str->add(strings[7259]);
42487strings[7277] = str->add("#ffffff80");
42488str->del(strings[7259]);
42489str->del(strings[7277]);
42490strings[7266] = str->add(strings[7266]);
42491strings[7278] = str->add("word");
42492str->del(strings[7266]);
42493str->del(strings[7278]);
42494strings[7254] = str->add(strings[7254]);
42495strings[469] = str->add(strings[469]);
42496strings[469] = str->add(strings[469]);
42497str->del(strings[7254]);
42498str->del(strings[469]);
42499strings[7253] = str->add(strings[7253]);
42500strings[7279] = str->add("10.000000");
42501str->del(strings[7253]);
42502str->del(strings[7279]);
42503strings[7251] = str->add(strings[7251]);
42504strings[470] = str->add(strings[470]);
42505strings[470] = str->add(strings[470]);
42506str->del(strings[7251]);
42507str->del(strings[470]);
42508strings[382] = str->add(strings[382]);
42509strings[382] = str->add(strings[382]);
42510strings[382] = str->add(strings[382]);
42511strings[382] = str->add(strings[382]);
42512strings[382] = str->add(strings[382]);
42513strings[382] = str->add(strings[382]);
42514strings[470] = str->add(strings[470]);
42515strings[469] = str->add(strings[469]);
42516strings[7272] = str->add(strings[7272]);
42517strings[7280] = str->add("glow");
42518str->del(strings[7272]);
42519str->del(strings[7280]);
42520strings[7255] = str->add(strings[7255]);
42521strings[7281] = str->add("#fff");
42522str->del(strings[7255]);
42523str->del(strings[7281]);
42524strings[7261] = str->add(strings[7261]);
42525strings[7282] = str->add("#fe87");
42526str->del(strings[7261]);
42527str->del(strings[7282]);
42528strings[7260] = str->add(strings[7260]);
42529strings[7283] = str->add("#fa14");
42530str->del(strings[7260]);
42531str->del(strings[7283]);
42532strings[7251] = str->add(strings[7251]);
42533strings[471] = str->add(strings[471]);
42534str->del(strings[470]);
42535strings[471] = str->add(strings[471]);
42536str->del(strings[7251]);
42537str->del(strings[471]);
42538strings[470] = str->add(strings[470]);
42539strings[469] = str->add(strings[469]);
42540strings[7272] = str->add(strings[7272]);
42541strings[7284] = str->add("glow");
42542str->del(strings[7272]);
42543str->del(strings[7284]);
42544strings[7255] = str->add(strings[7255]);
42545strings[7285] = str->add("#fff");
42546str->del(strings[7255]);
42547str->del(strings[7285]);
42548strings[7261] = str->add(strings[7261]);
42549strings[7286] = str->add("#fe87");
42550str->del(strings[7261]);
42551str->del(strings[7286]);
42552strings[7260] = str->add(strings[7260]);
42553strings[7287] = str->add("#fa14");
42554str->del(strings[7260]);
42555str->del(strings[7287]);
42556strings[7251] = str->add(strings[7251]);
42557strings[471] = str->add(strings[471]);
42558str->del(strings[470]);
42559strings[471] = str->add(strings[471]);
42560str->del(strings[7251]);
42561str->del(strings[471]);
42562str->del(strings[7251]);
42563str->del(strings[7252]);
42564str->del(strings[7253]);
42565str->del(strings[7254]);
42566str->del(strings[7255]);
42567str->del(strings[7256]);
42568str->del(strings[7257]);
42569str->del(strings[7258]);
42570str->del(strings[7259]);
42571str->del(strings[7260]);
42572str->del(strings[7261]);
42573str->del(strings[7262]);
42574str->del(strings[7263]);
42575str->del(strings[7264]);
42576str->del(strings[7265]);
42577str->del(strings[7266]);
42578str->del(strings[7267]);
42579str->del(strings[7268]);
42580str->del(strings[7269]);
42581str->del(strings[7270]);
42582str->del(strings[7271]);
42583str->del(strings[7272]);
42584str->del(strings[7273]);
42585str->del(strings[382]);
42586str->del(strings[382]);
42587str->del(strings[382]);
42588str->del(strings[382]);
42589str->del(strings[382]);
42590str->del(strings[382]);
42591str->del(strings[471]);
42592str->del(strings[469]);
42593str->del(strings[470]);
42594str->del(strings[469]);
42595str->del(strings[471]);
42596str->del(strings[469]);
42597strings[7288] = str->add("font");
42598strings[7289] = str->add("font_fallbacks");
42599strings[7290] = str->add("font_size");
42600strings[7291] = str->add("font_source");
42601strings[7292] = str->add("color");
42602strings[7293] = str->add("underline_color");
42603strings[7294] = str->add("underline2_color");
42604strings[7295] = str->add("outline_color");
42605strings[7296] = str->add("shadow_color");
42606strings[7297] = str->add("glow_color");
42607strings[7298] = str->add("glow2_color");
42608strings[7299] = str->add("backing_color");
42609strings[7300] = str->add("strikethrough_color");
42610strings[7301] = str->add("align");
42611strings[7302] = str->add("valign");
42612strings[7303] = str->add("wrap");
42613strings[7304] = str->add("left_margin");
42614strings[7305] = str->add("right_margin");
42615strings[7306] = str->add("underline");
42616strings[7307] = str->add("strikethrough");
42617strings[7308] = str->add("backing");
42618strings[7309] = str->add("style");
42619strings[7310] = str->add("tabstops");
42620strings[7301] = str->add(strings[7301]);
42621strings[7311] = str->add("center");
42622str->del(strings[7301]);
42623str->del(strings[7311]);
42624strings[7292] = str->add(strings[7292]);
42625strings[7312] = str->add("#000");
42626str->del(strings[7292]);
42627str->del(strings[7312]);
42628strings[7309] = str->add(strings[7309]);
42629strings[7313] = str->add("shadow");
42630str->del(strings[7309]);
42631str->del(strings[7313]);
42632strings[7296] = str->add(strings[7296]);
42633strings[7314] = str->add("#ffffff80");
42634str->del(strings[7296]);
42635str->del(strings[7314]);
42636strings[7303] = str->add(strings[7303]);
42637strings[7315] = str->add("word");
42638str->del(strings[7303]);
42639str->del(strings[7315]);
42640strings[7291] = str->add(strings[7291]);
42641strings[469] = str->add(strings[469]);
42642strings[469] = str->add(strings[469]);
42643str->del(strings[7291]);
42644str->del(strings[469]);
42645strings[7290] = str->add(strings[7290]);
42646strings[7316] = str->add("10.000000");
42647str->del(strings[7290]);
42648str->del(strings[7316]);
42649strings[7288] = str->add(strings[7288]);
42650strings[470] = str->add(strings[470]);
42651strings[470] = str->add(strings[470]);
42652str->del(strings[7288]);
42653str->del(strings[470]);
42654strings[470] = str->add(strings[470]);
42655strings[469] = str->add(strings[469]);
42656strings[7309] = str->add(strings[7309]);
42657strings[7317] = str->add("soft_shadow");
42658str->del(strings[7309]);
42659str->del(strings[7317]);
42660strings[7292] = str->add(strings[7292]);
42661strings[7318] = str->add("#fff");
42662str->del(strings[7292]);
42663str->del(strings[7318]);
42664strings[7296] = str->add(strings[7296]);
42665strings[7319] = str->add("#00000020");
42666str->del(strings[7296]);
42667str->del(strings[7319]);
42668strings[7290] = str->add(strings[7290]);
42669strings[7320] = str->add("12.000000");
42670str->del(strings[7290]);
42671str->del(strings[7320]);
42672strings[7288] = str->add(strings[7288]);
42673strings[471] = str->add(strings[471]);
42674str->del(strings[470]);
42675strings[471] = str->add(strings[471]);
42676str->del(strings[7288]);
42677str->del(strings[471]);
42678strings[382] = str->add(strings[382]);
42679strings[382] = str->add(strings[382]);
42680strings[382] = str->add(strings[382]);
42681strings[382] = str->add(strings[382]);
42682strings[382] = str->add(strings[382]);
42683strings[382] = str->add(strings[382]);
42684strings[382] = str->add(strings[382]);
42685strings[382] = str->add(strings[382]);
42686strings[382] = str->add(strings[382]);
42687strings[382] = str->add(strings[382]);
42688strings[382] = str->add(strings[382]);
42689strings[382] = str->add(strings[382]);
42690strings[382] = str->add(strings[382]);
42691strings[382] = str->add(strings[382]);
42692strings[382] = str->add(strings[382]);
42693strings[382] = str->add(strings[382]);
42694strings[382] = str->add(strings[382]);
42695strings[382] = str->add(strings[382]);
42696strings[382] = str->add(strings[382]);
42697strings[382] = str->add(strings[382]);
42698strings[382] = str->add(strings[382]);
42699strings[382] = str->add(strings[382]);
42700str->del(strings[7288]);
42701str->del(strings[7289]);
42702str->del(strings[7290]);
42703str->del(strings[7291]);
42704str->del(strings[7292]);
42705str->del(strings[7293]);
42706str->del(strings[7294]);
42707str->del(strings[7295]);
42708str->del(strings[7296]);
42709str->del(strings[7297]);
42710str->del(strings[7298]);
42711str->del(strings[7299]);
42712str->del(strings[7300]);
42713str->del(strings[7301]);
42714str->del(strings[7302]);
42715str->del(strings[7303]);
42716str->del(strings[7304]);
42717str->del(strings[7305]);
42718str->del(strings[7306]);
42719str->del(strings[7307]);
42720str->del(strings[7308]);
42721str->del(strings[7309]);
42722str->del(strings[7310]);
42723str->del(strings[471]);
42724str->del(strings[469]);
42725str->del(strings[382]);
42726str->del(strings[382]);
42727str->del(strings[382]);
42728str->del(strings[382]);
42729str->del(strings[382]);
42730str->del(strings[382]);
42731str->del(strings[382]);
42732str->del(strings[382]);
42733str->del(strings[382]);
42734str->del(strings[382]);
42735str->del(strings[382]);
42736str->del(strings[382]);
42737str->del(strings[382]);
42738str->del(strings[382]);
42739str->del(strings[382]);
42740str->del(strings[382]);
42741str->del(strings[382]);
42742str->del(strings[382]);
42743str->del(strings[382]);
42744str->del(strings[382]);
42745str->del(strings[382]);
42746str->del(strings[470]);
42747str->del(strings[469]);
42748str->del(strings[382]);
42749strings[1932] = str->add(strings[1932]);
42750strings[7321] = str->add("go_activeb27");
42751strings[7322] = str->add("program,start");
42752strings[7323] = str->add("go_activec27");
42753strings[1932] = str->add(strings[1932]);
42754strings[7324] = str->add("go_activeb3");
42755strings[7322] = str->add(strings[7322]);
42756strings[7325] = str->add("go_activec3");
42757str->del(strings[7249]);
42758str->del(strings[1841]);
42759str->del(strings[7249]);
42760str->del(strings[1841]);
42761str->del(strings[7249]);
42762str->del(strings[1841]);
42763str->del(strings[7249]);
42764str->del(strings[1841]);
42765str->del(strings[7250]);
42766str->del(strings[7250]);
42767str->del(strings[7249]);
42768str->del(strings[1841]);
42769str->del(strings[7249]);
42770str->del(strings[1841]);
42771str->del(strings[7249]);
42772str->del(strings[1841]);
42773str->del(strings[7249]);
42774str->del(strings[1841]);
42775str->del(strings[7249]);
42776str->del(strings[1841]);
42777str->del(strings[7250]);
42778str->del(strings[7250]);
42779str->del(strings[7249]);
42780str->del(strings[1841]);
42781str->del(strings[7249]);
42782str->del(strings[1841]);
42783str->del(strings[7249]);
42784str->del(strings[1841]);
42785str->del(strings[7249]);
42786str->del(strings[1841]);
42787str->del(strings[7250]);
42788str->del(strings[7250]);
42789str->del(strings[7249]);
42790str->del(strings[1841]);
42791str->del(strings[7249]);
42792str->del(strings[1841]);
42793str->del(strings[7249]);
42794str->del(strings[1841]);
42795str->del(strings[7249]);
42796str->del(strings[1841]);
42797str->del(strings[7250]);
42798str->del(strings[7250]);
42799str->del(strings[7249]);
42800str->del(strings[1841]);
42801str->del(strings[7249]);
42802str->del(strings[1841]);
42803str->del(strings[7249]);
42804str->del(strings[1841]);
42805str->del(strings[7249]);
42806str->del(strings[1841]);
42807str->del(strings[7250]);
42808str->del(strings[7250]);
42809str->del(strings[7249]);
42810str->del(strings[1841]);
42811str->del(strings[7249]);
42812str->del(strings[1841]);
42813str->del(strings[7249]);
42814str->del(strings[1841]);
42815str->del(strings[7249]);
42816str->del(strings[1841]);
42817str->del(strings[7250]);
42818str->del(strings[7250]);
42819str->del(strings[7249]);
42820str->del(strings[1841]);
42821str->del(strings[7250]);
42822str->del(strings[7250]);
42823str->del(strings[7250]);
42824str->del(strings[7250]);
42825str->del(strings[7250]);
42826str->del(strings[7250]);
42827str->del(strings[7250]);
42828str->del(strings[7250]);
42829str->del(strings[7250]);
42830str->del(strings[7250]);
42831str->del(strings[7250]);
42832str->del(strings[7250]);
42833str->del(strings[7250]);
42834str->del(strings[7250]);
42835str->del(strings[7250]);
42836str->del(strings[7250]);
42837str->del(strings[7250]);
42838str->del(strings[7250]);
42839str->del(strings[7250]);
42840str->del(strings[7250]);
42841str->del(strings[7250]);
42842str->del(strings[7250]);
42843str->del(strings[7250]);
42844str->del(strings[7250]);
42845str->del(strings[7250]);
42846str->del(strings[1932]);
42847str->del(strings[7321]);
42848str->del(strings[7322]);
42849str->del(strings[7323]);
42850str->del(strings[1932]);
42851str->del(strings[7324]);
42852str->del(strings[7322]);
42853str->del(strings[7325]);
42854strings[7326] = str->add("e,action,mouse,move");
42855strings[7327] = str->add("e");
42856strings[7326] = str->add(strings[7326]);
42857strings[7327] = str->add(strings[7327]);
42858str->del(strings[7326]);
42859str->del(strings[7327]);
42860str->del(strings[7326]);
42861str->del(strings[7327]);
42862strings[7328] = str->add("font");
42863strings[7329] = str->add("font_fallbacks");
42864strings[7330] = str->add("font_size");
42865strings[7331] = str->add("font_source");
42866strings[7332] = str->add("color");
42867strings[7333] = str->add("underline_color");
42868strings[7334] = str->add("underline2_color");
42869strings[7335] = str->add("outline_color");
42870strings[7336] = str->add("shadow_color");
42871strings[7337] = str->add("glow_color");
42872strings[7338] = str->add("glow2_color");
42873strings[7339] = str->add("backing_color");
42874strings[7340] = str->add("strikethrough_color");
42875strings[7341] = str->add("align");
42876strings[7342] = str->add("valign");
42877strings[7343] = str->add("wrap");
42878strings[7344] = str->add("left_margin");
42879strings[7345] = str->add("right_margin");
42880strings[7346] = str->add("underline");
42881strings[7347] = str->add("strikethrough");
42882strings[7348] = str->add("backing");
42883strings[7349] = str->add("style");
42884strings[7350] = str->add("tabstops");
42885strings[7341] = str->add(strings[7341]);
42886strings[7351] = str->add("center");
42887str->del(strings[7341]);
42888str->del(strings[7351]);
42889strings[7332] = str->add(strings[7332]);
42890strings[7352] = str->add("#000");
42891str->del(strings[7332]);
42892str->del(strings[7352]);
42893strings[7349] = str->add(strings[7349]);
42894strings[7353] = str->add("shadow");
42895str->del(strings[7349]);
42896str->del(strings[7353]);
42897strings[7336] = str->add(strings[7336]);
42898strings[7354] = str->add("#ffffff80");
42899str->del(strings[7336]);
42900str->del(strings[7354]);
42901strings[7343] = str->add(strings[7343]);
42902strings[7355] = str->add("word");
42903str->del(strings[7343]);
42904str->del(strings[7355]);
42905strings[7331] = str->add(strings[7331]);
42906strings[469] = str->add(strings[469]);
42907strings[469] = str->add(strings[469]);
42908str->del(strings[7331]);
42909str->del(strings[469]);
42910strings[7330] = str->add(strings[7330]);
42911strings[7356] = str->add("10.000000");
42912str->del(strings[7330]);
42913str->del(strings[7356]);
42914strings[7328] = str->add(strings[7328]);
42915strings[470] = str->add(strings[470]);
42916strings[470] = str->add(strings[470]);
42917str->del(strings[7328]);
42918str->del(strings[470]);
42919strings[470] = str->add(strings[470]);
42920strings[469] = str->add(strings[469]);
42921strings[7349] = str->add(strings[7349]);
42922strings[7357] = str->add("soft_shadow");
42923str->del(strings[7349]);
42924str->del(strings[7357]);
42925strings[7332] = str->add(strings[7332]);
42926strings[7358] = str->add("#fff");
42927str->del(strings[7332]);
42928str->del(strings[7358]);
42929strings[7336] = str->add(strings[7336]);
42930strings[7359] = str->add("#00000020");
42931str->del(strings[7336]);
42932str->del(strings[7359]);
42933strings[7330] = str->add(strings[7330]);
42934strings[7360] = str->add("12.000000");
42935str->del(strings[7330]);
42936str->del(strings[7360]);
42937strings[7328] = str->add(strings[7328]);
42938strings[471] = str->add(strings[471]);
42939str->del(strings[470]);
42940strings[471] = str->add(strings[471]);
42941str->del(strings[7328]);
42942str->del(strings[471]);
42943strings[382] = str->add(strings[382]);
42944strings[382] = str->add(strings[382]);
42945strings[382] = str->add(strings[382]);
42946strings[382] = str->add(strings[382]);
42947strings[382] = str->add(strings[382]);
42948strings[382] = str->add(strings[382]);
42949strings[382] = str->add(strings[382]);
42950strings[382] = str->add(strings[382]);
42951strings[382] = str->add(strings[382]);
42952strings[382] = str->add(strings[382]);
42953strings[382] = str->add(strings[382]);
42954strings[382] = str->add(strings[382]);
42955strings[382] = str->add(strings[382]);
42956strings[382] = str->add(strings[382]);
42957strings[382] = str->add(strings[382]);
42958strings[382] = str->add(strings[382]);
42959strings[382] = str->add(strings[382]);
42960strings[382] = str->add(strings[382]);
42961strings[382] = str->add(strings[382]);
42962strings[382] = str->add(strings[382]);
42963strings[382] = str->add(strings[382]);
42964strings[382] = str->add(strings[382]);
42965str->del(strings[471]);
42966str->del(strings[469]);
42967str->del(strings[382]);
42968str->del(strings[382]);
42969str->del(strings[382]);
42970str->del(strings[382]);
42971str->del(strings[382]);
42972str->del(strings[382]);
42973str->del(strings[382]);
42974str->del(strings[382]);
42975str->del(strings[382]);
42976str->del(strings[382]);
42977str->del(strings[382]);
42978str->del(strings[382]);
42979str->del(strings[382]);
42980str->del(strings[382]);
42981str->del(strings[382]);
42982str->del(strings[382]);
42983str->del(strings[382]);
42984str->del(strings[382]);
42985str->del(strings[382]);
42986str->del(strings[382]);
42987str->del(strings[382]);
42988str->del(strings[470]);
42989str->del(strings[469]);
42990str->del(strings[382]);
42991str->del(strings[7328]);
42992str->del(strings[7329]);
42993str->del(strings[7330]);
42994str->del(strings[7331]);
42995str->del(strings[7332]);
42996str->del(strings[7333]);
42997str->del(strings[7334]);
42998str->del(strings[7335]);
42999str->del(strings[7336]);
43000str->del(strings[7337]);
43001str->del(strings[7338]);
43002str->del(strings[7339]);
43003str->del(strings[7340]);
43004str->del(strings[7341]);
43005str->del(strings[7342]);
43006str->del(strings[7343]);
43007str->del(strings[7344]);
43008str->del(strings[7345]);
43009str->del(strings[7346]);
43010str->del(strings[7347]);
43011str->del(strings[7348]);
43012str->del(strings[7349]);
43013str->del(strings[7350]);
43014str->del(strings[7]);
43015str->del(strings[2343]);
43016strings[7] = str->add(strings[7]);
43017strings[2353] = str->add(strings[2353]);
43018strings[7361] = str->add("e,action,mouse,move");
43019strings[7362] = str->add("e");
43020strings[7361] = str->add(strings[7361]);
43021strings[7362] = str->add(strings[7362]);
43022strings[7361] = str->add(strings[7361]);
43023strings[7362] = str->add(strings[7362]);
43024strings[7361] = str->add(strings[7361]);
43025strings[7362] = str->add(strings[7362]);
43026str->del(strings[7361]);
43027str->del(strings[7362]);
43028str->del(strings[7361]);
43029str->del(strings[7362]);
43030str->del(strings[7361]);
43031str->del(strings[7362]);
43032str->del(strings[7361]);
43033str->del(strings[7362]);
43034strings[7363] = str->add("e,action,mouse,move");
43035strings[7364] = str->add("e");
43036str->del(strings[7363]);
43037str->del(strings[7364]);
43038strings[1932] = str->add(strings[1932]);
43039strings[7365] = str->add("go_activec24");
43040strings[7366] = str->add("program,start");
43041strings[7367] = str->add("go_activeb24");
43042strings[1932] = str->add(strings[1932]);
43043strings[7368] = str->add("go_activec6");
43044strings[7366] = str->add(strings[7366]);
43045strings[7369] = str->add("go_activeb6");
43046strings[1932] = str->add(strings[1932]);
43047strings[7370] = str->add("unsel");
43048str->del(strings[1932]);
43049str->del(strings[7365]);
43050str->del(strings[7366]);
43051str->del(strings[7367]);
43052str->del(strings[1932]);
43053str->del(strings[7368]);
43054str->del(strings[7366]);
43055str->del(strings[7369]);
43056str->del(strings[1932]);
43057str->del(strings[7370]);
43058strings[7371] = str->add("e,action,mouse,move");
43059strings[7372] = str->add("e");
43060strings[7371] = str->add(strings[7371]);
43061strings[7372] = str->add(strings[7372]);
43062str->del(strings[7371]);
43063str->del(strings[7372]);
43064str->del(strings[7371]);
43065str->del(strings[7372]);
43066strings[7373] = str->add("e,action,mouse,move");
43067strings[7374] = str->add("e");
43068str->del(strings[7373]);
43069str->del(strings[7374]);
43070strings[7375] = str->add("e,action,mouse,move");
43071strings[7376] = str->add("e");
43072str->del(strings[7375]);
43073str->del(strings[7376]);
43074str->del(strings[7]);
43075str->del(strings[2353]);
43076strings[7] = str->add(strings[7]);
43077strings[2363] = str->add(strings[2363]);
43078strings[7377] = str->add("e,action,mouse,move");
43079strings[7378] = str->add("e");
43080str->del(strings[7377]);
43081str->del(strings[7378]);
43082strings[1932] = str->add(strings[1932]);
43083strings[1847] = str->add(strings[1847]);
43084strings[7379] = str->add("program,start");
43085strings[1848] = str->add(strings[1848]);
43086strings[1932] = str->add(strings[1932]);
43087strings[1848] = str->add(strings[1848]);
43088strings[7379] = str->add(strings[7379]);
43089strings[1847] = str->add(strings[1847]);
43090str->del(strings[1932]);
43091str->del(strings[1847]);
43092str->del(strings[7379]);
43093str->del(strings[1848]);
43094str->del(strings[1932]);
43095str->del(strings[1848]);
43096str->del(strings[7379]);
43097str->del(strings[1847]);
43098str->del(strings[7]);
43099str->del(strings[2363]);
43100strings[7] = str->add(strings[7]);
43101strings[2383] = str->add(strings[2383]);
43102strings[7380] = str->add("e,action,mouse,move");
43103strings[7381] = str->add("e");
43104str->del(strings[7380]);
43105str->del(strings[7381]);
43106strings[7382] = str->add("e,action,mouse,move");
43107strings[7383] = str->add("e");
43108str->del(strings[7382]);
43109str->del(strings[7383]);
43110strings[1932] = str->add(strings[1932]);
43111strings[7384] = str->add("sel");
43112str->del(strings[1932]);
43113str->del(strings[7384]);
43114strings[7385] = str->add("e,action,mouse,move");
43115strings[7386] = str->add("e");
43116strings[7385] = str->add(strings[7385]);
43117strings[7386] = str->add(strings[7386]);
43118str->del(strings[7385]);
43119str->del(strings[7386]);
43120str->del(strings[7385]);
43121str->del(strings[7386]);
43122strings[7387] = str->add("e,action,mouse,move");
43123strings[7388] = str->add("e");
43124str->del(strings[7387]);
43125str->del(strings[7388]);
43126strings[7389] = str->add("e,action,mouse,move");
43127strings[7390] = str->add("e");
43128str->del(strings[7389]);
43129str->del(strings[7390]);
43130strings[1932] = str->add(strings[1932]);
43131strings[7391] = str->add("go_activec23");
43132strings[7392] = str->add("program,start");
43133strings[7393] = str->add("go_activeb23");
43134strings[1932] = str->add(strings[1932]);
43135strings[7394] = str->add("go_activec7");
43136strings[7392] = str->add(strings[7392]);
43137strings[7395] = str->add("go_activeb7");
43138strings[1932] = str->add(strings[1932]);
43139strings[7396] = str->add("go_activeb26");
43140strings[7392] = str->add(strings[7392]);
43141strings[7397] = str->add("go_activec26");
43142strings[1932] = str->add(strings[1932]);
43143strings[7398] = str->add("go_activeb4");
43144strings[7392] = str->add(strings[7392]);
43145strings[7399] = str->add("go_activec4");
43146strings[1932] = str->add(strings[1932]);
43147strings[7400] = str->add("sel");
43148str->del(strings[1932]);
43149str->del(strings[7391]);
43150str->del(strings[7392]);
43151str->del(strings[7393]);
43152str->del(strings[1932]);
43153str->del(strings[7394]);
43154str->del(strings[7392]);
43155str->del(strings[7395]);
43156str->del(strings[1932]);
43157str->del(strings[7396]);
43158str->del(strings[7392]);
43159str->del(strings[7397]);
43160str->del(strings[1932]);
43161str->del(strings[7398]);
43162str->del(strings[7392]);
43163str->del(strings[7399]);
43164str->del(strings[1932]);
43165str->del(strings[7400]);
43166str->del(strings[7]);
43167str->del(strings[2383]);
43168strings[7] = str->add(strings[7]);
43169strings[2404] = str->add(strings[2404]);
43170strings[7401] = str->add("e,action,mouse,move");
43171strings[7402] = str->add("e");
43172strings[7401] = str->add(strings[7401]);
43173strings[7402] = str->add(strings[7402]);
43174str->del(strings[7401]);
43175str->del(strings[7402]);
43176str->del(strings[7401]);
43177str->del(strings[7402]);
43178strings[7403] = str->add("e,action,mouse,move");
43179strings[7404] = str->add("e");
43180str->del(strings[7403]);
43181str->del(strings[7404]);
43182strings[7405] = str->add("e,action,mouse,move");
43183strings[7406] = str->add("e");
43184str->del(strings[7405]);
43185str->del(strings[7406]);
43186strings[1932] = str->add(strings[1932]);
43187strings[7407] = str->add("unsel");
43188str->del(strings[1932]);
43189str->del(strings[7407]);
43190strings[7408] = str->add("e,action,mouse,move");
43191strings[7409] = str->add("e");
43192strings[7408] = str->add(strings[7408]);
43193strings[7409] = str->add(strings[7409]);
43194str->del(strings[7408]);
43195str->del(strings[7409]);
43196str->del(strings[7408]);
43197str->del(strings[7409]);
43198strings[7410] = str->add("e,action,mouse,move");
43199strings[7411] = str->add("e");
43200str->del(strings[7410]);
43201str->del(strings[7411]);
43202strings[7412] = str->add("e,action,mouse,move");
43203strings[7413] = str->add("e");
43204str->del(strings[7412]);
43205str->del(strings[7413]);
43206str->del(strings[7]);
43207str->del(strings[2404]);
43208strings[7] = str->add(strings[7]);
43209strings[2416] = str->add(strings[2416]);
43210strings[7414] = str->add("e,action,mouse,move");
43211strings[7415] = str->add("e");
43212str->del(strings[7414]);
43213str->del(strings[7415]);
43214strings[7416] = str->add("e,action,mouse,move");
43215strings[7417] = str->add("e");
43216str->del(strings[7416]);
43217str->del(strings[7417]);
43218strings[7418] = str->add("e,action,mouse,move");
43219strings[7419] = str->add("e");
43220str->del(strings[7418]);
43221str->del(strings[7419]);
43222strings[7420] = str->add("e,action,mouse,move");
43223strings[7421] = str->add("e");
43224strings[7422] = str->add("e,state,unselected");
43225strings[7421] = str->add(strings[7421]);
43226strings[7422] = str->add(strings[7422]);
43227strings[7421] = str->add(strings[7421]);
43228strings[7422] = str->add(strings[7422]);
43229strings[7421] = str->add(strings[7421]);
43230strings[7422] = str->add(strings[7422]);
43231strings[7421] = str->add(strings[7421]);
43232strings[7422] = str->add(strings[7422]);
43233strings[7421] = str->add(strings[7421]);
43234strings[7422] = str->add(strings[7422]);
43235strings[7421] = str->add(strings[7421]);
43236strings[7423] = str->add("e,state,selected");
43237strings[7421] = str->add(strings[7421]);
43238strings[7423] = str->add(strings[7423]);
43239strings[7421] = str->add(strings[7421]);
43240strings[7423] = str->add(strings[7423]);
43241strings[7421] = str->add(strings[7421]);
43242strings[7423] = str->add(strings[7423]);
43243strings[7421] = str->add(strings[7421]);
43244strings[7423] = str->add(strings[7423]);
43245strings[7421] = str->add(strings[7421]);
43246strings[7420] = str->add(strings[7420]);
43247strings[7421] = str->add(strings[7421]);
43248str->del(strings[7420]);
43249str->del(strings[7421]);
43250strings[7424] = str->add("program,start");
43251strings[7425] = str->add("unsel");
43252str->del(strings[7422]);
43253str->del(strings[7421]);
43254str->del(strings[7422]);
43255str->del(strings[7421]);
43256strings[7424] = str->add(strings[7424]);
43257strings[7425] = str->add(strings[7425]);
43258str->del(strings[7422]);
43259str->del(strings[7421]);
43260strings[7424] = str->add(strings[7424]);
43261strings[7425] = str->add(strings[7425]);
43262strings[1932] = str->add(strings[1932]);
43263strings[7425] = str->add(strings[7425]);
43264str->del(strings[7422]);
43265str->del(strings[7421]);
43266str->del(strings[7422]);
43267str->del(strings[7421]);
43268str->del(strings[7422]);
43269str->del(strings[7421]);
43270strings[7424] = str->add(strings[7424]);
43271strings[7426] = str->add("sel");
43272str->del(strings[7423]);
43273str->del(strings[7421]);
43274str->del(strings[7423]);
43275str->del(strings[7421]);
43276strings[7424] = str->add(strings[7424]);
43277strings[7426] = str->add(strings[7426]);
43278str->del(strings[7423]);
43279str->del(strings[7421]);
43280str->del(strings[7423]);
43281str->del(strings[7421]);
43282str->del(strings[7423]);
43283str->del(strings[7421]);
43284str->del(strings[7420]);
43285str->del(strings[7421]);
43286str->del(strings[7424]);
43287str->del(strings[7425]);
43288str->del(strings[7424]);
43289str->del(strings[7425]);
43290str->del(strings[7424]);
43291str->del(strings[7425]);
43292str->del(strings[1932]);
43293str->del(strings[7425]);
43294str->del(strings[7424]);
43295str->del(strings[7426]);
43296str->del(strings[7424]);
43297str->del(strings[7426]);
43298str->del(strings[64]);
43299str->del(strings[3021]);
43300strings[64] = str->add(strings[64]);
43301strings[2913] = str->add(strings[2913]);
43302strings[7427] = str->add("e,action,mouse,move");
43303strings[7428] = str->add("e");
43304str->del(strings[7427]);
43305str->del(strings[7428]);
43306strings[7429] = str->add("e,action,mouse,move");
43307strings[7430] = str->add("e");
43308str->del(strings[7429]);
43309str->del(strings[7430]);
43310str->del(strings[7]);
43311str->del(strings[2416]);
43312strings[7] = str->add(strings[7]);
43313strings[2426] = str->add(strings[2426]);
43314strings[7431] = str->add("e,action,mouse,move");
43315strings[7432] = str->add("e");
43316strings[7433] = str->add("e,state,unselected");
43317strings[7432] = str->add(strings[7432]);
43318strings[7433] = str->add(strings[7433]);
43319strings[7432] = str->add(strings[7432]);
43320strings[7433] = str->add(strings[7433]);
43321strings[7432] = str->add(strings[7432]);
43322strings[7433] = str->add(strings[7433]);
43323strings[7432] = str->add(strings[7432]);
43324strings[7433] = str->add(strings[7433]);
43325strings[7432] = str->add(strings[7432]);
43326strings[7434] = str->add("e,state,selected");
43327strings[7432] = str->add(strings[7432]);
43328strings[7434] = str->add(strings[7434]);
43329strings[7432] = str->add(strings[7432]);
43330strings[7434] = str->add(strings[7434]);
43331strings[7432] = str->add(strings[7432]);
43332strings[7434] = str->add(strings[7434]);
43333strings[7432] = str->add(strings[7432]);
43334strings[7434] = str->add(strings[7434]);
43335strings[7432] = str->add(strings[7432]);
43336strings[7431] = str->add(strings[7431]);
43337strings[7432] = str->add(strings[7432]);
43338str->del(strings[7431]);
43339str->del(strings[7432]);
43340strings[1932] = str->add(strings[1932]);
43341strings[7435] = str->add("sel");
43342strings[7436] = str->add("program,start");
43343strings[7437] = str->add("unsel");
43344str->del(strings[7433]);
43345str->del(strings[7432]);
43346str->del(strings[7433]);
43347str->del(strings[7432]);
43348strings[1932] = str->add(strings[1932]);
43349strings[7435] = str->add(strings[7435]);
43350strings[7436] = str->add(strings[7436]);
43351strings[7437] = str->add(strings[7437]);
43352str->del(strings[7433]);
43353str->del(strings[7432]);
43354str->del(strings[7433]);
43355str->del(strings[7432]);
43356str->del(strings[7433]);
43357str->del(strings[7432]);
43358strings[7436] = str->add(strings[7436]);
43359strings[7435] = str->add(strings[7435]);
43360str->del(strings[7434]);
43361str->del(strings[7432]);
43362str->del(strings[7434]);
43363str->del(strings[7432]);
43364strings[7436] = str->add(strings[7436]);
43365strings[7435] = str->add(strings[7435]);
43366str->del(strings[7434]);
43367str->del(strings[7432]);
43368str->del(strings[7434]);
43369str->del(strings[7432]);
43370str->del(strings[7434]);
43371str->del(strings[7432]);
43372str->del(strings[7431]);
43373str->del(strings[7432]);
43374str->del(strings[1932]);
43375str->del(strings[7435]);
43376str->del(strings[7436]);
43377str->del(strings[7437]);
43378str->del(strings[1932]);
43379str->del(strings[7435]);
43380str->del(strings[7436]);
43381str->del(strings[7437]);
43382str->del(strings[7436]);
43383str->del(strings[7435]);
43384str->del(strings[7436]);
43385str->del(strings[7435]);
43386strings[7438] = str->add("e,action,mouse,move");
43387strings[7439] = str->add("e");
43388str->del(strings[7438]);
43389str->del(strings[7439]);
43390strings[7440] = str->add("e,action,mouse,move");
43391strings[7441] = str->add("e");
43392str->del(strings[7440]);
43393str->del(strings[7441]);
43394strings[7442] = str->add("e,action,mouse,move");
43395strings[7443] = str->add("e");
43396strings[7442] = str->add(strings[7442]);
43397strings[7443] = str->add(strings[7443]);
43398str->del(strings[7442]);
43399str->del(strings[7443]);
43400str->del(strings[7442]);
43401str->del(strings[7443]);
43402strings[7444] = str->add("e,action,mouse,move");
43403strings[7445] = str->add("e");
43404str->del(strings[7444]);
43405str->del(strings[7445]);
43406strings[7446] = str->add("e,action,mouse,move");
43407strings[7447] = str->add("e");
43408str->del(strings[7446]);
43409str->del(strings[7447]);
43410str->del(strings[7]);
43411str->del(strings[2426]);
43412strings[7] = str->add(strings[7]);
43413strings[2435] = str->add(strings[2435]);
43414strings[7448] = str->add("e,action,mouse,move");
43415strings[7449] = str->add("e");
43416strings[7450] = str->add("e,state,unselected");
43417strings[7449] = str->add(strings[7449]);
43418strings[7450] = str->add(strings[7450]);
43419strings[7449] = str->add(strings[7449]);
43420strings[7450] = str->add(strings[7450]);
43421strings[7449] = str->add(strings[7449]);
43422strings[7450] = str->add(strings[7450]);
43423strings[7449] = str->add(strings[7449]);
43424strings[7450] = str->add(strings[7450]);
43425strings[7449] = str->add(strings[7449]);
43426strings[7451] = str->add("e,state,selected");
43427strings[7449] = str->add(strings[7449]);
43428strings[7451] = str->add(strings[7451]);
43429strings[7449] = str->add(strings[7449]);
43430strings[7451] = str->add(strings[7451]);
43431strings[7449] = str->add(strings[7449]);
43432strings[7451] = str->add(strings[7451]);
43433strings[7449] = str->add(strings[7449]);
43434strings[7451] = str->add(strings[7451]);
43435strings[7449] = str->add(strings[7449]);
43436strings[7448] = str->add(strings[7448]);
43437strings[7449] = str->add(strings[7449]);
43438str->del(strings[7448]);
43439str->del(strings[7449]);
43440strings[1932] = str->add(strings[1932]);
43441strings[7452] = str->add("sel");
43442strings[7453] = str->add("program,start");
43443strings[7454] = str->add("unsel");
43444str->del(strings[7450]);
43445str->del(strings[7449]);
43446str->del(strings[7450]);
43447str->del(strings[7449]);
43448strings[1932] = str->add(strings[1932]);
43449strings[7452] = str->add(strings[7452]);
43450strings[7453] = str->add(strings[7453]);
43451strings[7454] = str->add(strings[7454]);
43452str->del(strings[7450]);
43453str->del(strings[7449]);
43454str->del(strings[7450]);
43455str->del(strings[7449]);
43456str->del(strings[7450]);
43457str->del(strings[7449]);
43458strings[7453] = str->add(strings[7453]);
43459strings[7452] = str->add(strings[7452]);
43460str->del(strings[7451]);
43461str->del(strings[7449]);
43462str->del(strings[7451]);
43463str->del(strings[7449]);
43464strings[7453] = str->add(strings[7453]);
43465strings[7452] = str->add(strings[7452]);
43466str->del(strings[7451]);
43467str->del(strings[7449]);
43468str->del(strings[7451]);
43469str->del(strings[7449]);
43470str->del(strings[7451]);
43471str->del(strings[7449]);
43472str->del(strings[7448]);
43473str->del(strings[7449]);
43474str->del(strings[1932]);
43475str->del(strings[7452]);
43476str->del(strings[7453]);
43477str->del(strings[7454]);
43478str->del(strings[1932]);
43479str->del(strings[7452]);
43480str->del(strings[7453]);
43481str->del(strings[7454]);
43482str->del(strings[7453]);
43483str->del(strings[7452]);
43484str->del(strings[7453]);
43485str->del(strings[7452]);
43486strings[7455] = str->add("e,action,mouse,move");
43487strings[7456] = str->add("e");
43488str->del(strings[7455]);
43489str->del(strings[7456]);
43490strings[7457] = str->add("e,action,mouse,move");
43491strings[7458] = str->add("e");
43492strings[7459] = str->add("e,state,unselected");
43493strings[7458] = str->add(strings[7458]);
43494strings[7459] = str->add(strings[7459]);
43495strings[7458] = str->add(strings[7458]);
43496strings[7459] = str->add(strings[7459]);
43497strings[7458] = str->add(strings[7458]);
43498strings[7459] = str->add(strings[7459]);
43499strings[7458] = str->add(strings[7458]);
43500strings[7459] = str->add(strings[7459]);
43501strings[7458] = str->add(strings[7458]);
43502strings[7460] = str->add("e,state,selected");
43503strings[7458] = str->add(strings[7458]);
43504strings[7460] = str->add(strings[7460]);
43505strings[7458] = str->add(strings[7458]);
43506strings[7460] = str->add(strings[7460]);
43507strings[7458] = str->add(strings[7458]);
43508strings[7460] = str->add(strings[7460]);
43509strings[7458] = str->add(strings[7458]);
43510strings[7460] = str->add(strings[7460]);
43511strings[7458] = str->add(strings[7458]);
43512str->del(strings[7457]);
43513str->del(strings[7458]);
43514strings[1932] = str->add(strings[1932]);
43515strings[7461] = str->add("sel");
43516strings[7462] = str->add("program,start");
43517strings[7463] = str->add("unsel");
43518str->del(strings[7459]);
43519str->del(strings[7458]);
43520str->del(strings[7459]);
43521str->del(strings[7458]);
43522strings[1932] = str->add(strings[1932]);
43523strings[7461] = str->add(strings[7461]);
43524strings[7462] = str->add(strings[7462]);
43525strings[7463] = str->add(strings[7463]);
43526str->del(strings[7459]);
43527str->del(strings[7458]);
43528str->del(strings[7459]);
43529str->del(strings[7458]);
43530str->del(strings[7459]);
43531str->del(strings[7458]);
43532strings[7462] = str->add(strings[7462]);
43533strings[7461] = str->add(strings[7461]);
43534str->del(strings[7460]);
43535str->del(strings[7458]);
43536str->del(strings[7460]);
43537str->del(strings[7458]);
43538strings[7462] = str->add(strings[7462]);
43539strings[7461] = str->add(strings[7461]);
43540str->del(strings[7460]);
43541str->del(strings[7458]);
43542str->del(strings[7460]);
43543str->del(strings[7458]);
43544str->del(strings[7460]);
43545str->del(strings[7458]);
43546str->del(strings[1932]);
43547str->del(strings[7461]);
43548str->del(strings[7462]);
43549str->del(strings[7463]);
43550str->del(strings[1932]);
43551str->del(strings[7461]);
43552str->del(strings[7462]);
43553str->del(strings[7463]);
43554str->del(strings[7462]);
43555str->del(strings[7461]);
43556str->del(strings[7462]);
43557str->del(strings[7461]);
43558strings[1932] = str->add(strings[1932]);
43559strings[7464] = str->add("go_activec22");
43560strings[7465] = str->add("program,start");
43561strings[7466] = str->add("go_activeb22");
43562strings[1932] = str->add(strings[1932]);
43563strings[7467] = str->add("go_activec8");
43564strings[7465] = str->add(strings[7465]);
43565strings[7468] = str->add("go_activeb8");
43566strings[1932] = str->add(strings[1932]);
43567strings[7469] = str->add("go_activeb25");
43568strings[7465] = str->add(strings[7465]);
43569strings[7470] = str->add("go_activec25");
43570strings[1932] = str->add(strings[1932]);
43571strings[7471] = str->add("go_activeb5");
43572strings[7465] = str->add(strings[7465]);
43573strings[7472] = str->add("go_activec5");
43574strings[1932] = str->add(strings[1932]);
43575strings[7473] = str->add("e_out");
43576strings[1932] = str->add(strings[1932]);
43577strings[7474] = str->add("unsel");
43578str->del(strings[1932]);
43579str->del(strings[7464]);
43580str->del(strings[7465]);
43581str->del(strings[7466]);
43582str->del(strings[1932]);
43583str->del(strings[7467]);
43584str->del(strings[7465]);
43585str->del(strings[7468]);
43586str->del(strings[1932]);
43587str->del(strings[7469]);
43588str->del(strings[7465]);
43589str->del(strings[7470]);
43590str->del(strings[1932]);
43591str->del(strings[7471]);
43592str->del(strings[7465]);
43593str->del(strings[7472]);
43594str->del(strings[1932]);
43595str->del(strings[7473]);
43596str->del(strings[1932]);
43597str->del(strings[7474]);
43598strings[7475] = str->add("e,action,mouse,move");
43599strings[7476] = str->add("e");
43600strings[7475] = str->add(strings[7475]);
43601strings[7476] = str->add(strings[7476]);
43602str->del(strings[7475]);
43603str->del(strings[7476]);
43604str->del(strings[7475]);
43605str->del(strings[7476]);
43606strings[7477] = str->add("e,action,mouse,move");
43607strings[7478] = str->add("e");
43608str->del(strings[7477]);
43609str->del(strings[7478]);
43610strings[7479] = str->add("e,action,mouse,move");
43611strings[7480] = str->add("e");
43612str->del(strings[7479]);
43613str->del(strings[7480]);
43614strings[1932] = str->add(strings[1932]);
43615strings[7481] = str->add("unsel");
43616str->del(strings[1932]);
43617str->del(strings[7481]);
43618str->del(strings[7]);
43619str->del(strings[2435]);
43620strings[7] = str->add(strings[7]);
43621strings[2448] = str->add(strings[2448]);
43622strings[7482] = str->add("e,action,mouse,move");
43623strings[7483] = str->add("e");
43624strings[7484] = str->add("e,state,unselected");
43625strings[7483] = str->add(strings[7483]);
43626strings[7484] = str->add(strings[7484]);
43627strings[7483] = str->add(strings[7483]);
43628strings[7484] = str->add(strings[7484]);
43629strings[7483] = str->add(strings[7483]);
43630strings[7484] = str->add(strings[7484]);
43631strings[7483] = str->add(strings[7483]);
43632strings[7484] = str->add(strings[7484]);
43633strings[7483] = str->add(strings[7483]);
43634strings[7485] = str->add("e,state,selected");
43635strings[7483] = str->add(strings[7483]);
43636strings[7485] = str->add(strings[7485]);
43637strings[7483] = str->add(strings[7483]);
43638strings[7485] = str->add(strings[7485]);
43639strings[7483] = str->add(strings[7483]);
43640strings[7485] = str->add(strings[7485]);
43641strings[7483] = str->add(strings[7483]);
43642strings[7485] = str->add(strings[7485]);
43643strings[7483] = str->add(strings[7483]);
43644strings[7482] = str->add(strings[7482]);
43645strings[7483] = str->add(strings[7483]);
43646str->del(strings[7482]);
43647str->del(strings[7483]);
43648strings[1932] = str->add(strings[1932]);
43649strings[7486] = str->add("sel");
43650strings[7487] = str->add("program,start");
43651strings[7488] = str->add("unsel");
43652str->del(strings[7484]);
43653str->del(strings[7483]);
43654str->del(strings[7484]);
43655str->del(strings[7483]);
43656strings[1932] = str->add(strings[1932]);
43657strings[7486] = str->add(strings[7486]);
43658strings[7487] = str->add(strings[7487]);
43659strings[7488] = str->add(strings[7488]);
43660str->del(strings[7484]);
43661str->del(strings[7483]);
43662str->del(strings[7484]);
43663str->del(strings[7483]);
43664str->del(strings[7484]);
43665str->del(strings[7483]);
43666strings[7487] = str->add(strings[7487]);
43667strings[7486] = str->add(strings[7486]);
43668str->del(strings[7485]);
43669str->del(strings[7483]);
43670str->del(strings[7485]);
43671str->del(strings[7483]);
43672strings[7487] = str->add(strings[7487]);
43673strings[7486] = str->add(strings[7486]);
43674str->del(strings[7485]);
43675str->del(strings[7483]);
43676str->del(strings[7485]);
43677str->del(strings[7483]);
43678str->del(strings[7485]);
43679str->del(strings[7483]);
43680str->del(strings[7482]);
43681str->del(strings[7483]);
43682str->del(strings[1932]);
43683str->del(strings[7486]);
43684str->del(strings[7487]);
43685str->del(strings[7488]);
43686str->del(strings[1932]);
43687str->del(strings[7486]);
43688str->del(strings[7487]);
43689str->del(strings[7488]);
43690str->del(strings[7487]);
43691str->del(strings[7486]);
43692str->del(strings[7487]);
43693str->del(strings[7486]);
43694strings[7489] = str->add("e,action,mouse,move");
43695strings[7490] = str->add("e");
43696str->del(strings[7489]);
43697str->del(strings[7490]);
43698strings[7491] = str->add("e,action,mouse,move");
43699strings[7492] = str->add("e");
43700str->del(strings[7491]);
43701str->del(strings[7492]);
43702strings[7493] = str->add("e,action,mouse,move");
43703strings[7494] = str->add("e");
43704str->del(strings[7493]);
43705str->del(strings[7494]);
43706strings[7495] = str->add("e,action,mouse,move");
43707strings[7496] = str->add("e");
43708str->del(strings[7495]);
43709str->del(strings[7496]);
43710strings[7497] = str->add("e,action,mouse,move");
43711strings[7498] = str->add("e");
43712str->del(strings[7497]);
43713str->del(strings[7498]);
43714strings[7499] = str->add("e,action,mouse,move");
43715strings[7500] = str->add("e");
43716str->del(strings[7499]);
43717str->del(strings[7500]);
43718strings[7501] = str->add("e,action,mouse,move");
43719strings[7502] = str->add("e");
43720str->del(strings[7501]);
43721str->del(strings[7502]);
43722strings[1932] = str->add(strings[1932]);
43723strings[7503] = str->add("go_activeb24");
43724strings[7504] = str->add("program,start");
43725strings[7505] = str->add("go_activec24");
43726strings[1932] = str->add(strings[1932]);
43727strings[7506] = str->add("go_activeb6");
43728strings[7504] = str->add(strings[7504]);
43729strings[7507] = str->add("go_activec6");
43730strings[1932] = str->add(strings[1932]);
43731strings[7508] = str->add("unsel");
43732strings[1932] = str->add(strings[1932]);
43733strings[7508] = str->add(strings[7508]);
43734str->del(strings[1932]);
43735str->del(strings[7503]);
43736str->del(strings[7504]);
43737str->del(strings[7505]);
43738str->del(strings[1932]);
43739str->del(strings[7506]);
43740str->del(strings[7504]);
43741str->del(strings[7507]);
43742str->del(strings[1932]);
43743str->del(strings[7508]);
43744str->del(strings[1932]);
43745str->del(strings[7508]);
43746str->del(strings[7]);
43747str->del(strings[2448]);
43748strings[7] = str->add(strings[7]);
43749strings[2466] = str->add(strings[2466]);
43750strings[7509] = str->add("e,action,mouse,move");
43751strings[7510] = str->add("e");
43752strings[7509] = str->add(strings[7509]);
43753strings[7510] = str->add(strings[7510]);
43754str->del(strings[7509]);
43755str->del(strings[7510]);
43756str->del(strings[7509]);
43757str->del(strings[7510]);
43758strings[7511] = str->add("e,action,mouse,move");
43759strings[7512] = str->add("e");
43760str->del(strings[7511]);
43761str->del(strings[7512]);
43762strings[7513] = str->add("e,action,mouse,move");
43763strings[7514] = str->add("e");
43764str->del(strings[7513]);
43765str->del(strings[7514]);
43766strings[7515] = str->add("e,action,mouse,move");
43767strings[7516] = str->add("e");
43768strings[7515] = str->add(strings[7515]);
43769strings[7516] = str->add(strings[7516]);
43770str->del(strings[7515]);
43771str->del(strings[7516]);
43772str->del(strings[7515]);
43773str->del(strings[7516]);
43774strings[7517] = str->add("e,action,mouse,move");
43775strings[7518] = str->add("e");
43776str->del(strings[7517]);
43777str->del(strings[7518]);
43778strings[7519] = str->add("e,action,mouse,move");
43779strings[7520] = str->add("e");
43780str->del(strings[7519]);
43781str->del(strings[7520]);
43782strings[1932] = str->add(strings[1932]);
43783strings[7521] = str->add("unsel");
43784str->del(strings[1932]);
43785str->del(strings[7521]);
43786str->del(strings[7]);
43787str->del(strings[2466]);
43788strings[7] = str->add(strings[7]);
43789strings[2479] = str->add(strings[2479]);
43790strings[7522] = str->add("e,action,mouse,move");
43791strings[7523] = str->add("e");
43792strings[7522] = str->add(strings[7522]);
43793strings[7523] = str->add(strings[7523]);
43794str->del(strings[7522]);
43795str->del(strings[7523]);
43796str->del(strings[7522]);
43797str->del(strings[7523]);
43798strings[7524] = str->add("e,action,mouse,move");
43799strings[7525] = str->add("e");
43800strings[7526] = str->add("e,state,unselected");
43801strings[7525] = str->add(strings[7525]);
43802strings[7526] = str->add(strings[7526]);
43803strings[7525] = str->add(strings[7525]);
43804strings[7526] = str->add(strings[7526]);
43805strings[7525] = str->add(strings[7525]);
43806strings[7526] = str->add(strings[7526]);
43807strings[7525] = str->add(strings[7525]);
43808strings[7526] = str->add(strings[7526]);
43809strings[7525] = str->add(strings[7525]);
43810str->del(strings[7524]);
43811str->del(strings[7525]);
43812strings[1932] = str->add(strings[1932]);
43813strings[7527] = str->add("sel");
43814strings[7528] = str->add("program,start");
43815strings[7529] = str->add("unsel");
43816str->del(strings[7526]);
43817str->del(strings[7525]);
43818str->del(strings[7526]);
43819str->del(strings[7525]);
43820strings[1932] = str->add(strings[1932]);
43821strings[7527] = str->add(strings[7527]);
43822strings[7528] = str->add(strings[7528]);
43823strings[7529] = str->add(strings[7529]);
43824str->del(strings[7526]);
43825str->del(strings[7525]);
43826str->del(strings[7526]);
43827str->del(strings[7525]);
43828str->del(strings[7526]);
43829str->del(strings[7525]);
43830str->del(strings[1932]);
43831str->del(strings[7527]);
43832str->del(strings[7528]);
43833str->del(strings[7529]);
43834str->del(strings[1932]);
43835str->del(strings[7527]);
43836str->del(strings[7528]);
43837str->del(strings[7529]);
43838strings[7530] = str->add("e,action,mouse,move");
43839strings[7531] = str->add("e");
43840str->del(strings[7530]);
43841str->del(strings[7531]);
43842strings[1932] = str->add(strings[1932]);
43843strings[7532] = str->add("unsel");
43844str->del(strings[1932]);
43845str->del(strings[7532]);
43846strings[7533] = str->add("e,action,mouse,move");
43847strings[7534] = str->add("e");
43848str->del(strings[7533]);
43849str->del(strings[7534]);
43850strings[7535] = str->add("e,action,mouse,move");
43851strings[7536] = str->add("e");
43852str->del(strings[7535]);
43853str->del(strings[7536]);
43854strings[7537] = str->add("e,action,mouse,move");
43855strings[7538] = str->add("e");
43856str->del(strings[7537]);
43857str->del(strings[7538]);
43858strings[1932] = str->add(strings[1932]);
43859strings[7539] = str->add("go_activec21");
43860strings[7540] = str->add("program,start");
43861strings[7541] = str->add("go_activeb21");
43862strings[1932] = str->add(strings[1932]);
43863strings[7542] = str->add("go_activec9");
43864strings[7540] = str->add(strings[7540]);
43865strings[7543] = str->add("go_activeb9");
43866strings[1932] = str->add(strings[1932]);
43867strings[7544] = str->add("unsel");
43868str->del(strings[1932]);
43869str->del(strings[7539]);
43870str->del(strings[7540]);
43871str->del(strings[7541]);
43872str->del(strings[1932]);
43873str->del(strings[7542]);
43874str->del(strings[7540]);
43875str->del(strings[7543]);
43876str->del(strings[1932]);
43877str->del(strings[7544]);
43878str->del(strings[7]);
43879str->del(strings[2479]);
43880strings[7] = str->add(strings[7]);
43881strings[2489] = str->add(strings[2489]);
43882strings[7545] = str->add("e,action,mouse,move");
43883strings[7546] = str->add("e");
43884strings[7545] = str->add(strings[7545]);
43885strings[7546] = str->add(strings[7546]);
43886str->del(strings[7545]);
43887str->del(strings[7546]);
43888str->del(strings[7545]);
43889str->del(strings[7546]);
43890strings[7547] = str->add("e,action,mouse,move");
43891strings[7548] = str->add("e");
43892strings[7549] = str->add("e,state,selected");
43893strings[7548] = str->add(strings[7548]);
43894strings[7549] = str->add(strings[7549]);
43895strings[7548] = str->add(strings[7548]);
43896strings[7549] = str->add(strings[7549]);
43897strings[7548] = str->add(strings[7548]);
43898strings[7549] = str->add(strings[7549]);
43899strings[7548] = str->add(strings[7548]);
43900strings[7549] = str->add(strings[7549]);
43901strings[7548] = str->add(strings[7548]);
43902str->del(strings[7547]);
43903str->del(strings[7548]);
43904strings[7550] = str->add("program,start");
43905strings[7551] = str->add("sel");
43906str->del(strings[7549]);
43907str->del(strings[7548]);
43908str->del(strings[7549]);
43909str->del(strings[7548]);
43910strings[7550] = str->add(strings[7550]);
43911strings[7551] = str->add(strings[7551]);
43912str->del(strings[7549]);
43913str->del(strings[7548]);
43914str->del(strings[7549]);
43915str->del(strings[7548]);
43916str->del(strings[7549]);
43917str->del(strings[7548]);
43918str->del(strings[7550]);
43919str->del(strings[7551]);
43920str->del(strings[7550]);
43921str->del(strings[7551]);
43922strings[1932] = str->add(strings[1932]);
43923strings[7552] = str->add("go_activeb23");
43924strings[7553] = str->add("program,start");
43925strings[7554] = str->add("go_activec23");
43926strings[1932] = str->add(strings[1932]);
43927strings[7555] = str->add("go_activeb7");
43928strings[7553] = str->add(strings[7553]);
43929strings[7556] = str->add("go_activec7");
43930str->del(strings[1932]);
43931str->del(strings[7552]);
43932str->del(strings[7553]);
43933str->del(strings[7554]);
43934str->del(strings[1932]);
43935str->del(strings[7555]);
43936str->del(strings[7553]);
43937str->del(strings[7556]);
43938strings[1932] = str->add(strings[1932]);
43939strings[7557] = str->add("go_activec1");
43940strings[7558] = str->add("program,start");
43941strings[7559] = str->add("go_activeb1");
43942strings[1932] = str->add(strings[1932]);
43943strings[7560] = str->add("go_activec29");
43944strings[7558] = str->add(strings[7558]);
43945strings[7561] = str->add("go_activeb29");
43946strings[1932] = str->add(strings[1932]);
43947strings[7562] = str->add("unsel");
43948strings[1932] = str->add(strings[1932]);
43949strings[7562] = str->add(strings[7562]);
43950strings[1932] = str->add(strings[1932]);
43951strings[7562] = str->add(strings[7562]);
43952str->del(strings[1932]);
43953str->del(strings[7557]);
43954str->del(strings[7558]);
43955str->del(strings[7559]);
43956str->del(strings[1932]);
43957str->del(strings[7560]);
43958str->del(strings[7558]);
43959str->del(strings[7561]);
43960str->del(strings[1932]);
43961str->del(strings[7562]);
43962str->del(strings[1932]);
43963str->del(strings[7562]);
43964str->del(strings[1932]);
43965str->del(strings[7562]);
43966str->del(strings[7]);
43967str->del(strings[2489]);
43968strings[7] = str->add(strings[7]);
43969strings[2508] = str->add(strings[2508]);
43970strings[1932] = str->add(strings[1932]);
43971strings[7563] = str->add("unsel");
43972str->del(strings[1932]);
43973str->del(strings[7563]);
43974str->del(strings[7]);
43975str->del(strings[2508]);
43976strings[7] = str->add(strings[7]);
43977strings[2518] = str->add(strings[2518]);
43978strings[7564] = str->add("e,action,mouse,move");
43979strings[7565] = str->add("e");
43980str->del(strings[7564]);
43981str->del(strings[7565]);
43982strings[7566] = str->add("e,action,mouse,move");
43983strings[7567] = str->add("e");
43984str->del(strings[7566]);
43985str->del(strings[7567]);
43986strings[7568] = str->add("e,action,mouse,move");
43987strings[7569] = str->add("e");
43988str->del(strings[7568]);
43989str->del(strings[7569]);
43990str->del(strings[7]);
43991str->del(strings[2518]);
43992strings[7] = str->add(strings[7]);
43993strings[2531] = str->add(strings[2531]);
43994strings[7570] = str->add("e,action,mouse,move");
43995strings[7571] = str->add("e");
43996str->del(strings[7570]);
43997str->del(strings[7571]);
43998strings[7572] = str->add("e,action,mouse,move");
43999strings[7573] = str->add("e");
44000str->del(strings[7572]);
44001str->del(strings[7573]);
44002strings[7574] = str->add("e,action,mouse,move");
44003strings[7575] = str->add("e");
44004str->del(strings[7574]);
44005str->del(strings[7575]);
44006strings[7576] = str->add("e,action,mouse,move");
44007strings[7577] = str->add("e");
44008str->del(strings[7576]);
44009str->del(strings[7577]);
44010strings[7578] = str->add("e,action,mouse,move");
44011strings[7579] = str->add("e");
44012str->del(strings[7578]);
44013str->del(strings[7579]);
44014strings[1932] = str->add(strings[1932]);
44015strings[7580] = str->add("go_activeb22");
44016strings[7581] = str->add("program,start");
44017strings[7582] = str->add("go_activec22");
44018strings[1932] = str->add(strings[1932]);
44019strings[7583] = str->add("go_activeb8");
44020strings[7581] = str->add(strings[7581]);
44021strings[7584] = str->add("go_activec8");
44022strings[1932] = str->add(strings[1932]);
44023strings[7585] = str->add("unsel");
44024strings[1932] = str->add(strings[1932]);
44025strings[7586] = str->add("sel");
44026strings[1932] = str->add(strings[1932]);
44027strings[7586] = str->add(strings[7586]);
44028str->del(strings[1932]);
44029str->del(strings[7580]);
44030str->del(strings[7581]);
44031str->del(strings[7582]);
44032str->del(strings[1932]);
44033str->del(strings[7583]);
44034str->del(strings[7581]);
44035str->del(strings[7584]);
44036str->del(strings[1932]);
44037str->del(strings[7585]);
44038str->del(strings[1932]);
44039str->del(strings[7586]);
44040str->del(strings[1932]);
44041str->del(strings[7586]);
44042str->del(strings[7]);
44043str->del(strings[2531]);
44044strings[7] = str->add(strings[7]);
44045strings[2544] = str->add(strings[2544]);
44046strings[1932] = str->add(strings[1932]);
44047strings[7587] = str->add("go_activec28");
44048strings[7588] = str->add("program,start");
44049strings[7589] = str->add("go_activeb28");
44050strings[1932] = str->add(strings[1932]);
44051strings[7590] = str->add("go_activec2");
44052strings[7588] = str->add(strings[7588]);
44053strings[7591] = str->add("go_activeb2");
44054str->del(strings[1932]);
44055str->del(strings[7587]);
44056str->del(strings[7588]);
44057str->del(strings[7589]);
44058str->del(strings[1932]);
44059str->del(strings[7590]);
44060str->del(strings[7588]);
44061str->del(strings[7591]);
44062str->del(strings[7]);
44063str->del(strings[2544]);
44064strings[7] = str->add(strings[7]);
44065strings[2561] = str->add(strings[2561]);
44066strings[7592] = str->add("e,action,mouse,move");
44067strings[7593] = str->add("e");
44068strings[7594] = str->add("e,action,mouse,down");
44069strings[7593] = str->add(strings[7593]);
44070str->del(strings[7592]);
44071str->del(strings[7593]);
44072str->del(strings[7594]);
44073str->del(strings[7593]);
44074str->del(strings[7]);
44075str->del(strings[2561]);
44076strings[7] = str->add(strings[7]);
44077strings[3580] = str->add(strings[3580]);
44078strings[7595] = str->add("e,action,mouse,move");
44079strings[7596] = str->add("e");
44080strings[7597] = str->add("e,action,mouse,up");
44081strings[7596] = str->add(strings[7596]);
44082strings[361] = str->add(strings[361]);
44083strings[362] = str->add(strings[362]);
44084strings[361] = str->add(strings[361]);
44085str->del(strings[361]);
44086strings[362] = str->add(strings[362]);
44087str->del(strings[362]);
44088strings[7598] = str->add("base/theme/configure");
44089strings[64] = str->add(strings[64]);
44090strings[2602] = str->add(strings[2602]);
44091strings[2602] = str->add(strings[2602]);
44092strings[7599] = str->add("load");
44093strings[64] = str->add(strings[64]);
44094strings[7600] = str->add("images/230");
44095strings[7601] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/230");
44096strings[64] = str->add(strings[64]);
44097strings[7600] = str->add(strings[7600]);
44098strings[64] = str->add(strings[64]);
44099strings[7602] = str->add("images/231");
44100strings[7603] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/231");
44101strings[64] = str->add(strings[64]);
44102strings[7602] = str->add(strings[7602]);
44103strings[64] = str->add(strings[64]);
44104strings[7604] = str->add("images/232");
44105strings[7605] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/232");
44106strings[64] = str->add(strings[64]);
44107strings[7604] = str->add(strings[7604]);
44108strings[64] = str->add(strings[64]);
44109strings[2915] = str->add(strings[2915]);
44110strings[64] = str->add(strings[64]);
44111strings[2630] = str->add(strings[2630]);
44112strings[2630] = str->add(strings[2630]);
44113strings[64] = str->add(strings[64]);
44114strings[7599] = str->add(strings[7599]);
44115strings[7606] = str->add("Categories");
44116strings[1841] = str->add(strings[1841]);
44117strings[64] = str->add(strings[64]);
44118strings[7607] = str->add("images/262");
44119strings[7608] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/262");
44120strings[64] = str->add(strings[64]);
44121strings[7607] = str->add(strings[7607]);
44122str->del(strings[64]);
44123strings[379] = str->add(strings[379]);
44124strings[7606] = str->add(strings[7606]);
44125strings[7606] = str->add(strings[7606]);
44126strings[7606] = str->add(strings[7606]);
44127strings[64] = str->add(strings[64]);
44128strings[7609] = str->add("images/261");
44129strings[7610] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/261");
44130strings[64] = str->add(strings[64]);
44131strings[7609] = str->add(strings[7609]);
44132strings[64] = str->add(strings[64]);
44133strings[2614] = str->add(strings[2614]);
44134strings[7599] = str->add(strings[7599]);
44135strings[2945] = str->add(strings[2945]);
44136strings[2946] = str->add(strings[2946]);
44137strings[2945] = str->add(strings[2945]);
44138strings[2947] = str->add(strings[2947]);
44139strings[1841] = str->add(strings[1841]);
44140strings[2948] = str->add(strings[2948]);
44141strings[2949] = str->add(strings[2949]);
44142strings[64] = str->add(strings[64]);
44143strings[2062] = str->add(strings[2062]);
44144strings[64] = str->add(strings[64]);
44145strings[7611] = str->add("images/253");
44146strings[7612] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/253");
44147strings[64] = str->add(strings[64]);
44148strings[7611] = str->add(strings[7611]);
44149strings[64] = str->add(strings[64]);
44150strings[2184] = str->add(strings[2184]);
44151strings[7613] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/249");
44152strings[64] = str->add(strings[64]);
44153strings[2184] = str->add(strings[2184]);
44154strings[64] = str->add(strings[64]);
44155strings[2986] = str->add(strings[2986]);
44156strings[7614] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/251");
44157strings[64] = str->add(strings[64]);
44158strings[2986] = str->add(strings[2986]);
44159strings[64] = str->add(strings[64]);
44160strings[2186] = str->add(strings[2186]);
44161strings[7615] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/250");
44162strings[64] = str->add(strings[64]);
44163strings[2186] = str->add(strings[2186]);
44164strings[64] = str->add(strings[64]);
44165strings[2202] = str->add(strings[2202]);
44166strings[7616] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/246");
44167strings[64] = str->add(strings[64]);
44168strings[2202] = str->add(strings[2202]);
44169strings[64] = str->add(strings[64]);
44170strings[2194] = str->add(strings[2194]);
44171strings[7617] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/247");
44172strings[64] = str->add(strings[64]);
44173strings[2194] = str->add(strings[2194]);
44174strings[64] = str->add(strings[64]);
44175strings[7618] = str->add("images/252");
44176strings[7619] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/252");
44177strings[64] = str->add(strings[64]);
44178strings[7618] = str->add(strings[7618]);
44179strings[64] = str->add(strings[64]);
44180strings[2184] = str->add(strings[2184]);
44181strings[64] = str->add(strings[64]);
44182strings[2986] = str->add(strings[2986]);
44183strings[64] = str->add(strings[64]);
44184strings[2186] = str->add(strings[2186]);
44185strings[64] = str->add(strings[64]);
44186strings[7620] = str->add("images/244");
44187strings[7621] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/244");
44188strings[64] = str->add(strings[64]);
44189strings[7620] = str->add(strings[7620]);
44190strings[64] = str->add(strings[64]);
44191strings[2200] = str->add(strings[2200]);
44192strings[7622] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/245");
44193strings[64] = str->add(strings[64]);
44194strings[2200] = str->add(strings[2200]);
44195strings[7623] = str->add("e,action,hide,hbar");
44196strings[7596] = str->add(strings[7596]);
44197str->del(strings[7599]);
44198str->del(strings[1841]);
44199strings[7624] = str->add("program,start");
44200strings[7625] = str->add("sb_hbar_hide");
44201strings[1932] = str->add(strings[1932]);
44202strings[7625] = str->add(strings[7625]);
44203str->del(strings[7623]);
44204str->del(strings[7596]);
44205strings[7626] = str->add("e,action,hide,vbar");
44206strings[7596] = str->add(strings[7596]);
44207str->del(strings[7624]);
44208str->del(strings[7625]);
44209str->del(strings[1932]);
44210str->del(strings[7625]);
44211strings[7627] = str->add("program,start");
44212strings[7628] = str->add("sb_vbar_hide");
44213strings[1932] = str->add(strings[1932]);
44214strings[7628] = str->add(strings[7628]);
44215str->del(strings[7626]);
44216str->del(strings[7596]);
44217strings[2942] = str->add(strings[2942]);
44218strings[7629] = str->add("resize");
44219strings[1892] = str->add(strings[1892]);
44220strings[469] = str->add(strings[469]);
44221strings[2758] = str->add(strings[2758]);
44222strings[2758] = str->add(strings[2758]);
44223strings[7599] = str->add(strings[7599]);
44224strings[64] = str->add(strings[64]);
44225strings[2615] = str->add(strings[2615]);
44226strings[2615] = str->add(strings[2615]);
44227strings[64] = str->add(strings[64]);
44228strings[7599] = str->add(strings[7599]);
44229strings[1892] = str->add(strings[1892]);
44230strings[64] = str->add(strings[64]);
44231strings[4296] = str->add(strings[4296]);
44232strings[7630] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/254");
44233strings[64] = str->add(strings[64]);
44234strings[4296] = str->add(strings[4296]);
44235strings[64] = str->add(strings[64]);
44236strings[7631] = str->add("images/255");
44237strings[7632] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/255");
44238strings[64] = str->add(strings[64]);
44239strings[7631] = str->add(strings[7631]);
44240strings[64] = str->add(strings[64]);
44241strings[7633] = str->add("images/248");
44242strings[7634] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/248");
44243strings[64] = str->add(strings[64]);
44244strings[7633] = str->add(strings[7633]);
44245str->del(strings[64]);
44246strings[385] = str->add(strings[385]);
44247strings[1892] = str->add(strings[1892]);
44248strings[1892] = str->add(strings[1892]);
44249strings[1892] = str->add(strings[1892]);
44250strings[64] = str->add(strings[64]);
44251strings[2986] = str->add(strings[2986]);
44252strings[64] = str->add(strings[64]);
44253strings[2186] = str->add(strings[2186]);
44254strings[469] = str->add(strings[469]);
44255strings[7635] = str->add("images/392");
44256strings[7636] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/392");
44257strings[469] = str->add(strings[469]);
44258strings[7635] = str->add(strings[7635]);
44259strings[1841] = str->add(strings[1841]);
44260strings[7629] = str->add(strings[7629]);
44261strings[1841] = str->add(strings[1841]);
44262strings[7637] = str->add("appearance/wallpaper");
44263strings[2536] = str->add(strings[2536]);
44264strings[1750] = str->add(strings[1750]);
44265strings[7638] = str->add("appearance/theme");
44266strings[2514] = str->add(strings[2514]);
44267strings[376] = str->add(strings[376]);
44268strings[7639] = str->add("appearance/colors");
44269strings[215] = str->add(strings[215]);
44270strings[2275] = str->add(strings[2275]);
44271strings[7640] = str->add("appearance/fonts");
44272strings[2348] = str->add(strings[2348]);
44273strings[2349] = str->add(strings[2349]);
44274strings[7641] = str->add("appearance/borders");
44275strings[2262] = str->add(strings[2262]);
44276strings[2250] = str->add(strings[2250]);
44277strings[7642] = str->add("appearance/icon_theme");
44278strings[2358] = str->add(strings[2358]);
44279strings[2359] = str->add(strings[2359]);
44280strings[7643] = str->add("appearance/mouse_cursor");
44281strings[2443] = str->add(strings[2443]);
44282strings[2444] = str->add(strings[2444]);
44283strings[7644] = str->add("appearance/transitions");
44284strings[2526] = str->add(strings[2526]);
44285strings[2527] = str->add(strings[2527]);
44286strings[7645] = str->add("appearance/startup");
44287strings[2502] = str->add(strings[2502]);
44288strings[2503] = str->add(strings[2503]);
44289strings[7646] = str->add("appearance/dropshadow");
44290strings[1894] = str->add(strings[1894]);
44291strings[1895] = str->add(strings[1895]);
44292strings[2231] = str->add(strings[2231]);
44293strings[469] = str->add(strings[469]);
44294strings[2715] = str->add(strings[2715]);
44295strings[7599] = str->add(strings[7599]);
44296strings[64] = str->add(strings[64]);
44297strings[2616] = str->add(strings[2616]);
44298strings[2616] = str->add(strings[2616]);
44299strings[64] = str->add(strings[64]);
44300strings[7599] = str->add(strings[7599]);
44301strings[2231] = str->add(strings[2231]);
44302strings[64] = str->add(strings[64]);
44303strings[7647] = str->add("images/256");
44304strings[7648] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/256");
44305strings[64] = str->add(strings[64]);
44306strings[7647] = str->add(strings[7647]);
44307strings[64] = str->add(strings[64]);
44308strings[7633] = str->add(strings[7633]);
44309str->del(strings[64]);
44310strings[385] = str->add(strings[385]);
44311strings[2231] = str->add(strings[2231]);
44312strings[2231] = str->add(strings[2231]);
44313strings[2231] = str->add(strings[2231]);
44314strings[64] = str->add(strings[64]);
44315strings[2986] = str->add(strings[2986]);
44316strings[64] = str->add(strings[64]);
44317strings[2186] = str->add(strings[2186]);
44318strings[469] = str->add(strings[469]);
44319strings[2890] = str->add(strings[2890]);
44320strings[1841] = str->add(strings[1841]);
44321strings[7629] = str->add(strings[7629]);
44322strings[1841] = str->add(strings[1841]);
44323strings[7649] = str->add("applications/new_application");
44324strings[2234] = str->add(strings[2234]);
44325strings[2235] = str->add(strings[2235]);
44326strings[7650] = str->add("applications/ibar_applications");
44327strings[2237] = str->add(strings[2237]);
44328strings[2238] = str->add(strings[2238]);
44329strings[7651] = str->add("applications/restart_applications");
44330strings[2240] = str->add(strings[2240]);
44331strings[2241] = str->add(strings[2241]);
44332strings[7652] = str->add("applications/startup_applications");
44333strings[2243] = str->add(strings[2243]);
44334strings[2244] = str->add(strings[2244]);
44335strings[1670] = str->add(strings[1670]);
44336strings[469] = str->add(strings[469]);
44337strings[2679] = str->add(strings[2679]);
44338strings[2679] = str->add(strings[2679]);
44339strings[7599] = str->add(strings[7599]);
44340strings[64] = str->add(strings[64]);
44341strings[2615] = str->add(strings[2615]);
44342strings[64] = str->add(strings[64]);
44343strings[7599] = str->add(strings[7599]);
44344strings[1670] = str->add(strings[1670]);
44345strings[64] = str->add(strings[64]);
44346strings[4296] = str->add(strings[4296]);
44347strings[64] = str->add(strings[64]);
44348strings[7631] = str->add(strings[7631]);
44349strings[64] = str->add(strings[64]);
44350strings[7633] = str->add(strings[7633]);
44351str->del(strings[64]);
44352strings[385] = str->add(strings[385]);
44353strings[1670] = str->add(strings[1670]);
44354strings[1670] = str->add(strings[1670]);
44355strings[1670] = str->add(strings[1670]);
44356strings[64] = str->add(strings[64]);
44357strings[2986] = str->add(strings[2986]);
44358strings[64] = str->add(strings[64]);
44359strings[2186] = str->add(strings[2186]);
44360strings[469] = str->add(strings[469]);
44361strings[7653] = str->add("images/389");
44362strings[7654] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/389");
44363strings[469] = str->add(strings[469]);
44364strings[7653] = str->add(strings[7653]);
44365strings[1841] = str->add(strings[1841]);
44366strings[7629] = str->add(strings[7629]);
44367strings[1841] = str->add(strings[1841]);
44368strings[7655] = str->add("screen/virtual_desktops");
44369strings[2297] = str->add(strings[2297]);
44370strings[2298] = str->add(strings[2298]);
44371strings[7656] = str->add("screen/screen_resolution");
44372strings[2315] = str->add(strings[2315]);
44373strings[2316] = str->add(strings[2316]);
44374strings[7657] = str->add("screen/screen_lock");
44375strings[2287] = str->add(strings[2287]);
44376strings[2288] = str->add(strings[2288]);
44377strings[7658] = str->add("screen/screen_saver");
44378strings[2484] = str->add(strings[2484]);
44379strings[2485] = str->add(strings[2485]);
44380strings[7659] = str->add("screen/power_management");
44381strings[2325] = str->add(strings[2325]);
44382strings[2326] = str->add(strings[2326]);
44383strings[2388] = str->add(strings[2388]);
44384strings[469] = str->add(strings[469]);
44385strings[2757] = str->add(strings[2757]);
44386strings[2757] = str->add(strings[2757]);
44387strings[7599] = str->add(strings[7599]);
44388strings[64] = str->add(strings[64]);
44389strings[2616] = str->add(strings[2616]);
44390strings[64] = str->add(strings[64]);
44391strings[7599] = str->add(strings[7599]);
44392strings[2388] = str->add(strings[2388]);
44393strings[64] = str->add(strings[64]);
44394strings[7647] = str->add(strings[7647]);
44395strings[64] = str->add(strings[64]);
44396strings[7633] = str->add(strings[7633]);
44397str->del(strings[64]);
44398strings[385] = str->add(strings[385]);
44399strings[2388] = str->add(strings[2388]);
44400strings[2388] = str->add(strings[2388]);
44401strings[2388] = str->add(strings[2388]);
44402strings[64] = str->add(strings[64]);
44403strings[2986] = str->add(strings[2986]);
44404strings[64] = str->add(strings[64]);
44405strings[2186] = str->add(strings[2186]);
44406strings[469] = str->add(strings[469]);
44407strings[7660] = str->add("images/391");
44408strings[7661] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/391");
44409strings[469] = str->add(strings[469]);
44410strings[7660] = str->add(strings[7660]);
44411strings[1841] = str->add(strings[1841]);
44412strings[7629] = str->add(strings[7629]);
44413strings[1841] = str->add(strings[1841]);
44414strings[7662] = str->add("keyboard_and_mouse/key_bindings");
44415strings[2391] = str->add(strings[2391]);
44416strings[2392] = str->add(strings[2392]);
44417strings[7663] = str->add("keyboard_and_mouse/mouse_bindings");
44418strings[2431] = str->add(strings[2431]);
44419strings[2422] = str->add(strings[2422]);
44420strings[7664] = str->add("keyboard_and_mouse/mouse_acceleration");
44421strings[2421] = str->add(strings[2421]);
44422strings[2422] = str->add(strings[2422]);
44423strings[2552] = str->add(strings[2552]);
44424strings[469] = str->add(strings[469]);
44425strings[2682] = str->add(strings[2682]);
44426strings[7599] = str->add(strings[7599]);
44427strings[64] = str->add(strings[64]);
44428strings[2615] = str->add(strings[2615]);
44429strings[64] = str->add(strings[64]);
44430strings[7599] = str->add(strings[7599]);
44431strings[2552] = str->add(strings[2552]);
44432strings[64] = str->add(strings[64]);
44433strings[4296] = str->add(strings[4296]);
44434strings[64] = str->add(strings[64]);
44435strings[7631] = str->add(strings[7631]);
44436strings[64] = str->add(strings[64]);
44437strings[7633] = str->add(strings[7633]);
44438str->del(strings[64]);
44439strings[385] = str->add(strings[385]);
44440strings[2552] = str->add(strings[2552]);
44441strings[2552] = str->add(strings[2552]);
44442strings[2552] = str->add(strings[2552]);
44443strings[64] = str->add(strings[64]);
44444strings[2986] = str->add(strings[2986]);
44445strings[64] = str->add(strings[64]);
44446strings[2186] = str->add(strings[2186]);
44447strings[469] = str->add(strings[469]);
44448strings[2896] = str->add(strings[2896]);
44449strings[1841] = str->add(strings[1841]);
44450strings[7629] = str->add(strings[7629]);
44451strings[1841] = str->add(strings[1841]);
44452strings[7665] = str->add("windows/window_display");
44453strings[2554] = str->add(strings[2554]);
44454strings[2250] = str->add(strings[2250]);
44455strings[7666] = str->add("windows/window_focus");
44456strings[2566] = str->add(strings[2566]);
44457strings[2567] = str->add(strings[2567]);
44458strings[7667] = str->add("windows/window_manipulation");
44459strings[197] = str->add(strings[197]);
44460strings[2921] = str->add(strings[2921]);
44461strings[7668] = str->add("windows/window_list");
44462strings[2926] = str->add(strings[2926]);
44463strings[2269] = str->add(strings[2269]);
44464strings[2252] = str->add(strings[2252]);
44465strings[469] = str->add(strings[469]);
44466strings[2721] = str->add(strings[2721]);
44467strings[2721] = str->add(strings[2721]);
44468strings[7599] = str->add(strings[7599]);
44469strings[64] = str->add(strings[64]);
44470strings[2616] = str->add(strings[2616]);
44471strings[64] = str->add(strings[64]);
44472strings[7599] = str->add(strings[7599]);
44473strings[2252] = str->add(strings[2252]);
44474strings[64] = str->add(strings[64]);
44475strings[7647] = str->add(strings[7647]);
44476strings[64] = str->add(strings[64]);
44477strings[7633] = str->add(strings[7633]);
44478str->del(strings[64]);
44479strings[385] = str->add(strings[385]);
44480strings[2252] = str->add(strings[2252]);
44481strings[2252] = str->add(strings[2252]);
44482strings[2252] = str->add(strings[2252]);
44483strings[64] = str->add(strings[64]);
44484strings[2986] = str->add(strings[2986]);
44485strings[64] = str->add(strings[64]);
44486strings[2186] = str->add(strings[2186]);
44487strings[469] = str->add(strings[469]);
44488strings[7669] = str->add("images/341");
44489strings[7670] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/341");
44490strings[469] = str->add(strings[469]);
44491strings[7669] = str->add(strings[7669]);
44492strings[1841] = str->add(strings[1841]);
44493strings[7629] = str->add(strings[7629]);
44494strings[1841] = str->add(strings[1841]);
44495strings[7671] = str->add("menus/favorites_menu");
44496strings[2255] = str->add(strings[2255]);
44497strings[2256] = str->add(strings[2256]);
44498strings[7672] = str->add("menus/menu_settings");
44499strings[2399] = str->add(strings[2399]);
44500strings[2400] = str->add(strings[2400]);
44501strings[7673] = str->add("menus/client_list_menu");
44502strings[2268] = str->add(strings[2268]);
44503strings[2269] = str->add(strings[2269]);
44504strings[2368] = str->add(strings[2368]);
44505strings[469] = str->add(strings[469]);
44506strings[2689] = str->add(strings[2689]);
44507strings[2689] = str->add(strings[2689]);
44508strings[7599] = str->add(strings[7599]);
44509strings[64] = str->add(strings[64]);
44510strings[2615] = str->add(strings[2615]);
44511strings[64] = str->add(strings[64]);
44512strings[7599] = str->add(strings[7599]);
44513strings[2368] = str->add(strings[2368]);
44514strings[64] = str->add(strings[64]);
44515strings[4296] = str->add(strings[4296]);
44516strings[64] = str->add(strings[64]);
44517strings[7631] = str->add(strings[7631]);
44518strings[64] = str->add(strings[64]);
44519strings[7633] = str->add(strings[7633]);
44520str->del(strings[64]);
44521strings[385] = str->add(strings[385]);
44522strings[2368] = str->add(strings[2368]);
44523strings[2368] = str->add(strings[2368]);
44524strings[2368] = str->add(strings[2368]);
44525strings[64] = str->add(strings[64]);
44526strings[2986] = str->add(strings[2986]);
44527strings[64] = str->add(strings[64]);
44528strings[2186] = str->add(strings[2186]);
44529strings[469] = str->add(strings[469]);
44530strings[7674] = str->add("images/325");
44531strings[7675] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/325");
44532strings[469] = str->add(strings[469]);
44533strings[7674] = str->add(strings[7674]);
44534strings[1841] = str->add(strings[1841]);
44535strings[7629] = str->add(strings[7629]);
44536strings[1841] = str->add(strings[1841]);
44537strings[7676] = str->add("language/language_settings");
44538strings[2379] = str->add(strings[2379]);
44539strings[2369] = str->add(strings[2369]);
44540strings[7677] = str->add("language/input_method_settings");
44541strings[2371] = str->add(strings[2371]);
44542strings[2372] = str->add(strings[2372]);
44543strings[1901] = str->add(strings[1901]);
44544strings[469] = str->add(strings[469]);
44545strings[2756] = str->add(strings[2756]);
44546strings[2756] = str->add(strings[2756]);
44547strings[7599] = str->add(strings[7599]);
44548strings[64] = str->add(strings[64]);
44549strings[2616] = str->add(strings[2616]);
44550strings[64] = str->add(strings[64]);
44551strings[7599] = str->add(strings[7599]);
44552strings[1901] = str->add(strings[1901]);
44553strings[64] = str->add(strings[64]);
44554strings[7647] = str->add(strings[7647]);
44555strings[64] = str->add(strings[64]);
44556strings[7633] = str->add(strings[7633]);
44557str->del(strings[64]);
44558strings[385] = str->add(strings[385]);
44559strings[1901] = str->add(strings[1901]);
44560strings[1901] = str->add(strings[1901]);
44561strings[1901] = str->add(strings[1901]);
44562strings[64] = str->add(strings[64]);
44563strings[2986] = str->add(strings[2986]);
44564strings[64] = str->add(strings[64]);
44565strings[2186] = str->add(strings[2186]);
44566strings[469] = str->add(strings[469]);
44567strings[7678] = str->add("images/390");
44568strings[7679] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/390");
44569strings[469] = str->add(strings[469]);
44570strings[7678] = str->add(strings[7678]);
44571strings[1841] = str->add(strings[1841]);
44572strings[7629] = str->add(strings[7629]);
44573strings[1841] = str->add(strings[1841]);
44574strings[7680] = str->add("advanced/dialogs");
44575strings[2305] = str->add(strings[2305]);
44576strings[2306] = str->add(strings[2306]);
44577strings[7681] = str->add("advanced/interaction");
44578strings[2997] = str->add(strings[2997]);
44579strings[2306] = str->add(strings[2306]);
44580strings[7682] = str->add("advanced/performance");
44581strings[2461] = str->add(strings[2461]);
44582strings[2462] = str->add(strings[2462]);
44583strings[7683] = str->add("advanced/run_command");
44584strings[2338] = str->add(strings[2338]);
44585strings[2339] = str->add(strings[2339]);
44586strings[7684] = str->add("advanced/search_directories");
44587strings[2453] = str->add(strings[2453]);
44588strings[2454] = str->add(strings[2454]);
44589strings[7685] = str->add("advanced/profiles");
44590strings[2474] = str->add(strings[2474]);
44591strings[2475] = str->add(strings[2475]);
44592strings[7686] = str->add("advanced/engine");
44593strings[2931] = str->add(strings[2931]);
44594strings[2932] = str->add(strings[2932]);
44595strings[7687] = str->add("advanced/battery");
44596strings[1903] = str->add(strings[1903]);
44597strings[1904] = str->add(strings[1904]);
44598strings[1] = str->add(strings[1]);
44599strings[469] = str->add(strings[469]);
44600strings[2759] = str->add(strings[2759]);
44601strings[2759] = str->add(strings[2759]);
44602strings[7599] = str->add(strings[7599]);
44603strings[64] = str->add(strings[64]);
44604strings[2615] = str->add(strings[2615]);
44605strings[64] = str->add(strings[64]);
44606strings[7599] = str->add(strings[7599]);
44607strings[1] = str->add(strings[1]);
44608strings[64] = str->add(strings[64]);
44609strings[4296] = str->add(strings[4296]);
44610strings[64] = str->add(strings[64]);
44611strings[7631] = str->add(strings[7631]);
44612strings[64] = str->add(strings[64]);
44613strings[7633] = str->add(strings[7633]);
44614str->del(strings[64]);
44615strings[385] = str->add(strings[385]);
44616strings[1] = str->add(strings[1]);
44617strings[1] = str->add(strings[1]);
44618strings[1] = str->add(strings[1]);
44619strings[64] = str->add(strings[64]);
44620strings[2986] = str->add(strings[2986]);
44621strings[64] = str->add(strings[64]);
44622strings[2186] = str->add(strings[2186]);
44623strings[469] = str->add(strings[469]);
44624strings[7688] = str->add("images/393");
44625strings[7689] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/393");
44626strings[469] = str->add(strings[469]);
44627strings[7688] = str->add(strings[7688]);
44628strings[1841] = str->add(strings[1841]);
44629strings[7629] = str->add(strings[7629]);
44630strings[1841] = str->add(strings[1841]);
44631strings[7690] = str->add("extensions/modules");
44632strings[4] = str->add(strings[4]);
44633strings[5] = str->add(strings[5]);
44634strings[7691] = str->add("extensions/shelves");
44635strings[2494] = str->add(strings[2494]);
44636strings[2495] = str->add(strings[2495]);
44637strings[7692] = str->add("extensions/pager");
44638strings[1911] = str->add(strings[1911]);
44639strings[1912] = str->add(strings[1912]);
44640strings[7693] = str->add("extensions/gadman");
44641strings[1925] = str->add(strings[1925]);
44642strings[1926] = str->add(strings[1926]);
44643strings[2408] = str->add(strings[2408]);
44644strings[469] = str->add(strings[469]);
44645strings[2693] = str->add(strings[2693]);
44646strings[7599] = str->add(strings[7599]);
44647strings[64] = str->add(strings[64]);
44648strings[2616] = str->add(strings[2616]);
44649strings[64] = str->add(strings[64]);
44650strings[7599] = str->add(strings[7599]);
44651strings[2408] = str->add(strings[2408]);
44652strings[64] = str->add(strings[64]);
44653strings[7647] = str->add(strings[7647]);
44654strings[64] = str->add(strings[64]);
44655strings[7633] = str->add(strings[7633]);
44656str->del(strings[64]);
44657strings[385] = str->add(strings[385]);
44658strings[2408] = str->add(strings[2408]);
44659strings[2408] = str->add(strings[2408]);
44660strings[2408] = str->add(strings[2408]);
44661strings[64] = str->add(strings[64]);
44662strings[2986] = str->add(strings[2986]);
44663strings[64] = str->add(strings[64]);
44664strings[2186] = str->add(strings[2186]);
44665strings[469] = str->add(strings[469]);
44666strings[4965] = str->add(strings[4965]);
44667strings[469] = str->add(strings[469]);
44668strings[4967] = str->add(strings[4967]);
44669strings[1841] = str->add(strings[1841]);
44670strings[7629] = str->add(strings[7629]);
44671strings[1841] = str->add(strings[1841]);
44672strings[7694] = str->add("fileman/fileman");
44673strings[2408] = str->add(strings[2408]);
44674strings[2409] = str->add(strings[2409]);
44675strings[7695] = str->add("fileman/file_icons");
44676strings[2411] = str->add(strings[2411]);
44677strings[2412] = str->add(strings[2412]);
44678strings[7629] = str->add(strings[7629]);
44679strings[7629] = str->add(strings[7629]);
44680strings[7629] = str->add(strings[7629]);
44681strings[7629] = str->add(strings[7629]);
44682strings[7629] = str->add(strings[7629]);
44683strings[7629] = str->add(strings[7629]);
44684strings[7629] = str->add(strings[7629]);
44685strings[7629] = str->add(strings[7629]);
44686strings[7629] = str->add(strings[7629]);
44687strings[7629] = str->add(strings[7629]);
44688strings[7696] = str->add("e,action,show,hbar");
44689strings[7596] = str->add(strings[7596]);
44690str->del(strings[7627]);
44691str->del(strings[7628]);
44692str->del(strings[1932]);
44693str->del(strings[7628]);
44694str->del(strings[7629]);
44695strings[7697] = str->add("program,start");
44696strings[7698] = str->add("sb_hbar_show");
44697strings[1932] = str->add(strings[1932]);
44698strings[7698] = str->add(strings[7698]);
44699str->del(strings[7696]);
44700str->del(strings[7596]);
44701strings[7699] = str->add("e,action,show,vbar");
44702strings[7596] = str->add(strings[7596]);
44703str->del(strings[7697]);
44704str->del(strings[7698]);
44705str->del(strings[1932]);
44706str->del(strings[7698]);
44707strings[7700] = str->add("program,start");
44708strings[7701] = str->add("sb_vbar_show");
44709strings[1932] = str->add(strings[1932]);
44710strings[7701] = str->add(strings[7701]);
44711str->del(strings[7699]);
44712str->del(strings[7596]);
44713strings[7629] = str->add(strings[7629]);
44714strings[7629] = str->add(strings[7629]);
44715strings[7702] = str->add("e,action,hide,hbar");
44716strings[7596] = str->add(strings[7596]);
44717str->del(strings[7700]);
44718str->del(strings[7701]);
44719str->del(strings[1932]);
44720str->del(strings[7701]);
44721str->del(strings[7629]);
44722str->del(strings[7629]);
44723strings[7703] = str->add("program,start");
44724strings[7704] = str->add("sb_hbar_hide");
44725strings[1932] = str->add(strings[1932]);
44726strings[7704] = str->add(strings[7704]);
44727str->del(strings[7702]);
44728str->del(strings[7596]);
44729strings[7629] = str->add(strings[7629]);
44730strings[64] = str->add(strings[64]);
44731strings[2630] = str->add(strings[2630]);
44732strings[64] = str->add(strings[64]);
44733strings[7599] = str->add(strings[7599]);
44734strings[7705] = str->add("Items");
44735strings[1841] = str->add(strings[1841]);
44736strings[64] = str->add(strings[64]);
44737strings[7607] = str->add(strings[7607]);
44738str->del(strings[64]);
44739strings[379] = str->add(strings[379]);
44740strings[7705] = str->add(strings[7705]);
44741strings[7705] = str->add(strings[7705]);
44742strings[7705] = str->add(strings[7705]);
44743strings[64] = str->add(strings[64]);
44744strings[7609] = str->add(strings[7609]);
44745strings[64] = str->add(strings[64]);
44746strings[2614] = str->add(strings[2614]);
44747strings[7599] = str->add(strings[7599]);
44748strings[2945] = str->add(strings[2945]);
44749strings[2946] = str->add(strings[2946]);
44750strings[2945] = str->add(strings[2945]);
44751strings[2947] = str->add(strings[2947]);
44752strings[1841] = str->add(strings[1841]);
44753strings[2948] = str->add(strings[2948]);
44754strings[2949] = str->add(strings[2949]);
44755strings[64] = str->add(strings[64]);
44756strings[2062] = str->add(strings[2062]);
44757strings[64] = str->add(strings[64]);
44758strings[7611] = str->add(strings[7611]);
44759strings[64] = str->add(strings[64]);
44760strings[2184] = str->add(strings[2184]);
44761strings[64] = str->add(strings[64]);
44762strings[2986] = str->add(strings[2986]);
44763strings[64] = str->add(strings[64]);
44764strings[2186] = str->add(strings[2186]);
44765strings[64] = str->add(strings[64]);
44766strings[2202] = str->add(strings[2202]);
44767strings[64] = str->add(strings[64]);
44768strings[2194] = str->add(strings[2194]);
44769strings[64] = str->add(strings[64]);
44770strings[7618] = str->add(strings[7618]);
44771strings[64] = str->add(strings[64]);
44772strings[2184] = str->add(strings[2184]);
44773strings[64] = str->add(strings[64]);
44774strings[2986] = str->add(strings[2986]);
44775strings[64] = str->add(strings[64]);
44776strings[2186] = str->add(strings[2186]);
44777strings[64] = str->add(strings[64]);
44778strings[7620] = str->add(strings[7620]);
44779strings[64] = str->add(strings[64]);
44780strings[2200] = str->add(strings[2200]);
44781strings[7706] = str->add("e,action,hide,hbar");
44782strings[7596] = str->add(strings[7596]);
44783str->del(strings[7599]);
44784str->del(strings[1841]);
44785strings[7703] = str->add(strings[7703]);
44786strings[7704] = str->add(strings[7704]);
44787strings[1932] = str->add(strings[1932]);
44788strings[7704] = str->add(strings[7704]);
44789str->del(strings[7706]);
44790str->del(strings[7596]);
44791strings[7707] = str->add("e,action,hide,vbar");
44792strings[7596] = str->add(strings[7596]);
44793str->del(strings[7703]);
44794str->del(strings[7704]);
44795str->del(strings[1932]);
44796str->del(strings[7704]);
44797strings[7703] = str->add(strings[7703]);
44798strings[7708] = str->add("sb_vbar_hide");
44799strings[1932] = str->add(strings[1932]);
44800strings[7708] = str->add(strings[7708]);
44801str->del(strings[7707]);
44802str->del(strings[7596]);
44803strings[2942] = str->add(strings[2942]);
44804strings[7629] = str->add(strings[7629]);
44805strings[7629] = str->add(strings[7629]);
44806strings[7709] = str->add("e,action,show,hbar");
44807strings[7596] = str->add(strings[7596]);
44808str->del(strings[7703]);
44809str->del(strings[7708]);
44810str->del(strings[1932]);
44811str->del(strings[7708]);
44812str->del(strings[7629]);
44813str->del(strings[7629]);
44814strings[7703] = str->add(strings[7703]);
44815strings[7710] = str->add("sb_hbar_show");
44816strings[1932] = str->add(strings[1932]);
44817strings[7710] = str->add(strings[7710]);
44818str->del(strings[7709]);
44819str->del(strings[7596]);
44820strings[7711] = str->add("e,action,hide,hbar");
44821strings[7596] = str->add(strings[7596]);
44822str->del(strings[7703]);
44823str->del(strings[7710]);
44824str->del(strings[1932]);
44825str->del(strings[7710]);
44826strings[7703] = str->add(strings[7703]);
44827strings[7704] = str->add(strings[7704]);
44828strings[1932] = str->add(strings[1932]);
44829strings[7704] = str->add(strings[7704]);
44830str->del(strings[7711]);
44831str->del(strings[7596]);
44832strings[7629] = str->add(strings[7629]);
44833strings[7629] = str->add(strings[7629]);
44834strings[7629] = str->add(strings[7629]);
44835strings[64] = str->add(strings[64]);
44836strings[2613] = str->add(strings[2613]);
44837strings[2613] = str->add(strings[2613]);
44838strings[64] = str->add(strings[64]);
44839strings[7599] = str->add(strings[7599]);
44840strings[7712] = str->add("e,action,click");
44841strings[1591] = str->add(strings[1591]);
44842strings[1841] = str->add(strings[1841]);
44843strings[7713] = str->add("e,state,text");
44844strings[7596] = str->add(strings[7596]);
44845str->del(strings[7599]);
44846str->del(strings[1841]);
44847strings[7703] = str->add(strings[7703]);
44848strings[7714] = str->add("text_state");
44849strings[1932] = str->add(strings[1932]);
44850strings[7714] = str->add(strings[7714]);
44851str->del(strings[7713]);
44852str->del(strings[7596]);
44853str->del(strings[64]);
44854strings[385] = str->add(strings[385]);
44855strings[1591] = str->add(strings[1591]);
44856strings[7629] = str->add(strings[7629]);
44857strings[7629] = str->add(strings[7629]);
44858strings[1841] = str->add(strings[1841]);
44859strings[361] = str->add(strings[361]);
44860strings[362] = str->add(strings[362]);
44861strings[361] = str->add(strings[361]);
44862str->del(strings[361]);
44863strings[362] = str->add(strings[362]);
44864str->del(strings[362]);
44865strings[2306] = str->add(strings[2306]);
44866strings[7715] = str->add("e,state,focused");
44867strings[7596] = str->add(strings[7596]);
44868strings[7716] = str->add("e,state,selected");
44869strings[7596] = str->add(strings[7596]);
44870strings[469] = str->add(strings[469]);
44871strings[2713] = str->add(strings[2713]);
44872strings[7599] = str->add(strings[7599]);
44873strings[64] = str->add(strings[64]);
44874strings[2615] = str->add(strings[2615]);
44875strings[64] = str->add(strings[64]);
44876strings[7599] = str->add(strings[7599]);
44877strings[2536] = str->add(strings[2536]);
44878strings[64] = str->add(strings[64]);
44879strings[4296] = str->add(strings[4296]);
44880strings[64] = str->add(strings[64]);
44881strings[7631] = str->add(strings[7631]);
44882strings[64] = str->add(strings[64]);
44883strings[7633] = str->add(strings[7633]);
44884str->del(strings[64]);
44885strings[385] = str->add(strings[385]);
44886strings[2536] = str->add(strings[2536]);
44887strings[2536] = str->add(strings[2536]);
44888strings[2536] = str->add(strings[2536]);
44889strings[64] = str->add(strings[64]);
44890strings[2986] = str->add(strings[2986]);
44891strings[64] = str->add(strings[64]);
44892strings[2186] = str->add(strings[2186]);
44893strings[469] = str->add(strings[469]);
44894strings[3096] = str->add(strings[3096]);
44895strings[1841] = str->add(strings[1841]);
44896strings[7629] = str->add(strings[7629]);
44897strings[1841] = str->add(strings[1841]);
44898strings[469] = str->add(strings[469]);
44899strings[2680] = str->add(strings[2680]);
44900strings[7599] = str->add(strings[7599]);
44901strings[64] = str->add(strings[64]);
44902strings[2616] = str->add(strings[2616]);
44903strings[64] = str->add(strings[64]);
44904strings[7599] = str->add(strings[7599]);
44905strings[2514] = str->add(strings[2514]);
44906strings[64] = str->add(strings[64]);
44907strings[7647] = str->add(strings[7647]);
44908strings[64] = str->add(strings[64]);
44909strings[7633] = str->add(strings[7633]);
44910str->del(strings[64]);
44911strings[385] = str->add(strings[385]);
44912strings[2514] = str->add(strings[2514]);
44913strings[2514] = str->add(strings[2514]);
44914strings[2514] = str->add(strings[2514]);
44915strings[64] = str->add(strings[64]);
44916strings[2986] = str->add(strings[2986]);
44917strings[64] = str->add(strings[64]);
44918strings[2186] = str->add(strings[2186]);
44919strings[469] = str->add(strings[469]);
44920strings[3094] = str->add(strings[3094]);
44921strings[1841] = str->add(strings[1841]);
44922strings[7629] = str->add(strings[7629]);
44923strings[1841] = str->add(strings[1841]);
44924strings[469] = str->add(strings[469]);
44925strings[2681] = str->add(strings[2681]);
44926strings[2681] = str->add(strings[2681]);
44927strings[7599] = str->add(strings[7599]);
44928strings[64] = str->add(strings[64]);
44929strings[2615] = str->add(strings[2615]);
44930strings[64] = str->add(strings[64]);
44931strings[7599] = str->add(strings[7599]);
44932strings[215] = str->add(strings[215]);
44933strings[64] = str->add(strings[64]);
44934strings[4296] = str->add(strings[4296]);
44935strings[64] = str->add(strings[64]);
44936strings[7631] = str->add(strings[7631]);
44937strings[64] = str->add(strings[64]);
44938strings[7633] = str->add(strings[7633]);
44939str->del(strings[64]);
44940strings[385] = str->add(strings[385]);
44941strings[215] = str->add(strings[215]);
44942strings[215] = str->add(strings[215]);
44943strings[215] = str->add(strings[215]);
44944strings[64] = str->add(strings[64]);
44945strings[2986] = str->add(strings[2986]);
44946strings[64] = str->add(strings[64]);
44947strings[2186] = str->add(strings[2186]);
44948strings[469] = str->add(strings[469]);
44949strings[7717] = str->add("images/318");
44950strings[7718] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/318");
44951strings[469] = str->add(strings[469]);
44952strings[7717] = str->add(strings[7717]);
44953strings[1841] = str->add(strings[1841]);
44954strings[7629] = str->add(strings[7629]);
44955strings[1841] = str->add(strings[1841]);
44956strings[469] = str->add(strings[469]);
44957strings[2712] = str->add(strings[2712]);
44958strings[2712] = str->add(strings[2712]);
44959strings[7599] = str->add(strings[7599]);
44960strings[64] = str->add(strings[64]);
44961strings[2616] = str->add(strings[2616]);
44962strings[64] = str->add(strings[64]);
44963strings[7599] = str->add(strings[7599]);
44964strings[2348] = str->add(strings[2348]);
44965strings[64] = str->add(strings[64]);
44966strings[7647] = str->add(strings[7647]);
44967strings[64] = str->add(strings[64]);
44968strings[7633] = str->add(strings[7633]);
44969str->del(strings[64]);
44970strings[385] = str->add(strings[385]);
44971strings[2348] = str->add(strings[2348]);
44972strings[2348] = str->add(strings[2348]);
44973strings[2348] = str->add(strings[2348]);
44974strings[64] = str->add(strings[64]);
44975strings[2986] = str->add(strings[2986]);
44976strings[64] = str->add(strings[64]);
44977strings[2186] = str->add(strings[2186]);
44978strings[469] = str->add(strings[469]);
44979strings[7719] = str->add("images/329");
44980strings[7720] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/329");
44981strings[469] = str->add(strings[469]);
44982strings[7719] = str->add(strings[7719]);
44983strings[1841] = str->add(strings[1841]);
44984strings[7629] = str->add(strings[7629]);
44985strings[1841] = str->add(strings[1841]);
44986strings[469] = str->add(strings[469]);
44987strings[2682] = str->add(strings[2682]);
44988strings[7599] = str->add(strings[7599]);
44989strings[64] = str->add(strings[64]);
44990strings[2615] = str->add(strings[2615]);
44991strings[64] = str->add(strings[64]);
44992strings[7599] = str->add(strings[7599]);
44993strings[2262] = str->add(strings[2262]);
44994strings[64] = str->add(strings[64]);
44995strings[4296] = str->add(strings[4296]);
44996strings[64] = str->add(strings[64]);
44997strings[7631] = str->add(strings[7631]);
44998strings[64] = str->add(strings[64]);
44999strings[7633] = str->add(strings[7633]);
45000str->del(strings[64]);
45001strings[385] = str->add(strings[385]);
45002strings[2262] = str->add(strings[2262]);
45003strings[2262] = str->add(strings[2262]);
45004strings[2262] = str->add(strings[2262]);
45005strings[64] = str->add(strings[64]);
45006strings[2986] = str->add(strings[2986]);
45007strings[64] = str->add(strings[64]);
45008strings[2186] = str->add(strings[2186]);
45009strings[469] = str->add(strings[469]);
45010strings[2896] = str->add(strings[2896]);
45011strings[1841] = str->add(strings[1841]);
45012strings[7629] = str->add(strings[7629]);
45013strings[1841] = str->add(strings[1841]);
45014strings[469] = str->add(strings[469]);
45015strings[2714] = str->add(strings[2714]);
45016strings[2714] = str->add(strings[2714]);
45017strings[7599] = str->add(strings[7599]);
45018strings[64] = str->add(strings[64]);
45019strings[2616] = str->add(strings[2616]);
45020strings[64] = str->add(strings[64]);
45021strings[7599] = str->add(strings[7599]);
45022strings[2358] = str->add(strings[2358]);
45023strings[64] = str->add(strings[64]);
45024strings[7647] = str->add(strings[7647]);
45025strings[64] = str->add(strings[64]);
45026strings[7633] = str->add(strings[7633]);
45027str->del(strings[64]);
45028strings[385] = str->add(strings[385]);
45029strings[2358] = str->add(strings[2358]);
45030strings[2358] = str->add(strings[2358]);
45031strings[2358] = str->add(strings[2358]);
45032strings[64] = str->add(strings[64]);
45033strings[2986] = str->add(strings[2986]);
45034strings[64] = str->add(strings[64]);
45035strings[2186] = str->add(strings[2186]);
45036strings[469] = str->add(strings[469]);
45037strings[7721] = str->add("images/316");
45038strings[7722] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/316");
45039strings[469] = str->add(strings[469]);
45040strings[7721] = str->add(strings[7721]);
45041strings[1841] = str->add(strings[1841]);
45042strings[7629] = str->add(strings[7629]);
45043strings[1841] = str->add(strings[1841]);
45044strings[469] = str->add(strings[469]);
45045strings[2699] = str->add(strings[2699]);
45046strings[2699] = str->add(strings[2699]);
45047strings[7599] = str->add(strings[7599]);
45048strings[64] = str->add(strings[64]);
45049strings[2615] = str->add(strings[2615]);
45050strings[64] = str->add(strings[64]);
45051strings[7599] = str->add(strings[7599]);
45052strings[2443] = str->add(strings[2443]);
45053strings[64] = str->add(strings[64]);
45054strings[4296] = str->add(strings[4296]);
45055strings[64] = str->add(strings[64]);
45056strings[7631] = str->add(strings[7631]);
45057strings[64] = str->add(strings[64]);
45058strings[7633] = str->add(strings[7633]);
45059str->del(strings[64]);
45060strings[385] = str->add(strings[385]);
45061strings[2443] = str->add(strings[2443]);
45062strings[2443] = str->add(strings[2443]);
45063strings[2443] = str->add(strings[2443]);
45064strings[64] = str->add(strings[64]);
45065strings[2986] = str->add(strings[2986]);
45066strings[64] = str->add(strings[64]);
45067strings[2186] = str->add(strings[2186]);
45068strings[469] = str->add(strings[469]);
45069strings[7723] = str->add("images/331");
45070strings[7724] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/331");
45071strings[469] = str->add(strings[469]);
45072strings[7723] = str->add(strings[7723]);
45073strings[1841] = str->add(strings[1841]);
45074strings[7629] = str->add(strings[7629]);
45075strings[1841] = str->add(strings[1841]);
45076strings[469] = str->add(strings[469]);
45077strings[2716] = str->add(strings[2716]);
45078strings[2716] = str->add(strings[2716]);
45079strings[7599] = str->add(strings[7599]);
45080strings[64] = str->add(strings[64]);
45081strings[2616] = str->add(strings[2616]);
45082strings[64] = str->add(strings[64]);
45083strings[7599] = str->add(strings[7599]);
45084strings[2526] = str->add(strings[2526]);
45085strings[64] = str->add(strings[64]);
45086strings[7647] = str->add(strings[7647]);
45087strings[64] = str->add(strings[64]);
45088strings[7633] = str->add(strings[7633]);
45089str->del(strings[64]);
45090strings[385] = str->add(strings[385]);
45091strings[2526] = str->add(strings[2526]);
45092strings[2526] = str->add(strings[2526]);
45093strings[2526] = str->add(strings[2526]);
45094strings[64] = str->add(strings[64]);
45095strings[2986] = str->add(strings[2986]);
45096strings[64] = str->add(strings[64]);
45097strings[2186] = str->add(strings[2186]);
45098strings[469] = str->add(strings[469]);
45099strings[7725] = str->add("images/332");
45100strings[7726] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/332");
45101strings[469] = str->add(strings[469]);
45102strings[7725] = str->add(strings[7725]);
45103strings[1841] = str->add(strings[1841]);
45104strings[7629] = str->add(strings[7629]);
45105strings[1841] = str->add(strings[1841]);
45106strings[469] = str->add(strings[469]);
45107strings[2718] = str->add(strings[2718]);
45108strings[2718] = str->add(strings[2718]);
45109strings[7599] = str->add(strings[7599]);
45110strings[64] = str->add(strings[64]);
45111strings[2615] = str->add(strings[2615]);
45112strings[64] = str->add(strings[64]);
45113strings[7599] = str->add(strings[7599]);
45114strings[2502] = str->add(strings[2502]);
45115strings[64] = str->add(strings[64]);
45116strings[4296] = str->add(strings[4296]);
45117strings[64] = str->add(strings[64]);
45118strings[7631] = str->add(strings[7631]);
45119strings[64] = str->add(strings[64]);
45120strings[7633] = str->add(strings[7633]);
45121str->del(strings[64]);
45122strings[385] = str->add(strings[385]);
45123strings[2502] = str->add(strings[2502]);
45124strings[2502] = str->add(strings[2502]);
45125strings[2502] = str->add(strings[2502]);
45126strings[64] = str->add(strings[64]);
45127strings[2986] = str->add(strings[2986]);
45128strings[64] = str->add(strings[64]);
45129strings[2186] = str->add(strings[2186]);
45130strings[469] = str->add(strings[469]);
45131strings[7727] = str->add("images/337");
45132strings[7728] = str->add("/usr/devel/share/enlightenment/data/themes/default.edj//://images/337");
45133strings[469] = str->add(strings[469]);
45134strings[7727] = str->add(strings[7727]);
45135strings[1841] = str->add(strings[1841]);
45136strings[7629] = str->add(strings[7629]);
45137strings[1841] = str->add(strings[1841]);
45138strings[1895] = str->add(strings[1895]);
45139strings[3083] = str->add(strings[3083]);
45140strings[1770] = str->add(strings[1770]);
45141strings[7729] = str->add("icon.png");
45142strings[3083] = str->add(strings[3083]);
45143strings[1895] = str->add(strings[1895]);
45144strings[7730] = str->add("image");
45145strings[61] = str->add(strings[61]);
45146strings[3083] = str->add(strings[3083]);
45147strings[7599] = str->add(strings[7599]);
45148strings[64] = str->add(strings[64]);
45149strings[2616] = str->add(strings[2616]);
45150strings[64] = str->add(strings[64]);
45151strings[7599] = str->add(strings[7599]);
45152strings[1894] = str->add(strings[1894]);
45153strings[64] = str->add(strings[64]);
45154strings[7647] = str->add(strings[7647]);
45155strings[64] = str->add(strings[64]);
45156strings[7633] = str->add(strings[7633]);
45157str->del(strings[64]);
45158strings[385] = str->add(strings[385]);
45159strings[1894] = str->add(strings[1894]);
45160strings[1894] = str->add(strings[1894]);
45161strings[1894] = str->add(strings[1894]);
45162strings[64] = str->add(strings[64]);
45163strings[2986] = str->add(strings[2986]);
45164strings[64] = str->add(strings[64]);
45165strings[2186] = str->add(strings[2186]);
45166strings[1841] = str->add(strings[1841]);
45167strings[7629] = str->add(strings[7629]);
45168strings[1841] = str->add(strings[1841]);
45169strings[7629] = str->add(strings[7629]);
45170strings[7629] = str->add(strings[7629]);
45171strings[7629] = str->add(strings[7629]);
45172strings[7629] = str->add(strings[7629]);
45173strings[7629] = str->add(strings[7629]);
45174strings[7629] = str->add(strings[7629]);
45175strings[7629] = str->add(strings[7629]);
45176strings[7629] = str->add(strings[7629]);
45177strings[7629] = str->add(strings[7629]);
45178strings[7629] = str->add(strings[7629]);
45179strings[7731] = str->add("e,action,show,hbar");
45180strings[7596] = str->add(strings[7596]);
45181str->del(strings[7703]);
45182str->del(strings[7704]);
45183str->del(strings[1932]);
45184str->del(strings[7704]);
45185str->del(strings[7629]);
45186strings[7703] = str->add(strings[7703]);
45187strings[7732] = str->add("sb_hbar_show");
45188strings[1932] = str->add(strings[1932]);
45189strings[7732] = str->add(strings[7732]);
45190str->del(strings[7731]);
45191str->del(strings[7596]);
45192strings[7733] = str->add("e,action,show,vbar");
45193strings[7596] = str->add(strings[7596]);
45194str->del(strings[7703]);
45195str->del(strings[7732]);
45196str->del(strings[1932]);
45197str->del(strings[7732]);
45198strings[7703] = str->add(strings[7703]);
45199strings[7734] = str->add("sb_vbar_show");
45200strings[1932] = str->add(strings[1932]);
45201strings[7734] = str->add(strings[7734]);
45202str->del(strings[7733]);
45203str->del(strings[7596]);
45204strings[7735] = str->add("e,state,unfocused");
45205strings[7596] = str->add(strings[7596]);
45206str->del(strings[7595]);
45207str->del(strings[7596]);
45208str->del(strings[7597]);
45209str->del(strings[7596]);
45210str->del(strings[7599]);
45211str->del(strings[7599]);
45212str->del(strings[1841]);
45213str->del(strings[7599]);
45214str->del(strings[7599]);
45215str->del(strings[1841]);
45216str->del(strings[7629]);
45217str->del(strings[1841]);
45218str->del(strings[7599]);
45219str->del(strings[7599]);
45220str->del(strings[1841]);
45221str->del(strings[7629]);
45222str->del(strings[1841]);
45223str->del(strings[7599]);
45224str->del(strings[7599]);
45225str->del(strings[1841]);
45226str->del(strings[7629]);
45227str->del(strings[1841]);
45228str->del(strings[7599]);
45229str->del(strings[7599]);
45230str->del(strings[1841]);
45231str->del(strings[7629]);
45232str->del(strings[1841]);
45233str->del(strings[7599]);
45234str->del(strings[7599]);
45235str->del(strings[1841]);
45236str->del(strings[7629]);
45237str->del(strings[1841]);
45238str->del(strings[7599]);
45239str->del(strings[7599]);
45240str->del(strings[1841]);
45241str->del(strings[7629]);
45242str->del(strings[1841]);
45243str->del(strings[7599]);
45244str->del(strings[7599]);
45245str->del(strings[1841]);
45246str->del(strings[7629]);
45247str->del(strings[1841]);
45248str->del(strings[7599]);
45249str->del(strings[7599]);
45250str->del(strings[1841]);
45251str->del(strings[7629]);
45252str->del(strings[1841]);
45253str->del(strings[7599]);
45254str->del(strings[7599]);
45255str->del(strings[1841]);
45256str->del(strings[7629]);
45257str->del(strings[1841]);
45258str->del(strings[7599]);
45259str->del(strings[7599]);
45260str->del(strings[1841]);
45261str->del(strings[7629]);
45262str->del(strings[1841]);
45263str->del(strings[7629]);
45264str->del(strings[7629]);
45265str->del(strings[7629]);
45266str->del(strings[7629]);
45267str->del(strings[7629]);
45268str->del(strings[7629]);
45269str->del(strings[7629]);
45270str->del(strings[7629]);
45271str->del(strings[7629]);
45272str->del(strings[7629]);
45273str->del(strings[7703]);
45274str->del(strings[7704]);
45275str->del(strings[1932]);
45276str->del(strings[7704]);
45277str->del(strings[7629]);
45278str->del(strings[7599]);
45279str->del(strings[1841]);
45280str->del(strings[7629]);
45281str->del(strings[7629]);
45282str->del(strings[7703]);
45283str->del(strings[7714]);
45284str->del(strings[1932]);
45285str->del(strings[7714]);
45286str->del(strings[7629]);
45287str->del(strings[7629]);
45288str->del(strings[1841]);
45289str->del(strings[7715]);
45290str->del(strings[7596]);
45291strings[7703] = str->add(strings[7703]);
45292strings[7736] = str->add("go_active");
45293str->del(strings[7716]);
45294str->del(strings[7596]);
45295str->del(strings[7599]);
45296str->del(strings[7599]);
45297str->del(strings[1841]);
45298str->del(strings[7629]);
45299str->del(strings[1841]);
45300str->del(strings[7599]);
45301str->del(strings[7599]);
45302str->del(strings[1841]);
45303str->del(strings[7629]);
45304str->del(strings[1841]);
45305str->del(strings[7599]);
45306str->del(strings[7599]);
45307str->del(strings[1841]);
45308str->del(strings[7629]);
45309str->del(strings[1841]);
45310str->del(strings[7599]);
45311str->del(strings[7599]);
45312str->del(strings[1841]);
45313str->del(strings[7629]);
45314str->del(strings[1841]);
45315str->del(strings[7599]);
45316str->del(strings[7599]);
45317str->del(strings[1841]);
45318str->del(strings[7629]);
45319str->del(strings[1841]);
45320str->del(strings[7599]);
45321str->del(strings[7599]);
45322str->del(strings[1841]);
45323str->del(strings[7629]);
45324str->del(strings[1841]);
45325str->del(strings[7599]);
45326str->del(strings[7599]);
45327str->del(strings[1841]);
45328str->del(strings[7629]);
45329str->del(strings[1841]);
45330str->del(strings[7599]);
45331str->del(strings[7599]);
45332str->del(strings[1841]);
45333str->del(strings[7629]);
45334str->del(strings[1841]);
45335str->del(strings[7599]);
45336str->del(strings[7599]);
45337str->del(strings[1841]);
45338str->del(strings[7629]);
45339str->del(strings[1841]);
45340str->del(strings[7599]);
45341str->del(strings[7599]);
45342str->del(strings[1841]);
45343str->del(strings[7629]);
45344str->del(strings[1841]);
45345str->del(strings[7629]);
45346str->del(strings[7629]);
45347str->del(strings[7629]);
45348str->del(strings[7629]);
45349str->del(strings[7629]);
45350str->del(strings[7629]);
45351str->del(strings[7629]);
45352str->del(strings[7629]);
45353str->del(strings[7629]);
45354str->del(strings[7629]);
45355str->del(strings[7703]);
45356str->del(strings[7734]);
45357str->del(strings[1932]);
45358str->del(strings[7734]);
45359strings[7703] = str->add(strings[7703]);
45360strings[7737] = str->add("off");
45361str->del(strings[7735]);
45362str->del(strings[7596]);
45363str->del(strings[7703]);
45364str->del(strings[7736]);
45365str->del(strings[7703]);
45366str->del(strings[7737]);
45367strings[7738] = str->add("e,action,mouse,move");
45368strings[7739] = str->add("e");
45369strings[7738] = str->add(strings[7738]);
45370strings[7739] = str->add(strings[7739]);
45371str->del(strings[7738]);
45372str->del(strings[7739]);
45373str->del(strings[7738]);
45374str->del(strings[7739]);
45375strings[1933] = str->add(strings[1933]);
45376str->del(strings[1933]);
45377str->del(strings[64]);
45378str->del(strings[2634]);
45379strings[1933] = str->add(strings[1933]);
45380str->del(strings[1933]);
45381str->del(strings[64]);
45382str->del(strings[2584]);
45383strings[1933] = str->add(strings[1933]);
45384str->del(strings[1933]);
45385str->del(strings[469]);
45386str->del(strings[2686]);
45387strings[1933] = str->add(strings[1933]);
45388str->del(strings[1933]);
45389str->del(strings[6483]);
45390str->del(strings[6483]);
45391str->del(strings[6483]);
45392str->del(strings[64]);
45393str->del(strings[2585]);
45394strings[1933] = str->add(strings[1933]);
45395str->del(strings[1933]);
45396str->del(strings[64]);
45397str->del(strings[2586]);
45398strings[1933] = str->add(strings[1933]);
45399str->del(strings[1933]);
45400str->del(strings[64]);
45401str->del(strings[2634]);
45402strings[1933] = str->add(strings[1933]);
45403str->del(strings[1933]);
45404str->del(strings[64]);
45405str->del(strings[2584]);
45406strings[1933] = str->add(strings[1933]);
45407str->del(strings[1933]);
45408str->del(strings[469]);
45409str->del(strings[2715]);
45410strings[1933] = str->add(strings[1933]);
45411str->del(strings[1933]);
45412str->del(strings[2231]);
45413str->del(strings[2231]);
45414str->del(strings[2231]);
45415str->del(strings[64]);
45416str->del(strings[2585]);
45417strings[1933] = str->add(strings[1933]);
45418str->del(strings[1933]);
45419str->del(strings[64]);
45420str->del(strings[2586]);
45421strings[1933] = str->add(strings[1933]);
45422str->del(strings[1933]);
45423str->del(strings[64]);
45424str->del(strings[2583]);
45425strings[1933] = str->add(strings[1933]);
45426str->del(strings[1933]);
45427str->del(strings[64]);
45428str->del(strings[2584]);
45429strings[1933] = str->add(strings[1933]);
45430str->del(strings[1933]);
45431str->del(strings[469]);
45432str->del(strings[2691]);
45433strings[1933] = str->add(strings[1933]);
45434str->del(strings[1933]);
45435str->del(strings[2338]);
45436str->del(strings[2338]);
45437str->del(strings[2338]);
45438str->del(strings[64]);
45439str->del(strings[2585]);
45440strings[1933] = str->add(strings[1933]);
45441str->del(strings[1933]);
45442str->del(strings[64]);
45443str->del(strings[2583]);
45444strings[1933] = str->add(strings[1933]);
45445str->del(strings[1933]);
45446str->del(strings[64]);
45447str->del(strings[2584]);
45448strings[1933] = str->add(strings[1933]);
45449str->del(strings[1933]);
45450str->del(strings[469]);
45451str->del(strings[2693]);
45452strings[1933] = str->add(strings[1933]);
45453str->del(strings[1933]);
45454str->del(strings[6484]);
45455str->del(strings[6484]);
45456str->del(strings[6484]);
45457str->del(strings[64]);
45458str->del(strings[2585]);
45459strings[1933] = str->add(strings[1933]);
45460str->del(strings[1933]);
45461str->del(strings[64]);
45462str->del(strings[2582]);
45463strings[1933] = str->add(strings[1933]);
45464str->del(strings[1933]);
45465str->del(strings[64]);
45466str->del(strings[2634]);
45467strings[1933] = str->add(strings[1933]);
45468str->del(strings[1933]);
45469str->del(strings[64]);
45470str->del(strings[2584]);
45471strings[1933] = str->add(strings[1933]);
45472str->del(strings[1933]);
45473str->del(strings[469]);
45474str->del(strings[2687]);
45475strings[1933] = str->add(strings[1933]);
45476str->del(strings[1933]);
45477str->del(strings[1619]);
45478str->del(strings[1619]);
45479str->del(strings[1619]);
45480str->del(strings[64]);
45481str->del(strings[2585]);
45482strings[1933] = str->add(strings[1933]);
45483str->del(strings[1933]);
45484str->del(strings[64]);
45485str->del(strings[2586]);
45486strings[1933] = str->add(strings[1933]);
45487str->del(strings[1933]);
45488str->del(strings[64]);
45489str->del(strings[2634]);
45490strings[1933] = str->add(strings[1933]);
45491str->del(strings[1933]);
45492str->del(strings[64]);
45493str->del(strings[2584]);
45494strings[1933] = str->add(strings[1933]);
45495str->del(strings[1933]);
45496str->del(strings[469]);
45497str->del(strings[2682]);
45498strings[1933] = str->add(strings[1933]);
45499str->del(strings[1933]);
45500str->del(strings[2552]);
45501str->del(strings[2552]);
45502str->del(strings[2552]);
45503str->del(strings[64]);
45504str->del(strings[2585]);
45505strings[1933] = str->add(strings[1933]);
45506str->del(strings[1933]);
45507str->del(strings[64]);
45508str->del(strings[2586]);
45509strings[1933] = str->add(strings[1933]);
45510str->del(strings[1933]);
45511str->del(strings[64]);
45512str->del(strings[2582]);
45513strings[1933] = str->add(strings[1933]);
45514str->del(strings[1933]);
45515str->del(strings[64]);
45516str->del(strings[2634]);
45517strings[1933] = str->add(strings[1933]);
45518str->del(strings[1933]);
45519str->del(strings[64]);
45520str->del(strings[2584]);
45521strings[1933] = str->add(strings[1933]);
45522str->del(strings[1933]);
45523str->del(strings[469]);
45524str->del(strings[2671]);
45525strings[1933] = str->add(strings[1933]);
45526str->del(strings[1933]);
45527str->del(strings[1712]);
45528str->del(strings[1712]);
45529str->del(strings[1712]);
45530str->del(strings[64]);
45531str->del(strings[2585]);
45532strings[1933] = str->add(strings[1933]);
45533str->del(strings[1933]);
45534str->del(strings[64]);
45535str->del(strings[2586]);
45536strings[1933] = str->add(strings[1933]);
45537str->del(strings[1933]);
45538str->del(strings[64]);
45539str->del(strings[2582]);
45540strings[1933] = str->add(strings[1933]);
45541str->del(strings[1933]);
45542str->del(strings[64]);
45543str->del(strings[2634]);
45544strings[1933] = str->add(strings[1933]);
45545str->del(strings[1933]);
45546str->del(strings[64]);
45547str->del(strings[2584]);
45548strings[1933] = str->add(strings[1933]);
45549str->del(strings[1933]);
45550str->del(strings[469]);
45551str->del(strings[2688]);
45552strings[1933] = str->add(strings[1933]);
45553str->del(strings[1933]);
45554str->del(strings[6488]);
45555str->del(strings[6488]);
45556str->del(strings[6488]);
45557str->del(strings[64]);
45558str->del(strings[2585]);
45559strings[1933] = str->add(strings[1933]);
45560str->del(strings[1933]);
45561str->del(strings[64]);
45562str->del(strings[2586]);
45563strings[1933] = str->add(strings[1933]);
45564str->del(strings[1933]);
45565str->del(strings[64]);
45566str->del(strings[2582]);
45567strings[1933] = str->add(strings[1933]);
45568str->del(strings[1933]);
45569str->del(strings[64]);
45570str->del(strings[2634]);
45571strings[1933] = str->add(strings[1933]);
45572str->del(strings[1933]);
45573str->del(strings[64]);
45574str->del(strings[2584]);
45575strings[1933] = str->add(strings[1933]);
45576str->del(strings[1933]);
45577str->del(strings[469]);
45578str->del(strings[2690]);
45579strings[1933] = str->add(strings[1933]);
45580str->del(strings[1933]);
45581str->del(strings[1721]);
45582str->del(strings[1721]);
45583str->del(strings[1721]);
45584str->del(strings[64]);
45585str->del(strings[2585]);
45586strings[1933] = str->add(strings[1933]);
45587str->del(strings[1933]);
45588str->del(strings[64]);
45589str->del(strings[2586]);
45590strings[1933] = str->add(strings[1933]);
45591str->del(strings[1933]);
45592str->del(strings[6482]);
45593str->del(strings[6482]);
45594str->del(strings[6482]);
45595str->del(strings[64]);
45596str->del(strings[2581]);
45597str->del(strings[64]);
45598str->del(strings[2886]);
45599str->del(strings[64]);
45600str->del(strings[2888]);
45601str->del(strings[469]);
45602str->del(strings[2871]);
45603str->del(strings[6483]);
45604str->del(strings[385]);
45605str->del(strings[64]);
45606str->del(strings[2913]);
45607str->del(strings[64]);
45608str->del(strings[2886]);
45609str->del(strings[64]);
45610str->del(strings[2888]);
45611str->del(strings[469]);
45612str->del(strings[2890]);
45613str->del(strings[2231]);
45614str->del(strings[385]);
45615str->del(strings[64]);
45616str->del(strings[2913]);
45617str->del(strings[64]);
45618str->del(strings[2886]);
45619str->del(strings[64]);
45620str->del(strings[2888]);
45621str->del(strings[469]);
45622str->del(strings[2892]);
45623str->del(strings[2338]);
45624str->del(strings[385]);
45625str->del(strings[64]);
45626str->del(strings[2886]);
45627str->del(strings[64]);
45628str->del(strings[2888]);
45629str->del(strings[469]);
45630str->del(strings[4965]);
45631str->del(strings[469]);
45632str->del(strings[4967]);
45633str->del(strings[6484]);
45634str->del(strings[385]);
45635str->del(strings[64]);
45636str->del(strings[2915]);
45637str->del(strings[64]);
45638str->del(strings[2886]);
45639str->del(strings[64]);
45640str->del(strings[2888]);
45641str->del(strings[469]);
45642str->del(strings[2894]);
45643str->del(strings[1619]);
45644str->del(strings[385]);
45645str->del(strings[64]);
45646str->del(strings[2913]);
45647str->del(strings[64]);
45648str->del(strings[2886]);
45649str->del(strings[64]);
45650str->del(strings[2888]);
45651str->del(strings[469]);
45652str->del(strings[2896]);
45653str->del(strings[2552]);
45654str->del(strings[385]);
45655str->del(strings[64]);
45656str->del(strings[2913]);
45657str->del(strings[64]);
45658str->del(strings[2915]);
45659str->del(strings[64]);
45660str->del(strings[2886]);
45661str->del(strings[64]);
45662str->del(strings[2888]);
45663str->del(strings[469]);
45664str->del(strings[2898]);
45665str->del(strings[469]);
45666str->del(strings[2900]);
45667str->del(strings[1712]);
45668str->del(strings[385]);
45669str->del(strings[64]);
45670str->del(strings[2913]);
45671str->del(strings[64]);
45672str->del(strings[2915]);
45673str->del(strings[64]);
45674str->del(strings[2886]);
45675str->del(strings[64]);
45676str->del(strings[2888]);
45677str->del(strings[469]);
45678str->del(strings[2902]);
45679str->del(strings[6488]);
45680str->del(strings[385]);
45681str->del(strings[64]);
45682str->del(strings[2913]);
45683str->del(strings[64]);
45684str->del(strings[2915]);
45685str->del(strings[64]);
45686str->del(strings[2886]);
45687str->del(strings[64]);
45688str->del(strings[2888]);
45689str->del(strings[469]);
45690str->del(strings[2904]);
45691str->del(strings[1721]);
45692str->del(strings[385]);
45693str->del(strings[64]);
45694str->del(strings[2913]);
45695str->del(strings[64]);
45696str->del(strings[1949]);
45697str->del(strings[64]);
45698str->del(strings[1880]);
45699str->del(strings[64]);
45700str->del(strings[1876]);
45701str->del(strings[6482]);
45702str->del(strings[379]);
45703str->del(strings[64]);
45704str->del(strings[1874]);
45705str->del(strings[361]);
45706str->del(strings[362]);
45707strings[1933] = str->add(strings[1933]);
45708str->del(strings[1933]);
45709str->del(strings[64]);
45710str->del(strings[2583]);
45711strings[1933] = str->add(strings[1933]);
45712str->del(strings[1933]);
45713str->del(strings[64]);
45714str->del(strings[2584]);
45715strings[1933] = str->add(strings[1933]);
45716str->del(strings[1933]);
45717str->del(strings[469]);
45718str->del(strings[2688]);
45719strings[1933] = str->add(strings[1933]);
45720str->del(strings[1933]);
45721str->del(strings[2224]);
45722str->del(strings[2224]);
45723str->del(strings[2224]);
45724str->del(strings[64]);
45725str->del(strings[2585]);
45726strings[1933] = str->add(strings[1933]);
45727str->del(strings[1933]);
45728str->del(strings[64]);
45729str->del(strings[2582]);
45730strings[1933] = str->add(strings[1933]);
45731str->del(strings[1933]);
45732str->del(strings[64]);
45733str->del(strings[2583]);
45734strings[1933] = str->add(strings[1933]);
45735str->del(strings[1933]);
45736str->del(strings[64]);
45737str->del(strings[2584]);
45738strings[1933] = str->add(strings[1933]);
45739str->del(strings[1933]);
45740str->del(strings[469]);
45741str->del(strings[2685]);
45742strings[1933] = str->add(strings[1933]);
45743str->del(strings[1933]);
45744str->del(strings[4]);
45745str->del(strings[4]);
45746str->del(strings[4]);
45747str->del(strings[64]);
45748str->del(strings[2585]);
45749strings[1933] = str->add(strings[1933]);
45750str->del(strings[1933]);
45751str->del(strings[64]);
45752str->del(strings[2583]);
45753strings[1933] = str->add(strings[1933]);
45754str->del(strings[1933]);
45755str->del(strings[64]);
45756str->del(strings[2584]);
45757strings[1933] = str->add(strings[1933]);
45758str->del(strings[1933]);
45759str->del(strings[1926]);
45760str->del(strings[3083]);
45761strings[1933] = str->add(strings[1933]);
45762str->del(strings[1933]);
45763str->del(strings[1925]);
45764str->del(strings[1925]);
45765str->del(strings[1925]);
45766str->del(strings[64]);
45767str->del(strings[2585]);
45768strings[1933] = str->add(strings[1933]);
45769str->del(strings[1933]);
45770str->del(strings[64]);
45771str->del(strings[2583]);
45772strings[1933] = str->add(strings[1933]);
45773str->del(strings[1933]);
45774str->del(strings[64]);
45775str->del(strings[2584]);
45776strings[1933] = str->add(strings[1933]);
45777str->del(strings[1933]);
45778str->del(strings[469]);
45779str->del(strings[2711]);
45780strings[1933] = str->add(strings[1933]);
45781str->del(strings[1933]);
45782str->del(strings[2494]);
45783str->del(strings[2494]);
45784str->del(strings[2494]);
45785str->del(strings[64]);
45786str->del(strings[2585]);
45787strings[1933] = str->add(strings[1933]);
45788str->del(strings[1933]);
45789str->del(strings[64]);
45790str->del(strings[2583]);
45791strings[1933] = str->add(strings[1933]);
45792str->del(strings[1933]);
45793str->del(strings[64]);
45794str->del(strings[2584]);
45795strings[1933] = str->add(strings[1933]);
45796str->del(strings[1933]);
45797str->del(strings[469]);
45798str->del(strings[2680]);
45799strings[1933] = str->add(strings[1933]);
45800str->del(strings[1933]);
45801str->del(strings[2514]);
45802str->del(strings[2514]);
45803str->del(strings[2514]);
45804str->del(strings[64]);
45805str->del(strings[2585]);
45806strings[1933] = str->add(strings[1933]);
45807str->del(strings[1933]);
45808str->del(strings[64]);
45809str->del(strings[2583]);
45810strings[1933] = str->add(strings[1933]);
45811str->del(strings[1933]);
45812str->del(strings[64]);
45813str->del(strings[2584]);
45814strings[1933] = str->add(strings[1933]);
45815str->del(strings[1933]);
45816str->del(strings[469]);
45817str->del(strings[2713]);
45818strings[1933] = str->add(strings[1933]);
45819str->del(strings[1933]);
45820str->del(strings[2536]);
45821str->del(strings[2536]);
45822str->del(strings[2536]);
45823str->del(strings[64]);
45824str->del(strings[2585]);
45825strings[1933] = str->add(strings[1933]);
45826str->del(strings[1933]);
45827str->del(strings[1842]);
45828str->del(strings[1842]);
45829str->del(strings[64]);
45830str->del(strings[2581]);
45831str->del(strings[64]);
45832str->del(strings[2886]);
45833str->del(strings[64]);
45834str->del(strings[2888]);
45835str->del(strings[469]);
45836str->del(strings[2902]);
45837str->del(strings[2224]);
45838str->del(strings[385]);
45839str->del(strings[64]);
45840str->del(strings[2915]);
45841str->del(strings[64]);
45842str->del(strings[2886]);
45843str->del(strings[64]);
45844str->del(strings[2888]);
45845str->del(strings[469]);
45846str->del(strings[3089]);
45847str->del(strings[4]);
45848str->del(strings[385]);
45849str->del(strings[64]);
45850str->del(strings[2886]);
45851str->del(strings[64]);
45852str->del(strings[2888]);
45853str->del(strings[1926]);
45854str->del(strings[1552]);
45855str->del(strings[1925]);
45856str->del(strings[385]);
45857str->del(strings[64]);
45858str->del(strings[2886]);
45859str->del(strings[64]);
45860str->del(strings[2888]);
45861str->del(strings[469]);
45862str->del(strings[3092]);
45863str->del(strings[2494]);
45864str->del(strings[385]);
45865str->del(strings[64]);
45866str->del(strings[2886]);
45867str->del(strings[64]);
45868str->del(strings[2888]);
45869str->del(strings[469]);
45870str->del(strings[3094]);
45871str->del(strings[2514]);
45872str->del(strings[385]);
45873str->del(strings[64]);
45874str->del(strings[2886]);
45875str->del(strings[64]);
45876str->del(strings[2888]);
45877str->del(strings[469]);
45878str->del(strings[3096]);
45879str->del(strings[2536]);
45880str->del(strings[385]);
45881str->del(strings[64]);
45882str->del(strings[1949]);
45883str->del(strings[64]);
45884str->del(strings[1880]);
45885str->del(strings[64]);
45886str->del(strings[1876]);
45887str->del(strings[379]);
45888str->del(strings[64]);
45889str->del(strings[1874]);
45890str->del(strings[361]);
45891str->del(strings[362]);
45892str->del(strings[469]);
45893str->del(strings[2686]);
45894str->del(strings[6483]);
45895str->del(strings[469]);
45896str->del(strings[2715]);
45897str->del(strings[2231]);
45898str->del(strings[469]);
45899str->del(strings[2691]);
45900str->del(strings[2338]);
45901str->del(strings[469]);
45902str->del(strings[2693]);
45903str->del(strings[6484]);
45904str->del(strings[469]);
45905str->del(strings[2687]);
45906str->del(strings[6485]);
45907str->del(strings[469]);
45908str->del(strings[2711]);
45909str->del(strings[2494]);
45910str->del(strings[6486]);
45911str->del(strings[469]);
45912str->del(strings[2687]);
45913str->del(strings[1619]);
45914str->del(strings[469]);
45915str->del(strings[2682]);
45916str->del(strings[2552]);
45917str->del(strings[469]);
45918str->del(strings[2671]);
45919str->del(strings[6487]);
45920str->del(strings[469]);
45921str->del(strings[2680]);
45922str->del(strings[2514]);
45923str->del(strings[469]);
45924str->del(strings[2672]);
45925str->del(strings[1713]);
45926str->del(strings[469]);
45927str->del(strings[2673]);
45928str->del(strings[1714]);
45929str->del(strings[469]);
45930str->del(strings[2671]);
45931str->del(strings[1712]);
45932str->del(strings[469]);
45933str->del(strings[2688]);
45934str->del(strings[6488]);
45935str->del(strings[469]);
45936str->del(strings[2708]);
45937str->del(strings[6640]);
45938str->del(strings[469]);
45939str->del(strings[2677]);
45940str->del(strings[1726]);
45941str->del(strings[469]);
45942str->del(strings[2678]);
45943str->del(strings[6641]);
45944str->del(strings[469]);
45945str->del(strings[2676]);
45946str->del(strings[1724]);
45947str->del(strings[469]);
45948str->del(strings[2675]);
45949str->del(strings[1722]);
45950str->del(strings[469]);
45951str->del(strings[2674]);
45952str->del(strings[6642]);
45953str->del(strings[469]);
45954str->del(strings[2690]);
45955str->del(strings[1721]);
45956str->del(strings[6482]);
45957str->del(strings[469]);
45958str->del(strings[2688]);
45959str->del(strings[2224]);
45960str->del(strings[469]);
45961str->del(strings[2685]);
45962str->del(strings[4]);
45963str->del(strings[1926]);
45964str->del(strings[3083]);
45965str->del(strings[1925]);
45966str->del(strings[469]);
45967str->del(strings[2711]);
45968str->del(strings[2494]);
45969str->del(strings[469]);
45970str->del(strings[2680]);
45971str->del(strings[2514]);
45972str->del(strings[469]);
45973str->del(strings[2713]);
45974str->del(strings[2536]);
45975strings[862] = str->add(strings[862]);
45976strings[64] = str->add(strings[64]);
45977strings[2577] = str->add(strings[2577]);
45978strings[2577] = str->add(strings[2577]);
45979strings[64] = str->add(strings[64]);
45980strings[64] = str->add(strings[64]);
45981strings[7740] = str->add("load");
45982strings[306] = str->add(strings[306]);
45983strings[7741] = str->add("resize");
45984str->del(strings[64]);
45985strings[379] = str->add(strings[379]);
45986strings[306] = str->add(strings[306]);
45987strings[306] = str->add(strings[306]);
45988strings[1842] = str->add(strings[1842]);
45989str->del(strings[306]);
45990strings[64] = str->add(strings[64]);
45991strings[1865] = str->add(strings[1865]);
45992strings[64] = str->add(strings[64]);
45993strings[1872] = str->add(strings[1872]);
45994strings[7742] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/4");
45995strings[64] = str->add(strings[64]);
45996strings[1872] = str->add(strings[1872]);
45997strings[306] = str->add(strings[306]);
45998str->del(strings[306]);
45999strings[64] = str->add(strings[64]);
46000strings[2276] = str->add(strings[2276]);
46001strings[64] = str->add(strings[64]);
46002strings[3259] = str->add(strings[3259]);
46003strings[64] = str->add(strings[64]);
46004strings[3259] = str->add(strings[3259]);
46005strings[64] = str->add(strings[64]);
46006strings[2292] = str->add(strings[2292]);
46007strings[306] = str->add(strings[306]);
46008str->del(strings[306]);
46009strings[306] = str->add(strings[306]);
46010str->del(strings[1842]);
46011strings[306] = str->add(strings[306]);
46012strings[64] = str->add(strings[64]);
46013strings[1880] = str->add(strings[1880]);
46014strings[64] = str->add(strings[64]);
46015strings[3279] = str->add(strings[3279]);
46016strings[64] = str->add(strings[64]);
46017strings[2310] = str->add(strings[2310]);
46018strings[64] = str->add(strings[64]);
46019strings[1876] = str->add(strings[1876]);
46020str->del(strings[64]);
46021strings[379] = str->add(strings[379]);
46022strings[306] = str->add(strings[306]);
46023strings[306] = str->add(strings[306]);
46024strings[306] = str->add(strings[306]);
46025strings[64] = str->add(strings[64]);
46026strings[1874] = str->add(strings[1874]);
46027strings[64] = str->add(strings[64]);
46028strings[1878] = str->add(strings[1878]);
46029strings[7743] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/7");
46030strings[64] = str->add(strings[64]);
46031strings[1878] = str->add(strings[1878]);
46032strings[2085] = str->add(strings[2085]);
46033strings[2085] = str->add(strings[2085]);
46034strings[7741] = str->add(strings[7741]);
46035strings[1841] = str->add(strings[1841]);
46036strings[7741] = str->add(strings[7741]);
46037strings[469] = str->add(strings[469]);
46038strings[2688] = str->add(strings[2688]);
46039strings[7740] = str->add(strings[7740]);
46040strings[1841] = str->add(strings[1841]);
46041str->del(strings[306]);
46042strings[306] = str->add(strings[306]);
46043str->del(strings[306]);
46044strings[306] = str->add(strings[306]);
46045str->del(strings[306]);
46046strings[306] = str->add(strings[306]);
46047str->del(strings[306]);
46048strings[306] = str->add(strings[306]);
46049strings[469] = str->add(strings[469]);
46050strings[2902] = str->add(strings[2902]);
46051strings[7741] = str->add(strings[7741]);
46052str->del(strings[190]);
46053str->del(strings[305]);
46054str->del(strings[306]);
46055str->del(strings[193]);
46056strings[190] = str->add(strings[190]);
46057strings[305] = str->add(strings[305]);
46058strings[306] = str->add(strings[306]);
46059strings[193] = str->add(strings[193]);
46060strings[7741] = str->add(strings[7741]);
46061strings[7741] = str->add(strings[7741]);
46062strings[7741] = str->add(strings[7741]);
46063strings[7741] = str->add(strings[7741]);
46064strings[7744] = str->add("e,action,hide,vbar");
46065strings[7745] = str->add("e");
46066str->del(strings[7741]);
46067strings[7746] = str->add("program,start");
46068strings[7747] = str->add("sb_vbar_hide");
46069strings[1932] = str->add(strings[1932]);
46070strings[7747] = str->add(strings[7747]);
46071str->del(strings[7744]);
46072str->del(strings[7745]);
46073strings[7741] = str->add(strings[7741]);
46074strings[7741] = str->add(strings[7741]);
46075strings[7741] = str->add(strings[7741]);
46076strings[7741] = str->add(strings[7741]);
46077strings[7741] = str->add(strings[7741]);
46078strings[7741] = str->add(strings[7741]);
46079strings[7741] = str->add(strings[7741]);
46080strings[7741] = str->add(strings[7741]);
46081strings[7741] = str->add(strings[7741]);
46082strings[7741] = str->add(strings[7741]);
46083str->del(strings[1892]);
46084strings[1892] = str->add(strings[1892]);
46085str->del(strings[1892]);
46086strings[1892] = str->add(strings[1892]);
46087str->del(strings[2231]);
46088strings[2231] = str->add(strings[2231]);
46089str->del(strings[2231]);
46090strings[2231] = str->add(strings[2231]);
46091str->del(strings[1670]);
46092strings[1670] = str->add(strings[1670]);
46093str->del(strings[1670]);
46094strings[1670] = str->add(strings[1670]);
46095str->del(strings[2388]);
46096strings[2388] = str->add(strings[2388]);
46097str->del(strings[2388]);
46098strings[2388] = str->add(strings[2388]);
46099str->del(strings[2552]);
46100strings[2552] = str->add(strings[2552]);
46101str->del(strings[2552]);
46102strings[2552] = str->add(strings[2552]);
46103str->del(strings[2252]);
46104strings[2252] = str->add(strings[2252]);
46105str->del(strings[2252]);
46106strings[2252] = str->add(strings[2252]);
46107str->del(strings[2368]);
46108strings[2368] = str->add(strings[2368]);
46109str->del(strings[2368]);
46110strings[2368] = str->add(strings[2368]);
46111str->del(strings[1901]);
46112strings[1901] = str->add(strings[1901]);
46113str->del(strings[1901]);
46114strings[1901] = str->add(strings[1901]);
46115str->del(strings[1]);
46116strings[1] = str->add(strings[1]);
46117str->del(strings[1]);
46118strings[1] = str->add(strings[1]);
46119str->del(strings[2408]);
46120strings[2408] = str->add(strings[2408]);
46121str->del(strings[2408]);
46122strings[2408] = str->add(strings[2408]);
46123strings[7741] = str->add(strings[7741]);
46124strings[7748] = str->add("e,action,hide,hbar");
46125strings[7749] = str->add("e");
46126str->del(strings[7741]);
46127strings[7746] = str->add(strings[7746]);
46128strings[7750] = str->add("sb_hbar_hide");
46129strings[1932] = str->add(strings[1932]);
46130strings[7750] = str->add(strings[7750]);
46131str->del(strings[7748]);
46132str->del(strings[7749]);
46133strings[7751] = str->add("e,action,hide,vbar");
46134strings[7752] = str->add("e");
46135str->del(strings[7746]);
46136str->del(strings[7750]);
46137str->del(strings[1932]);
46138str->del(strings[7750]);
46139strings[7746] = str->add(strings[7746]);
46140strings[7747] = str->add(strings[7747]);
46141strings[1932] = str->add(strings[1932]);
46142strings[7747] = str->add(strings[7747]);
46143str->del(strings[7751]);
46144str->del(strings[7752]);
46145strings[7741] = str->add(strings[7741]);
46146strings[7741] = str->add(strings[7741]);
46147strings[7741] = str->add(strings[7741]);
46148strings[7741] = str->add(strings[7741]);
46149strings[7741] = str->add(strings[7741]);
46150strings[7741] = str->add(strings[7741]);
46151strings[7741] = str->add(strings[7741]);
46152strings[7741] = str->add(strings[7741]);
46153strings[7741] = str->add(strings[7741]);
46154strings[7741] = str->add(strings[7741]);
46155strings[64] = str->add(strings[64]);
46156strings[2198] = str->add(strings[2198]);
46157strings[7753] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/239");
46158strings[64] = str->add(strings[64]);
46159strings[2198] = str->add(strings[2198]);
46160strings[1591] = str->add(strings[1591]);
46161strings[1591] = str->add(strings[1591]);
46162strings[64] = str->add(strings[64]);
46163strings[2190] = str->add(strings[2190]);
46164strings[7754] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/240");
46165strings[64] = str->add(strings[64]);
46166strings[2190] = str->add(strings[2190]);
46167strings[64] = str->add(strings[64]);
46168strings[2192] = str->add(strings[2192]);
46169strings[7755] = str->add("/home/cedric/.e/e/themes/b_and_w.edj//://images/241");
46170strings[64] = str->add(strings[64]);
46171strings[2192] = str->add(strings[2192]);
46172str->del(strings[2536]);
46173strings[2536] = str->add(strings[2536]);
46174str->del(strings[2536]);
46175strings[2536] = str->add(strings[2536]);
46176str->del(strings[2514]);
46177strings[2514] = str->add(strings[2514]);
46178str->del(strings[2514]);
46179strings[2514] = str->add(strings[2514]);
46180str->del(strings[215]);
46181strings[215] = str->add(strings[215]);
46182str->del(strings[215]);
46183strings[215] = str->add(strings[215]);
46184str->del(strings[2348]);
46185strings[2348] = str->add(strings[2348]);
46186str->del(strings[2348]);
46187strings[2348] = str->add(strings[2348]);
46188str->del(strings[2262]);
46189strings[2262] = str->add(strings[2262]);
46190str->del(strings[2262]);
46191strings[2262] = str->add(strings[2262]);
46192str->del(strings[2358]);
46193strings[2358] = str->add(strings[2358]);
46194str->del(strings[2358]);
46195strings[2358] = str->add(strings[2358]);
46196str->del(strings[2443]);
46197strings[2443] = str->add(strings[2443]);
46198str->del(strings[2443]);
46199strings[2443] = str->add(strings[2443]);
46200str->del(strings[2526]);
46201strings[2526] = str->add(strings[2526]);
46202str->del(strings[2526]);
46203strings[2526] = str->add(strings[2526]);
46204str->del(strings[2502]);
46205strings[2502] = str->add(strings[2502]);
46206str->del(strings[2502]);
46207strings[2502] = str->add(strings[2502]);
46208strings[1895] = str->add(strings[1895]);
46209strings[1552] = str->add(strings[1552]);
46210strings[7756] = str->add("/usr/devel/lib/enlightenment/modules/dropshadow/e-module-dropshadow.edj//://images/0");
46211strings[1895] = str->add(strings[1895]);
46212strings[1552] = str->add(strings[1552]);
46213str->del(strings[1894]);
46214strings[1894] = str->add(strings[1894]);
46215str->del(strings[1894]);
46216strings[1894] = str->add(strings[1894]);
46217strings[7757] = str->add("font");
46218strings[7758] = str->add("font_fallbacks");
46219strings[7759] = str->add("font_size");
46220strings[7760] = str->add("font_source");
46221strings[7761] = str->add("color");
46222strings[7762] = str->add("underline_color");
46223strings[7763] = str->add("underline2_color");
46224strings[7764] = str->add("outline_color");
46225strings[7765] = str->add("shadow_color");
46226strings[7766] = str->add("glow_color");
46227strings[7767] = str->add("glow2_color");
46228strings[7768] = str->add("backing_color");
46229strings[7769] = str->add("strikethrough_color");
46230strings[7770] = str->add("align");
46231strings[7771] = str->add("valign");
46232strings[7772] = str->add("wrap");
46233strings[7773] = str->add("left_margin");
46234strings[7774] = str->add("right_margin");
46235strings[7775] = str->add("underline");
46236strings[7776] = str->add("strikethrough");
46237strings[7777] = str->add("backing");
46238strings[7778] = str->add("style");
46239strings[7779] = str->add("tabstops");
46240strings[7770] = str->add(strings[7770]);
46241strings[7780] = str->add("center");
46242str->del(strings[7770]);
46243str->del(strings[7780]);
46244strings[7761] = str->add(strings[7761]);
46245strings[7781] = str->add("#000");
46246str->del(strings[7761]);
46247str->del(strings[7781]);
46248strings[7778] = str->add(strings[7778]);
46249strings[7782] = str->add("shadow");
46250str->del(strings[7778]);
46251str->del(strings[7782]);
46252strings[7765] = str->add(strings[7765]);
46253strings[7783] = str->add("#ffffff80");
46254str->del(strings[7765]);
46255str->del(strings[7783]);
46256strings[7772] = str->add(strings[7772]);
46257strings[7784] = str->add("word");
46258str->del(strings[7772]);
46259str->del(strings[7784]);
46260strings[7760] = str->add(strings[7760]);
46261strings[469] = str->add(strings[469]);
46262strings[469] = str->add(strings[469]);
46263str->del(strings[7760]);
46264str->del(strings[469]);
46265strings[7759] = str->add(strings[7759]);
46266strings[7785] = str->add("10.000000");
46267str->del(strings[7759]);
46268str->del(strings[7785]);
46269strings[7757] = str->add(strings[7757]);
46270strings[470] = str->add(strings[470]);
46271strings[470] = str->add(strings[470]);
46272str->del(strings[7757]);
46273str->del(strings[470]);
46274strings[382] = str->add(strings[382]);
46275strings[382] = str->add(strings[382]);
46276strings[382] = str->add(strings[382]);
46277strings[382] = str->add(strings[382]);
46278strings[382] = str->add(strings[382]);
46279strings[382] = str->add(strings[382]);
46280strings[470] = str->add(strings[470]);
46281strings[469] = str->add(strings[469]);
46282strings[7778] = str->add(strings[7778]);
46283strings[7786] = str->add("glow");
46284str->del(strings[7778]);
46285str->del(strings[7786]);
46286strings[7761] = str->add(strings[7761]);
46287strings[7787] = str->add("#fff");
46288str->del(strings[7761]);
46289str->del(strings[7787]);
46290strings[7767] = str->add(strings[7767]);
46291strings[7788] = str->add("#fe87");
46292str->del(strings[7767]);
46293str->del(strings[7788]);
46294strings[7766] = str->add(strings[7766]);
46295strings[7789] = str->add("#fa14");
46296str->del(strings[7766]);
46297str->del(strings[7789]);
46298strings[7757] = str->add(strings[7757]);
46299strings[471] = str->add(strings[471]);
46300str->del(strings[470]);
46301strings[471] = str->add(strings[471]);
46302str->del(strings[7757]);
46303str->del(strings[471]);
46304strings[470] = str->add(strings[470]);
46305strings[469] = str->add(strings[469]);
46306strings[7778] = str->add(strings[7778]);
46307strings[7790] = str->add("glow");
46308str->del(strings[7778]);
46309str->del(strings[7790]);
46310strings[7761] = str->add(strings[7761]);
46311strings[7791] = str->add("#fff");
46312str->del(strings[7761]);
46313str->del(strings[7791]);
46314strings[7767] = str->add(strings[7767]);
46315strings[7792] = str->add("#fe87");
46316str->del(strings[7767]);
46317str->del(strings[7792]);
46318strings[7766] = str->add(strings[7766]);
46319strings[7793] = str->add("#fa14");
46320str->del(strings[7766]);
46321str->del(strings[7793]);
46322strings[7757] = str->add(strings[7757]);
46323strings[471] = str->add(strings[471]);
46324str->del(strings[470]);
46325strings[471] = str->add(strings[471]);
46326str->del(strings[7757]);
46327str->del(strings[471]);
46328str->del(strings[7757]);
46329str->del(strings[7758]);
46330str->del(strings[7759]);
46331str->del(strings[7760]);
46332str->del(strings[7761]);
46333str->del(strings[7762]);
46334str->del(strings[7763]);
46335str->del(strings[7764]);
46336str->del(strings[7765]);
46337str->del(strings[7766]);
46338str->del(strings[7767]);
46339str->del(strings[7768]);
46340str->del(strings[7769]);
46341str->del(strings[7770]);
46342str->del(strings[7771]);
46343str->del(strings[7772]);
46344str->del(strings[7773]);
46345str->del(strings[7774]);
46346str->del(strings[7775]);
46347str->del(strings[7776]);
46348str->del(strings[7777]);
46349str->del(strings[7778]);
46350str->del(strings[7779]);
46351str->del(strings[382]);
46352str->del(strings[382]);
46353str->del(strings[382]);
46354str->del(strings[382]);
46355str->del(strings[382]);
46356str->del(strings[382]);
46357str->del(strings[471]);
46358str->del(strings[469]);
46359str->del(strings[470]);
46360str->del(strings[469]);
46361str->del(strings[471]);
46362str->del(strings[469]);
46363strings[7794] = str->add("font");
46364strings[7795] = str->add("font_fallbacks");
46365strings[7796] = str->add("font_size");
46366strings[7797] = str->add("font_source");
46367strings[7798] = str->add("color");
46368strings[7799] = str->add("underline_color");
46369strings[7800] = str->add("underline2_color");
46370strings[7801] = str->add("outline_color");
46371strings[7802] = str->add("shadow_color");
46372strings[7803] = str->add("glow_color");
46373strings[7804] = str->add("glow2_color");
46374strings[7805] = str->add("backing_color");
46375strings[7806] = str->add("strikethrough_color");
46376strings[7807] = str->add("align");
46377strings[7808] = str->add("valign");
46378strings[7809] = str->add("wrap");
46379strings[7810] = str->add("left_margin");
46380strings[7811] = str->add("right_margin");
46381strings[7812] = str->add("underline");
46382strings[7813] = str->add("strikethrough");
46383strings[7814] = str->add("backing");
46384strings[7815] = str->add("style");
46385strings[7816] = str->add("tabstops");
46386strings[7807] = str->add(strings[7807]);
46387strings[7817] = str->add("center");
46388str->del(strings[7807]);
46389str->del(strings[7817]);
46390strings[7798] = str->add(strings[7798]);
46391strings[7818] = str->add("#000");
46392str->del(strings[7798]);
46393str->del(strings[7818]);
46394strings[7815] = str->add(strings[7815]);
46395strings[7819] = str->add("shadow");
46396str->del(strings[7815]);
46397str->del(strings[7819]);
46398strings[7802] = str->add(strings[7802]);
46399strings[7820] = str->add("#ffffff80");
46400str->del(strings[7802]);
46401str->del(strings[7820]);
46402strings[7809] = str->add(strings[7809]);
46403strings[7821] = str->add("word");
46404str->del(strings[7809]);
46405str->del(strings[7821]);
46406strings[7797] = str->add(strings[7797]);
46407strings[469] = str->add(strings[469]);
46408strings[469] = str->add(strings[469]);
46409str->del(strings[7797]);
46410str->del(strings[469]);
46411strings[7796] = str->add(strings[7796]);
46412strings[7822] = str->add("10.000000");
46413str->del(strings[7796]);
46414str->del(strings[7822]);
46415strings[7794] = str->add(strings[7794]);
46416strings[470] = str->add(strings[470]);
46417strings[470] = str->add(strings[470]);
46418str->del(strings[7794]);
46419str->del(strings[470]);
46420strings[470] = str->add(strings[470]);
46421strings[469] = str->add(strings[469]);
46422strings[7815] = str->add(strings[7815]);
46423strings[7823] = str->add("soft_shadow");
46424str->del(strings[7815]);
46425str->del(strings[7823]);
46426strings[7798] = str->add(strings[7798]);
46427strings[7824] = str->add("#fff");
46428str->del(strings[7798]);
46429str->del(strings[7824]);
46430strings[7802] = str->add(strings[7802]);
46431strings[7825] = str->add("#00000020");
46432str->del(strings[7802]);
46433str->del(strings[7825]);
46434strings[7796] = str->add(strings[7796]);
46435strings[7826] = str->add("12.000000");
46436str->del(strings[7796]);
46437str->del(strings[7826]);
46438strings[7794] = str->add(strings[7794]);
46439strings[471] = str->add(strings[471]);
46440str->del(strings[470]);
46441strings[471] = str->add(strings[471]);
46442str->del(strings[7794]);
46443str->del(strings[471]);
46444strings[382] = str->add(strings[382]);
46445strings[382] = str->add(strings[382]);
46446strings[382] = str->add(strings[382]);
46447strings[382] = str->add(strings[382]);
46448strings[382] = str->add(strings[382]);
46449strings[382] = str->add(strings[382]);
46450strings[382] = str->add(strings[382]);
46451strings[382] = str->add(strings[382]);
46452strings[382] = str->add(strings[382]);
46453strings[382] = str->add(strings[382]);
46454strings[382] = str->add(strings[382]);
46455strings[382] = str->add(strings[382]);
46456strings[382] = str->add(strings[382]);
46457strings[382] = str->add(strings[382]);
46458strings[382] = str->add(strings[382]);
46459strings[382] = str->add(strings[382]);
46460strings[382] = str->add(strings[382]);
46461strings[382] = str->add(strings[382]);
46462strings[382] = str->add(strings[382]);
46463strings[382] = str->add(strings[382]);
46464strings[382] = str->add(strings[382]);
46465strings[382] = str->add(strings[382]);
46466str->del(strings[7794]);
46467str->del(strings[7795]);
46468str->del(strings[7796]);
46469str->del(strings[7797]);
46470str->del(strings[7798]);
46471str->del(strings[7799]);
46472str->del(strings[7800]);
46473str->del(strings[7801]);
46474str->del(strings[7802]);
46475str->del(strings[7803]);
46476str->del(strings[7804]);
46477str->del(strings[7805]);
46478str->del(strings[7806]);
46479str->del(strings[7807]);
46480str->del(strings[7808]);
46481str->del(strings[7809]);
46482str->del(strings[7810]);
46483str->del(strings[7811]);
46484str->del(strings[7812]);
46485str->del(strings[7813]);
46486str->del(strings[7814]);
46487str->del(strings[7815]);
46488str->del(strings[7816]);
46489str->del(strings[471]);
46490str->del(strings[469]);
46491str->del(strings[382]);
46492str->del(strings[382]);
46493str->del(strings[382]);
46494str->del(strings[382]);
46495str->del(strings[382]);
46496str->del(strings[382]);
46497str->del(strings[382]);
46498str->del(strings[382]);
46499str->del(strings[382]);
46500str->del(strings[382]);
46501str->del(strings[382]);
46502str->del(strings[382]);
46503str->del(strings[382]);
46504str->del(strings[382]);
46505str->del(strings[382]);
46506str->del(strings[382]);
46507str->del(strings[382]);
46508str->del(strings[382]);
46509str->del(strings[382]);
46510str->del(strings[382]);
46511str->del(strings[382]);
46512str->del(strings[470]);
46513str->del(strings[469]);
46514str->del(strings[382]);
46515str->del(strings[7740]);
46516str->del(strings[7741]);
46517str->del(strings[7741]);
46518str->del(strings[1841]);
46519str->del(strings[7741]);
46520str->del(strings[7740]);
46521str->del(strings[1841]);
46522str->del(strings[7741]);
46523str->del(strings[7741]);
46524str->del(strings[7741]);
46525str->del(strings[7741]);
46526str->del(strings[7746]);
46527str->del(strings[7747]);
46528str->del(strings[1932]);
46529str->del(strings[7747]);
46530str->del(strings[7741]);
46531str->del(strings[7741]);
46532str->del(strings[7741]);
46533str->del(strings[7741]);
46534str->del(strings[7741]);
46535str->del(strings[7741]);
46536str->del(strings[7741]);
46537str->del(strings[7741]);
46538str->del(strings[7741]);
46539str->del(strings[7741]);
46540str->del(strings[7746]);
46541str->del(strings[7747]);
46542str->del(strings[1932]);
46543str->del(strings[7747]);
46544str->del(strings[7741]);
46545str->del(strings[7741]);
46546str->del(strings[7741]);
46547str->del(strings[7741]);
46548str->del(strings[7741]);
46549str->del(strings[7741]);
46550str->del(strings[7741]);
46551str->del(strings[7741]);
46552str->del(strings[7741]);
46553str->del(strings[7741]);
46554strings[64] = str->add(strings[64]);
46555strings[2595] = str->add(strings[2595]);
46556strings[7827] = str->add("load");
46557strings[1841] = str->add(strings[1841]);
46558strings[469] = str->add(strings[469]);
46559strings[2688] = str->add(strings[2688]);
46560strings[7827] = str->add(strings[7827]);
46561strings[1841] = str->add(strings[1841]);
46562strings[64] = str->add(strings[64]);
46563strings[4503] = str->add(strings[4503]);
46564strings[64] = str->add(strings[64]);
46565strings[3259] = str->add(strings[3259]);
46566strings[64] = str->add(strings[64]);
46567strings[3259] = str->add(strings[3259]);
46568strings[469] = str->add(strings[469]);
46569strings[2902] = str->add(strings[2902]);
46570strings[7828] = str->add("resize");
46571strings[1933] = str->add(strings[1933]);
46572str->del(strings[7827]);
46573str->del(strings[1841]);
46574str->del(strings[1933]);
46575str->del(strings[469]);
46576str->del(strings[2688]);
46577strings[469] = str->add(strings[469]);
46578strings[2688] = str->add(strings[2688]);
46579strings[7827] = str->add(strings[7827]);
46580strings[1841] = str->add(strings[1841]);
46581strings[469] = str->add(strings[469]);
46582strings[2902] = str->add(strings[2902]);
46583strings[7828] = str->add(strings[7828]);
46584strings[7829] = str->add("e,action,mouse,move");
46585strings[7830] = str->add("e");
46586strings[7829] = str->add(strings[7829]);
46587strings[7830] = str->add(strings[7830]);
46588strings[7829] = str->add(strings[7829]);
46589strings[7830] = str->add(strings[7830]);
46590strings[7829] = str->add(strings[7829]);
46591strings[7830] = str->add(strings[7830]);
46592strings[7829] = str->add(strings[7829]);
46593strings[7830] = str->add(strings[7830]);
46594strings[1737] = str->add(strings[1737]);
46595strings[1853] = str->add(strings[1853]);
46596strings[7829] = str->add(strings[7829]);
46597strings[7830] = str->add(strings[7830]);
46598strings[7831] = str->add("mouse,move");
46599strings[1853] = str->add(strings[1853]);
46600strings[7829] = str->add(strings[7829]);
46601strings[7830] = str->add(strings[7830]);
46602strings[7831] = str->add(strings[7831]);
46603strings[1853] = str->add(strings[1853]);
46604str->del(strings[7827]);
46605str->del(strings[1841]);
46606str->del(strings[7828]);
46607str->del(strings[7827]);
46608str->del(strings[1841]);
46609str->del(strings[7828]);
46610str->del(strings[7829]);
46611str->del(strings[7830]);
46612str->del(strings[7829]);
46613str->del(strings[7830]);
46614str->del(strings[7829]);
46615str->del(strings[7830]);
46616str->del(strings[7829]);
46617str->del(strings[7830]);
46618str->del(strings[7829]);
46619str->del(strings[7830]);
46620str->del(strings[1737]);
46621str->del(strings[1853]);
46622str->del(strings[7829]);
46623str->del(strings[7830]);
46624str->del(strings[7831]);
46625str->del(strings[1853]);
46626str->del(strings[7829]);
46627str->del(strings[7830]);
46628str->del(strings[7831]);
46629str->del(strings[1853]);
46630strings[7832] = str->add("e,action,mouse,move");
46631strings[7833] = str->add("e");
46632strings[7834] = str->add("mouse,move");
46633strings[1853] = str->add(strings[1853]);
46634str->del(strings[7832]);
46635str->del(strings[7833]);
46636str->del(strings[7834]);
46637str->del(strings[1853]);
46638str->del(strings[190]);
46639str->del(strings[305]);
46640str->del(strings[306]);
46641str->del(strings[193]);
46642strings[190] = str->add(strings[190]);
46643strings[305] = str->add(strings[305]);
46644strings[306] = str->add(strings[306]);
46645strings[193] = str->add(strings[193]);
46646strings[7835] = str->add("font");
46647strings[7836] = str->add("font_fallbacks");
46648strings[7837] = str->add("font_size");
46649strings[7838] = str->add("font_source");
46650strings[7839] = str->add("color");
46651strings[7840] = str->add("underline_color");
46652strings[7841] = str->add("underline2_color");
46653strings[7842] = str->add("outline_color");
46654strings[7843] = str->add("shadow_color");
46655strings[7844] = str->add("glow_color");
46656strings[7845] = str->add("glow2_color");
46657strings[7846] = str->add("backing_color");
46658strings[7847] = str->add("strikethrough_color");
46659strings[7848] = str->add("align");
46660strings[7849] = str->add("valign");
46661strings[7850] = str->add("wrap");
46662strings[7851] = str->add("left_margin");
46663strings[7852] = str->add("right_margin");
46664strings[7853] = str->add("underline");
46665strings[7854] = str->add("strikethrough");
46666strings[7855] = str->add("backing");
46667strings[7856] = str->add("style");
46668strings[7857] = str->add("tabstops");
46669strings[7848] = str->add(strings[7848]);
46670strings[7858] = str->add("center");
46671str->del(strings[7848]);
46672str->del(strings[7858]);
46673strings[7839] = str->add(strings[7839]);
46674strings[7859] = str->add("#000");
46675str->del(strings[7839]);
46676str->del(strings[7859]);
46677strings[7856] = str->add(strings[7856]);
46678strings[7860] = str->add("shadow");
46679str->del(strings[7856]);
46680str->del(strings[7860]);
46681strings[7843] = str->add(strings[7843]);
46682strings[7861] = str->add("#ffffff80");
46683str->del(strings[7843]);
46684str->del(strings[7861]);
46685strings[7850] = str->add(strings[7850]);
46686strings[7862] = str->add("word");
46687str->del(strings[7850]);
46688str->del(strings[7862]);
46689strings[7838] = str->add(strings[7838]);
46690strings[469] = str->add(strings[469]);
46691strings[469] = str->add(strings[469]);
46692str->del(strings[7838]);
46693str->del(strings[469]);
46694strings[7837] = str->add(strings[7837]);
46695strings[7863] = str->add("10.000000");
46696str->del(strings[7837]);
46697str->del(strings[7863]);
46698strings[7835] = str->add(strings[7835]);
46699strings[470] = str->add(strings[470]);
46700strings[470] = str->add(strings[470]);
46701str->del(strings[7835]);
46702str->del(strings[470]);
46703strings[382] = str->add(strings[382]);
46704strings[382] = str->add(strings[382]);
46705strings[382] = str->add(strings[382]);
46706strings[382] = str->add(strings[382]);
46707strings[382] = str->add(strings[382]);
46708strings[382] = str->add(strings[382]);
46709strings[470] = str->add(strings[470]);
46710strings[469] = str->add(strings[469]);
46711strings[7856] = str->add(strings[7856]);
46712strings[7864] = str->add("glow");
46713str->del(strings[7856]);
46714str->del(strings[7864]);
46715strings[7839] = str->add(strings[7839]);
46716strings[7865] = str->add("#fff");
46717str->del(strings[7839]);
46718str->del(strings[7865]);
46719strings[7845] = str->add(strings[7845]);
46720strings[7866] = str->add("#fe87");
46721str->del(strings[7845]);
46722str->del(strings[7866]);
46723strings[7844] = str->add(strings[7844]);
46724strings[7867] = str->add("#fa14");
46725str->del(strings[7844]);
46726str->del(strings[7867]);
46727strings[7835] = str->add(strings[7835]);
46728strings[471] = str->add(strings[471]);
46729str->del(strings[470]);
46730strings[471] = str->add(strings[471]);
46731str->del(strings[7835]);
46732str->del(strings[471]);
46733strings[470] = str->add(strings[470]);
46734strings[469] = str->add(strings[469]);
46735strings[7856] = str->add(strings[7856]);
46736strings[7868] = str->add("glow");
46737str->del(strings[7856]);
46738str->del(strings[7868]);
46739strings[7839] = str->add(strings[7839]);
46740strings[7869] = str->add("#fff");
46741str->del(strings[7839]);
46742str->del(strings[7869]);
46743strings[7845] = str->add(strings[7845]);
46744strings[7870] = str->add("#fe87");
46745str->del(strings[7845]);
46746str->del(strings[7870]);
46747strings[7844] = str->add(strings[7844]);
46748strings[7871] = str->add("#fa14");
46749str->del(strings[7844]);
46750str->del(strings[7871]);
46751strings[7835] = str->add(strings[7835]);
46752strings[471] = str->add(strings[471]);
46753str->del(strings[470]);
46754strings[471] = str->add(strings[471]);
46755str->del(strings[7835]);
46756str->del(strings[471]);
46757str->del(strings[7835]);
46758str->del(strings[7836]);
46759str->del(strings[7837]);
46760str->del(strings[7838]);
46761str->del(strings[7839]);
46762str->del(strings[7840]);
46763str->del(strings[7841]);
46764str->del(strings[7842]);
46765str->del(strings[7843]);
46766str->del(strings[7844]);
46767str->del(strings[7845]);
46768str->del(strings[7846]);
46769str->del(strings[7847]);
46770str->del(strings[7848]);
46771str->del(strings[7849]);
46772str->del(strings[7850]);
46773str->del(strings[7851]);
46774str->del(strings[7852]);
46775str->del(strings[7853]);
46776str->del(strings[7854]);
46777str->del(strings[7855]);
46778str->del(strings[7856]);
46779str->del(strings[7857]);
46780str->del(strings[382]);
46781str->del(strings[382]);
46782str->del(strings[382]);
46783str->del(strings[382]);
46784str->del(strings[382]);
46785str->del(strings[382]);
46786str->del(strings[471]);
46787str->del(strings[469]);
46788str->del(strings[470]);
46789str->del(strings[469]);
46790str->del(strings[471]);
46791str->del(strings[469]);
46792strings[7872] = str->add("font");
46793strings[7873] = str->add("font_fallbacks");
46794strings[7874] = str->add("font_size");
46795strings[7875] = str->add("font_source");
46796strings[7876] = str->add("color");
46797strings[7877] = str->add("underline_color");
46798strings[7878] = str->add("underline2_color");
46799strings[7879] = str->add("outline_color");
46800strings[7880] = str->add("shadow_color");
46801strings[7881] = str->add("glow_color");
46802strings[7882] = str->add("glow2_color");
46803strings[7883] = str->add("backing_color");
46804strings[7884] = str->add("strikethrough_color");
46805strings[7885] = str->add("align");
46806strings[7886] = str->add("valign");
46807strings[7887] = str->add("wrap");
46808strings[7888] = str->add("left_margin");
46809strings[7889] = str->add("right_margin");
46810strings[7890] = str->add("underline");
46811strings[7891] = str->add("strikethrough");
46812strings[7892] = str->add("backing");
46813strings[7893] = str->add("style");
46814strings[7894] = str->add("tabstops");
46815strings[7885] = str->add(strings[7885]);
46816strings[7895] = str->add("center");
46817str->del(strings[7885]);
46818str->del(strings[7895]);
46819strings[7876] = str->add(strings[7876]);
46820strings[7896] = str->add("#000");
46821str->del(strings[7876]);
46822str->del(strings[7896]);
46823strings[7893] = str->add(strings[7893]);
46824strings[7897] = str->add("shadow");
46825str->del(strings[7893]);
46826str->del(strings[7897]);
46827strings[7880] = str->add(strings[7880]);
46828strings[7898] = str->add("#ffffff80");
46829str->del(strings[7880]);
46830str->del(strings[7898]);
46831strings[7887] = str->add(strings[7887]);
46832strings[7899] = str->add("word");
46833str->del(strings[7887]);
46834str->del(strings[7899]);
46835strings[7875] = str->add(strings[7875]);
46836strings[469] = str->add(strings[469]);
46837strings[469] = str->add(strings[469]);
46838str->del(strings[7875]);
46839str->del(strings[469]);
46840strings[7874] = str->add(strings[7874]);
46841strings[7900] = str->add("10.000000");
46842str->del(strings[7874]);
46843str->del(strings[7900]);
46844strings[7872] = str->add(strings[7872]);
46845strings[470] = str->add(strings[470]);
46846strings[470] = str->add(strings[470]);
46847str->del(strings[7872]);
46848str->del(strings[470]);
46849strings[470] = str->add(strings[470]);
46850strings[469] = str->add(strings[469]);
46851strings[7893] = str->add(strings[7893]);
46852strings[7901] = str->add("soft_shadow");
46853str->del(strings[7893]);
46854str->del(strings[7901]);
46855strings[7876] = str->add(strings[7876]);
46856strings[7902] = str->add("#fff");
46857str->del(strings[7876]);
46858str->del(strings[7902]);
46859strings[7880] = str->add(strings[7880]);
46860strings[7903] = str->add("#00000020");
46861str->del(strings[7880]);
46862str->del(strings[7903]);
46863strings[7874] = str->add(strings[7874]);
46864strings[7904] = str->add("12.000000");
46865str->del(strings[7874]);
46866str->del(strings[7904]);
46867strings[7872] = str->add(strings[7872]);
46868strings[471] = str->add(strings[471]);
46869str->del(strings[470]);
46870strings[471] = str->add(strings[471]);
46871str->del(strings[7872]);
46872str->del(strings[471]);
46873strings[382] = str->add(strings[382]);
46874strings[382] = str->add(strings[382]);
46875strings[382] = str->add(strings[382]);
46876strings[382] = str->add(strings[382]);
46877strings[382] = str->add(strings[382]);
46878strings[382] = str->add(strings[382]);
46879strings[382] = str->add(strings[382]);
46880strings[382] = str->add(strings[382]);
46881strings[382] = str->add(strings[382]);
46882strings[382] = str->add(strings[382]);
46883strings[382] = str->add(strings[382]);
46884strings[382] = str->add(strings[382]);
46885strings[382] = str->add(strings[382]);
46886strings[382] = str->add(strings[382]);
46887strings[382] = str->add(strings[382]);
46888strings[382] = str->add(strings[382]);
46889strings[382] = str->add(strings[382]);
46890strings[382] = str->add(strings[382]);
46891strings[382] = str->add(strings[382]);
46892strings[382] = str->add(strings[382]);
46893strings[382] = str->add(strings[382]);
46894strings[382] = str->add(strings[382]);
46895str->del(strings[471]);
46896str->del(strings[469]);
46897str->del(strings[382]);
46898str->del(strings[382]);
46899str->del(strings[382]);
46900str->del(strings[382]);
46901str->del(strings[382]);
46902str->del(strings[382]);
46903str->del(strings[382]);
46904str->del(strings[382]);
46905str->del(strings[382]);
46906str->del(strings[382]);
46907str->del(strings[382]);
46908str->del(strings[382]);
46909str->del(strings[382]);
46910str->del(strings[382]);
46911str->del(strings[382]);
46912str->del(strings[382]);
46913str->del(strings[382]);
46914str->del(strings[382]);
46915str->del(strings[382]);
46916str->del(strings[382]);
46917str->del(strings[382]);
46918str->del(strings[470]);
46919str->del(strings[469]);
46920str->del(strings[382]);
46921str->del(strings[7872]);
46922str->del(strings[7873]);
46923str->del(strings[7874]);
46924str->del(strings[7875]);
46925str->del(strings[7876]);
46926str->del(strings[7877]);
46927str->del(strings[7878]);
46928str->del(strings[7879]);
46929str->del(strings[7880]);
46930str->del(strings[7881]);
46931str->del(strings[7882]);
46932str->del(strings[7883]);
46933str->del(strings[7884]);
46934str->del(strings[7885]);
46935str->del(strings[7886]);
46936str->del(strings[7887]);
46937str->del(strings[7888]);
46938str->del(strings[7889]);
46939str->del(strings[7890]);
46940str->del(strings[7891]);
46941str->del(strings[7892]);
46942str->del(strings[7893]);
46943str->del(strings[7894]);
46944strings[7905] = str->add("font");
46945strings[7906] = str->add("font_fallbacks");
46946strings[7907] = str->add("font_size");
46947strings[7908] = str->add("font_source");
46948strings[7909] = str->add("color");
46949strings[7910] = str->add("underline_color");
46950strings[7911] = str->add("underline2_color");
46951strings[7912] = str->add("outline_color");
46952strings[7913] = str->add("shadow_color");
46953strings[7914] = str->add("glow_color");
46954strings[7915] = str->add("glow2_color");
46955strings[7916] = str->add("backing_color");
46956strings[7917] = str->add("strikethrough_color");
46957strings[7918] = str->add("align");
46958strings[7919] = str->add("valign");
46959strings[7920] = str->add("wrap");
46960strings[7921] = str->add("left_margin");
46961strings[7922] = str->add("right_margin");
46962strings[7923] = str->add("underline");
46963strings[7924] = str->add("strikethrough");
46964strings[7925] = str->add("backing");
46965strings[7926] = str->add("style");
46966strings[7927] = str->add("tabstops");
46967strings[7918] = str->add(strings[7918]);
46968strings[7928] = str->add("center");
46969str->del(strings[7918]);
46970str->del(strings[7928]);
46971strings[7909] = str->add(strings[7909]);
46972strings[7929] = str->add("#000");
46973str->del(strings[7909]);
46974str->del(strings[7929]);
46975strings[7926] = str->add(strings[7926]);
46976strings[7930] = str->add("shadow");
46977str->del(strings[7926]);
46978str->del(strings[7930]);
46979strings[7913] = str->add(strings[7913]);
46980strings[7931] = str->add("#ffffff80");
46981str->del(strings[7913]);
46982str->del(strings[7931]);
46983strings[7920] = str->add(strings[7920]);
46984strings[7932] = str->add("word");
46985str->del(strings[7920]);
46986str->del(strings[7932]);
46987strings[7908] = str->add(strings[7908]);
46988strings[469] = str->add(strings[469]);
46989strings[469] = str->add(strings[469]);
46990str->del(strings[7908]);
46991str->del(strings[469]);
46992strings[7907] = str->add(strings[7907]);
46993strings[7933] = str->add("10.000000");
46994str->del(strings[7907]);
46995str->del(strings[7933]);
46996strings[7905] = str->add(strings[7905]);
46997strings[470] = str->add(strings[470]);
46998strings[470] = str->add(strings[470]);
46999str->del(strings[7905]);